Scroll to navigation

INIT_MODULE(2) Manuel du programmeur Linux INIT_MODULE(2)

NOM

init_module - Charger une module de noyau

SYNOPSIS

int init_module(void *module_image, unsigned long len,
                const char *param_values);
 
Remarque : il n'existe pas de fonction glibc autour de cet appel système ; consultez NOTES.

DESCRIPTION

init_module() charge une image ELF dans l'espace du noyau, réalise toutes les réallocations de symboles nécessaires, initialise les paramètres du module aux valeurs fournies par l'appelant et exécute ensuite la fonction init du module. Cet appel système nécessite des droits.
 
L'argument module_image pointe vers un tampon contenant l'image binaire à charger ; len indique la taille du tampon. L'image du module devrait être une image ELF valable, construite pour le noyau en fonctionnement.
 
L'argument param_values est une chaîne contenant une liste de valeurs, séparées par des espaces, de paramètres du module (définis dans le module en utilisant module_param() et module_param_array()). Le noyau analyse cette chaîne et initialise les paramètres indiqués. Toutes les spécifications de paramètres sont de la forme :
 
nom[=valeur[,valeur...]]
 
Le paramètre nom est un de ceux définis dans le module en utilisant module_param() (consultez le fichier include/linux/moduleparam.h dans les sources du noyau Linux). Le paramètre valeur est facultatif pour les paramètres de type bool et invbool. Les valeurs des paramètres de tableau sont indiqués en liste, séparés par des virgules.

VALEUR RENVOYÉE

S'il réussit, cet appel système renvoie 0. S'il échoue, il renvoie -1 et définit errno en conséquence.

ERREURS

EBUSY
Délai dépassé en essayant de résoudre une référence de symbole par ce module.
EEXIST
Un module de ce nom est déjà chargé.
EFAULT
Un argument d'adresse faisait référence à un emplacement en dehors de l'espace d'adressage accessible du processus.
EINVAL
param_values est incorrect, ou certaines parties de l'image ELF de module_image contient des incohérences.
ENOEXEC
L'image binaire fournie dans module_image n'est pas une image ELF, ou est une image ELF incorrecte ou pour une autre architecture.
EPERM
L'appelant n'avait pas les droits (n'avait pas la capacité CAP_SYS_MODULE), ou le chargement de module est désactivé (consultez /proc/sys/kernel/modules_disabled dans proc(5)).
En plus des erreurs précédentes, si la fonction init du module est exécutée et renvoie une erreur, alors init_module() échoue et errno est définie à la valeur renvoyée par la fonction init.

CONFORMITÉ

init_module() est spécifique à Linux.

NOTES

La glibc ne fournit pas de fonction autour de cet appel système ; utilisez syscall(2) pour l'appeler.
 
Des renseignements concernant les modules chargés sont disponibles dans /proc/modules et dans les arborescences de fichiers des sous-répertoires par module sous /sys/module.
 
Consultez le fichier include/linux/module.h dans les sources du noyau Linux pour obtenir des renseignements de fond utiles.

Linux 2.4 et antérieurs

Dans Linux 2.4 et antérieurs, cet appel système était assez différent :
 
#include <linux/module.h>
 
int init_module(const char *name, struct module *image );
 
(les applications en espace utilisateur peuvent détecter la versions de init_module() disponible en appelant query_module() ; ce dernier appel échoue avec l'erreur ENOSYS à partir de Linux 2.6)
 
L'ancienne version de l'appel système charge l'image de module réallouée pointée par image dans l'espace du noyau et exécute la fonction init du module. L'appelant doit fournir l'image réallouée (depuis Linux 2.6, l'appel système init_module() s'occupe de la réallocation).
L'image du module commence avec une structure module suivie par du code et des données appropriés. Depuis Linux 2.2, la structure module est définie comme suit :

struct module {
    unsigned long         size_of_struct;
    struct module        *next;
    const char           *name;
    unsigned long         size;
    long                  usecount;
    unsigned long         flags;
    unsigned int          nsyms;
    unsigned int          ndeps;
    struct module_symbol *syms;
    struct module_ref    *deps;
    struct module_ref    *refs;
    int                 (*init)(void);
    void                (*cleanup)(void);
    const struct exception_table_entry *ex_table_start;
    const struct exception_table_entry *ex_table_end;
#ifdef __alpha__
    unsigned long gp;
#endif
};

On s'attend à ce que tous les champs pointeurs, à l'exception de next et refs, pointent vers l'intérieur du corps du module et qu'ils puissent être initialisés de manière appropriée pour l'espace noyau, c'est-à-dire relogés avec le reste du module.

VOIR AUSSI

create_module(2), delete_module(2), query_module(2), lsmod(8), modprobe(8)

COLOPHON

Cette page fait partie de la publication 3.44 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse <http://www.kernel.org/doc/man-pages/>.

TRADUCTION

Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.
Alain Portal <http://manpagesfr.free.fr/> (2006-2008).
Veuillez signaler toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande «  man -L C <section>  <page_de_man> ».
18 octobre 2012 Linux