摘要:在进行linux内核开发中,编译内核是一项基本技能。在这项技能中,可以说,无法启动内核的时候,也是我们能够学习最多的时候。本文主要总结linux内核编译过程中出现的各种错误和解决方法。既有针对原生态的内核,也有针对发行版的内核。
本文来源:linux 内核编译实战——内核编译错误汇总
1)由于在本机上,已经存在一个内核。当我们再次编译内核的时候,由于内核版本相同,导致新内核覆盖原来的内核。
解决方法:修改.config中的版本号码LOCALVERSION
1)centos 6.4 make阶段,出现提示信息:crypto/signature/ksign-publickey.c: key.h: No such file or directory
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来编译模块。
更新中...