关闭

linux 内核编译实战——内核编译错误汇总

标签: 内核编译常见错误
2458人阅读 评论(0) 收藏 举报
分类:

摘要:在进行linux内核开发中,编译内核是一项基本技能。在这项技能中,可以说,无法启动内核的时候,也是我们能够学习最多的时候。本文主要总结linux内核编译过程中出现的各种错误和解决方法。既有针对原生态的内核,也有针对发行版的内核。


本文来源:linux 内核编译实战——内核编译错误汇总


1.config阶段


1)由于在本机上,已经存在一个内核。当我们再次编译内核的时候,由于内核版本相同,导致新内核覆盖原来的内核。

解决方法:修改.config中的版本号码LOCALVERSION


2.make阶段


1)centos 6.4 make阶段,出现提示信息:crypto/signature/ksign-publickey.c: key.h: No such file or directory

解决方法:

1) Select "Enable loadable module support", then "Module signature verification (EXPERIMENTAL)". Disable it.
2) Then go back to the main menu, select "Cryptographic API" then "In-kernel signature checker (EXPERIMENTAL)" and disable that one too.
Then go back again, save your config and make your kernel. At least, it will pass this phase successfully.


3.make install阶段


1)centOS 6.4 make install阶段,出现错误信息:ERROR: modinfo: could not find module vmhgfs


原因分析:在make install时,为了让新内核中不缺少所需module,会先检查当前系统已经加载了的module(lsmod命令可查看),然后对比新安装的内核模块,如果新的内核模块中缺少一些module(和当前lsmod命令的输出做对比),就会报“ERROR: modinfo: could not find module power_meter”这样的错误信息。

具体来说,缺少相应module而报错,大致可分为3种情况:
1. 确实是缺少了某个module,其解决方法是:如果报的module对于你来说是有用,检查编译kernel时的.config文件,加上对应的配置(配为=m),重新编译和安装modules即可;如果你觉得这个module没啥用,大可不必管它了。

2. 新编译的kernel已经将该选项编译进kernel了(.config中选择为=Y),从而不需要生成这个module的.ko文件,系统找不到对应的.ko文件,但是已经在新内核中了,不必理会这个报错。例如,上面的“ERROR: modinfo: could not find module ext4”是因为我将EXT4文件系统模块编译为built-in了,如下:

3. 模块的名称变了,用当前系统lsmod命令查找的模块名称,在新编译的内核中找不到module了。只需要检查确认即可,如这里的“ERROR: modinfo: could not find module power_meter”就是这种类型,检查方式如下:

4.在centos 6.4中,还有可能存在另外一种情况:用于没有运行make modules

在原生态的内核中,运行make all就包含make modules,但是centOS却不是这样,需要运行make modules来编译模块。


更新中...

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:840503次
    • 积分:10463
    • 等级:
    • 排名:第1575名
    • 原创:245篇
    • 转载:92篇
    • 译文:4篇
    • 评论:91条
    博客专栏
    最新评论