2010-06-16 331 views
3

我有一個可加載的模塊,它在Ubuntu 9.10(Linux 2.6.31-22-server)下生成時會對phys_mem_access_prot發出警告。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' 

該函數在System.map-2.6.31-22服務器文件

[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 

,並加載驅動程序顯示出來,所以我很困惑,爲什麼modpost很不高興。這是一個問題,因爲內核不會導出功能EXPORT_SYMBOL()

回答

1

您已經回答了您自己的問題!任何由模塊使用的內核函數都需要由各種EXPORT_SYMBOL()宏中的一個導出。

如果非GPL模塊需要使用由EXPORT_SYMBOL_GPL導出的函數,您還會看到問題。

+0

感謝您的確認! LDD解釋EXPORT_SYMBOL的方式,我不確定它是否僅應用了模塊 - >內核,或者它是否應用了兩種方式。 – ctuffli 2010-06-17 16:11:20