2010-06-16 11 views
3

J'ai un module chargeable qui lance un avertissement à propos de phys_mem_access_prot lorsqu'il est construit sous Ubuntu 9.10 (Linux 2.6.31-22-server).Pilote Linux phys_mem_access_prot undefined

[664] make -C /lib/modules/`uname -r`/build M=`pwd` 
make: Entering directory `/usr/src/linux-headers-2.6.31-22-server' 
    LD  /home/chuck/dev/svd/built-in.o 
    CC [M] /home/chuck/dev/svd/svd.o 
    LD [M] /home/chuck/dev/svd/svd_drv.o 
    Building modules, stage 2. 
    MODPOST 1 modules 
WARNING: "phys_mem_access_prot" [/home/chuck/dev/svd/svd_drv.ko] undefined! 
    CC  /home/chuck/dev/svd/svd_drv.mod.o 
    LD [M] /home/chuck/dev/svd/svd_drv.ko 
make: Leaving directory `/usr/src/linux-headers-2.6.31-22-server' 

La fonction ne montre dans le fichier System.map-2.6.31-22-server

[667] grep phys_mem_access_prot /boot/System.map-2.6.31-22-server 
ffffffff8103fb40 T phys_mem_access_prot 
ffffffff8103fb50 T phys_mem_access_prot_allowed 

et les charges du pilote, donc je suis confus quant à pourquoi modpost est malheureux. Est-ce un problème car le noyau n'exporte pas la fonction avec EXPORT_SYMBOL()?

Répondre

1

Vous avez répondu à votre question! Toute fonction du noyau utilisée par un module doit être exportée par l'une des diverses macros EXPORT_SYMBOL().

Vous verrez également des problèmes si des modules non-GPL doivent utiliser des fonctions exportées par EXPORT_SYMBOL_GPL.

+0

Merci pour la confirmation! La façon dont LDD expliquait EXPORT_SYMBOL, je n'étais pas sûr si elle appliquait uniquement le module -> noyau ou si elle s'appliquait dans les deux sens. – ctuffli