Linux驱动程序phys_mem_access_prot未定义

时间:2010-06-16 16:33:02

标签: linux-kernel linux-device-driver

我有一个可加载的模块,当在Ubuntu 9.10(Linux 2.6.31-22-server)下构建时,它会发出关于phys_mem_access_prot的警告。

[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-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

并且驱动程序加载,所以我很困惑为什么modpost不满意。这是一个问题,因为内核不会使用EXPORT_SYMBOL()导出函数吗?

1 个答案:

答案 0 :(得分:1)

你已经回答了自己的问题!模块使用的任何内核函数都需要通过各种EXPORT_SYMBOL()宏之一进行导出。

如果非GPL模块需要使用EXPORT_SYMBOL_GPL导出的函数,您也会遇到问题。