Forum Linux.noyau compilation d'un module statiquement ds le noyau

Posté par  .
Étiquettes : aucune
0
22
nov.
2007
Bjr,

J'ai essayé de compiler statiquement un module ds le noyau.

J'ai ajouté le obj-$(CONFIG_xxx) et le obj-y=+xxx

le .o est crée mais le .ko ne l'est pas.

Est ce que vous auriez une idée sur ce que j'aurais oublié?

Le noyau sur lequel je travaille est un 2.6.18.

Merci.
  • # Un peu plus sur Kbuild

    Posté par  (site web personnel) . Évalué à 3.

    "module statique" et "où est mon .ko ?" ne vont pas très bien ensemble.

    + Soit tu compiles ton fichier C pour l'incorporer dans la grosse image du noyau (c'est ce que tu fais là). Dans ce cas, il y a un .o (le fichier C compilé avec un gcc -c, tout va bien) et l'image finale du noyau (Image, zImage, bzImage, ...) contient les symboles de ce fichier.

    + Soit tu compiles ton (ou tes) fichier(s) C pour faire un module qui pourra être chargé dynamiquement et dans ce cas tu auras à la fois le .o et le .ko

    Maintenant, il reste la question de la configuration de la compilation.
    - La variable obj-y contient la liste des objets à lier à la grosse image.
    - La variable obj-m contient la liste des modules à compiler
    - Les defines CONFIG_XXX contiennent l'information 'y' ou 'm' en fonction de ce que l'on souhaite faire (lier le module à la grosse image ou en faire un objet chargeable dynamiquement (= .ko))
    - en général on écrit dans le Makefile :
    obj-$(CONFIG_XXX) += mon_module.o
    - Le fichier Kconfig permet de déclarer XXX pour qu'un make menuconfig t'affiche l'option
    config XXX
        tristate "mon super module"
        depends on FOO && BAR
        help
         Poupou !
    - un make menuconfig permet de configurer XXX (au choix "ne pas l'inclure" "l'include dans l'image du noyau" "faire un module") et tu dois avoir un CONFIG_XXX dans le fichier .config qui contient la configuration courante de la compilation
    - si ce que tu veux faire est un module qui pourra se charger dynamiquement il faut avoir :
    linux-2.6$ grep CONFIG_XXX .config
    CONFIG_XXX=m

    et là tout s'enchaîne, dans le Makefile, obj-$(CONFIG_XXX) devient obj-m += mon_module.o et kbuild sort un .ko

    Il reste des petits détails, du genre un make modules_install pour installer les modules fraichement construits là où le noyau pourra les trouver avec un modprobe (INSTALL_MOD_PATH permet d'installer ces modules autre part que le chemin par défault ('/')) ou un depmod -a pour construire les fichiers qui décrivent les dépendances entre les modules.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.