在写GPIB驱动时遇到如下错误:
root@am335x:~# insmod /mnt/nfs/am335x/drive/nat9914_driver/nat9914_driver.ko
Disabling lock debugging due to kernel taint
nat9914_driver: no symbol version for gpmc_cs_write_reg
nat9914_driver: Unknown symbol gpmc_cs_write_reg (err -22)
Error: could not insert module /mnt/nfs/am335x/drive/nat9914_driver/nat9914_driver.ko: Invalid parameters
我在nat9914_driver模块中调用了gpmc模块的一些函数,内核提示说不能找到gpmc_cs_write_reg符号,
但在gpmc.c中我已经EXPORT_SYMBOL(gpmc_cs_write_reg),在gpmc.h中我也声明了
这是2.6.26之后内核的一个小bug
解决的方法是,需要在其他模式块中调用的函数用EXPORT_SYMBOL修饰,同时在gpmc.h中声明,
nat9914_driver模块要包含gpmc.h,在nat9914_driver模块的Makefile中要加上:
KBUILD_EXTRA_SYMBOLS += /opt/am335x/linux-3.2.0-psp04.06.00.11/Module.symvers
Module.symvers记录了模块的符号信息,因为gpmc模块是静太编译的,所以他的符号信息在内核根目录下的Module.symvers
重编内核,更新内核,重编nat9914_driver,再加载