2013年(6)
分类: LINUX
2013-11-21 23:41:21
本帖最后由 lofeng410 于 2010-12-09 23:02 编辑 可能很多高手早就知道这样处理,但是俺是最近才琢磨明白,呵呵 (1)对编译所得的.ko进行strip -S,处理掉调试信息,这样可以大大缩小ko文件的大小 (2)使用KBUILD_EXTRA_SYMBOLS 在一个驱动程序模块中引用另一个模块导出的符号时,遇到了上述问题,几经周折,才发现了正确答案。
这是linux kernel 2.6.26 之后版本的bug (详细描述, 请看) 主要使用于下面这样的场合: 有两个我们自己的模块,其中Module B使用了Module A中export的函数,因此在Module B的Makefile中必须加上这样的选项 KBUILD_EXTRA_SYMBOLS += /path/to/Module A/Module.symvers export KBUILD_EXTRA_SYMBOLS 这样在编译Module B时,才不会出现Warning,提示说func1这个符号找不到,而编译得到的ko加载时也会出错。 需要注意的是: (1)KBUILD_EXTRA_SYMBOLS 赋值时必须使用+=,而不能使用=及:=,这个是实验出来的,至于为什么必须这样,还不明白。如果哪位高手知道,还请指教~~ (2)KBUILD_EXTRA_SYMBOLS 必须使用export处理一下 |