Ce n' __init dans le code du noyau de Linux?
Dans le noyau Linux code source, j'ai trouvé cette fonction:
static int __init clk_disable_unused(void)
{
//some code
}
Ici, je ne comprends pas ce qui ne __init
moyens.
Vous devez vous connecter pour publier un commentaire.
include/linux/init.h
Ce ne sont que des macros pour localiser certaines parties du code linux en particulier
les zones de la finale de l'exécution de binaires.
__init
, par exemple (ou mieux le__attribute__ ((__section__
cette macro s'étend à d') demande au compilateur de cette marque(".init.text")))
la fonction d'une manière spéciale. À la fin de l'éditeur de liens recueille toutes les fonctions
avec cette interrogation à la fin (ou le début) du fichier binaire.
Lorsque le noyau démarre, ce code s'exécute une seule fois (l'initialisation). Après son exécution, la
le noyau peut libérer cette mémoire pour le réutiliser, et vous verrez le noyau
message:
Pour utiliser cette fonction, vous avez besoin d'un éditeur de liens spéciaux fichier de script, qui raconte l'
l'éditeur de liens où trouver tous les marqués fonctions.
Cela démontre une fonctionnalité de noyau 2.2 et versions ultérieures. Notez le changement dans les définitions de la
init
etcleanup
fonctions. Le__init
macro provoque lainit
fonction à être jeté et sa mémoire libérée une fois que leinit
fonction des finitions pour les pilotes intégrés, mais pas les modules chargeables. Si vous pensez à ce sujet lors de lainit
fonction est appelée, cela fait beaucoup de sens.source
__init est une macro définie dans l' ./include/linux/init.h qui se développe pour
__attribute__ ((__section__(".init.text")))
.Il indique au compilateur pour marquer cette fonction d'une manière spéciale. À la fin de l'éditeur de liens recueille toutes les fonctions avec cette marque à la fin (ou commencer) du fichier binaire. Lorsque le noyau démarre, ce code s'exécute une seule fois (l'initialisation). Après son exécution, le noyau peut libérer cette mémoire pour le réutiliser, et vous verrez le noyau
Lire les commentaires (et les docs en même temps) dans linux/init.h.
Vous devez également savoir que gcc a quelques extensions faites spécialement pour le code du noyau de linux et il semble que cette macro utilise un d'entre eux.
Lorsque vous compilez et insérer un module du noyau Linux dans le noyau de la première fonction à exécuter est de __init.Cette fonction est essentiellement utilisé pour effectuer l'initialisation avant d'effectuer les principales opérations telles que l'enregistrement d'un pilote de périphérique, etc, Il existe une autre fonction à l'effet inverse __sortie, qui est appelée lorsque vous retirez le module du noyau qui est à nouveau utilisé pour supprimer certains périphérique enregistré ou toute fonction similaire