no symbol version for 的解决方法

在写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,再加载

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
“No browse info for symbol in”这个错误通常出现在程序编译或者代码调试阶段。它指的是系统找不到某个特定的符号的浏览信息。符号(symbol)可以是变量、函数、类等在代码中定义的实体。浏览信息(browse info)则会在编译过程中生成,用于提供代码的结构以便于调试。 出现这个错误可能是因为编译器或调试器在查找浏览信息时遇到了问题。可能原因包括: 1. 编译器或调试器配置不正确。需要检查编译器和调试器的设置,确保它们能够正确地生成和查找浏览信息。 2. 缺少源代码或头文件。浏览信息需要根据源代码或头文件生成,如果缺少这些文件或者文件路径不正确,编译器就无法找到对应的符号的浏览信息。 3. 编译器或调试器版本问题。有些旧版本的编译器或调试器可能存在Bug,导致无法正确生成或读取浏览信息。 解决这个问题的方法包括: 1. 检查编译器和调试器的配置,确保其设置正确。 2. 检查源代码和头文件的路径和文件完整性,确保它们的位置正确。 3. 更新编译器和调试器版本,尽量使用最新的版本,因为新版本通常会修复一些已知的问题。 4. 查找与该错误相关的编译或调试日志,以便更好地理解错误的具体原因,这样就可以更有针对性地解决。 总之,“No browse info for symbol in”错误一般是编译或调试环境配置或源代码缺失导致的问题,通过检查配置和文件路径,更新版本,查找相关日志等方式可以解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值