您的位置:首页 > 运维架构 > Linux

linux内核编译 出错总结

2013-10-12 17:23 204 查看
此次在ubuntu11.10上编译kernel3.4.2,原本在11.04上编译是没有问题的。错误如下:

ERROR: "__modver_version_show" [drivers/staging/rts5139/rts5139.ko]
undefined!

WARNING: modpost: Found 5 section mismatch(es).

To see full details build your kernel with:

'make CONFIG_DEBUG_SECTION_MISMATCH=y‘

make[1]: *** [__modpost] Error 1

make: *** [modules] Error 2

解决1 http://forum.ubuntu.org.cn/viewtopic.php?f=97&t=361214
原来对linux一无所知开始,由于准备搞RT Linux,被迫投入linux阵营


安装的是ubuntu 11.10,下载3.2.0的kernel,先编译kernel,结果碰到如下出错信息:

ERROR: "__modver_version_show" [drivers/staging/rts5139/rts5139.ko] undefined!

安
装原来的编译经验,应该是__modver_version_show未实现,或者实现体未编译进来,但是发现params.c中已经实
现,params.o已生成并有链接,module.h中也有声明,但是有宏分割。怀疑是宏达问题,研究了半天makefile和头文件包含,未果。放狗
上网一搜,发现在3.0.0开始,国外的国内的网站、论坛上就已经有人陆陆续续反映这个问题。有一些解决方法,但是发现在3.2.0中已经引入了,而问题
依旧。没办法,只能自力更生了。

常规思路,既然解决不了,就研究研究有没有办法规避。前面编译过2.6.25.11的kernel没有发现过此问
题,对比代码发现__modver_version_show函数定义实现是新引入的(个人猜测是3.0.0开始引入的)。然后再看了下staging这
个目录的用途,说是一些不成熟驱动代码的专用目录,主要是希望放到社区上让大家测试的,成熟以后再并入主干。哈哈,眼睛一亮,好,既然是不成熟,哥就把它
阉割掉,应该对系统没啥影响。想到就做,在make
menuconfig配置选项中找到了staging这个配置项,直接选择为N([]中为空),重新编译,问题解决。

3.2.0 kernel能正常启动,打RT补丁正常,RT Linux启动正常。

这个问题对开发人员来说应该只是个小问题,但苦于对linux不熟,让哥这个老程序员急切间还真是无从下手,放狗网上也没搜到啥有用的解决方法。估计还有很多像哥一样的入门人浪费时间在这个问题上,所以特把解决方法说出来,共享之!

这种方法因为去除的driver太多,怕影响功能。所以没有尝试。

解决2 http://ubuntuforums.org/showthread.php?t=1931029
changing CONFIG_RTS5139=n in .config file in the source code directory.

第二种方法成功解决问题,编译成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: