当前位置: 技术问答>linux和unix
insmod 失败,问题很奇怪,方法用尽,求助
来源: 互联网 发布时间:2016-08-22
本文导语: 弄nand驱动,编进内核没有问题,但是不方便调试,编成模块后insmod失败,提示:Unknown symbol in module 问题是模块中调用了一个函数:AU1XXX_NAND_WRITE();这个函数是在另一个文件中编译进内核的,主要就是这个导致错误...
弄nand驱动,编进内核没有问题,但是不方便调试,编成模块后insmod失败,提示:Unknown symbol in module
问题是模块中调用了一个函数:AU1XXX_NAND_WRITE();这个函数是在另一个文件中编译进内核的,主要就是这个导致错误。
排除以下情况:
(1):MODULE_LICENSE("GPL"); 已加
(2):依赖模块已先行加载
(3):/proc/kallsyms里面有所需要的函数
(4):头文件,路径等都没问题
请问各位这个到底是哪里出问题了呢?谢谢解答!
问题是模块中调用了一个函数:AU1XXX_NAND_WRITE();这个函数是在另一个文件中编译进内核的,主要就是这个导致错误。
排除以下情况:
(1):MODULE_LICENSE("GPL"); 已加
(2):依赖模块已先行加载
(3):/proc/kallsyms里面有所需要的函数
(4):头文件,路径等都没问题
请问各位这个到底是哪里出问题了呢?谢谢解答!
|
2. EXPORT_SYMBOL(AU1XXX_NAND_WRITE); 记得导出此函数。
EXPORT_SYMBOL() include/linux/module.h
This is the classic method of exporting a symbol: dynamically loaded modules will be able to use the symbol as normal.
EXPORT_SYMBOL_GPL() include/linux/module.h
Similar to EXPORT_SYMBOL() except that the symbols exported by EXPORT_SYMBOL_GPL() can only be seen by modules with a MODULE_LICENSE() that specifies a GPL compatible license. It implies that the function is considered an internal implementation issue, and not really an interface.
参考:http://www.kernel.org/doc/htmldocs/kernel-hacking.html#sym-exportsymbols
|
AU1XXX_NAND_WRITE()所在的文件是不是未参加编译,再核准下?
|
dmesg 命令, 先看看到底是什么错误。 贴出来。
|
编译的时候不报错
=================
这个问题确实很 bt, 你随便调用一个错误的函数, 编译的时候也不会报错的。
=================
这个问题确实很 bt, 你随便调用一个错误的函数, 编译的时候也不会报错的。
|
编成模块后insmod失败,提示:Unknown symbol in module
出现 这种问题的一般原因是:
1、你这个函数是在其他模块定义的,但是没有用 EXPORT_SYMBOL()导出该函数
2、你这个函数就是在本模块定义的,但没实现该函数
一般 只要排查这两个原因基本就OK了!
出现 这种问题的一般原因是:
1、你这个函数是在其他模块定义的,但是没有用 EXPORT_SYMBOL()导出该函数
2、你这个函数就是在本模块定义的,但没实现该函数
一般 只要排查这两个原因基本就OK了!