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

摘要:在进行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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值