【linux内核-源码编译之centos7】

本文详细记录了在CentOS7系统上编译Linux内核的完整过程,包括下载源码、配置、编译及安装,并解决了编译过程中可能出现的问题。主要目的是生成crash调试所需的vmliunx镜像,修改内核调试选项以及手动升级内核。在编译过程中,强调了选择稳定内核版本的重要性,以及如何处理编译失败的状况。最后,文章提供了验证新编译内核的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习linux内核的小伙伴,肯定会遇到内核编译的情况;这里记录下编译的过程供学习交流

一、 为什么要编译内核

基本上需要编译内核的伙伴,应该都是有明确目的的;这里简单说下我的需求:

1、可以生成crash调试所需要的vmliunx镜像文件,当然如果只是需要vmliunx镜像 使用这种方式显得有点麻烦了;但是如果是顺便生成的,也算是意外之喜。

单独安装需要的vmliunx镜像文件:
http://debuginfo.centos.org/7/x86_64/ 中下载
kernel-debuginfo-`uanme -r`.rpm
kernel-debuginfo-common-x86_64-`uanme -r`.rpm
使用rpm工具安装之后,会在 /lib/debug/lib/modules/$(uname -r)/ 下面

2、希望修改内核的调试选项,通过修改.config配置,再重新编译安装,运行新的内核;

3、手动升级其它版本的内核;

二、疑难杂症

在配置的过程中遇到一些奇怪的问题,之所以要先说是因为,如果真的遇到了 能先知道也可以避免浪费更多的时间如果你可以换一个更快的方式的话。

问题:
1、当我用centos7.9编译内核的时候,下载的是3.10.11 之类的,发现无法启动
比如:无法加载 /sysroot 或者 客户机已禁止CPU 之类的
尝试了很多的办法,修改配置总是无法解决,后来大部分说 可能是内核版本并非是稳定的版本导致的;
后来换了4.19.246等高版本的,结果就很顺利;

这里并没有解决问题,却说这么多,是为了如果是非必须要某个版本的就先绕过去吧;或者尽可能的去使用发行的文档版本去测试;毕竟我们这里只是介绍下通用的方法

三、演示环境

我使用的是centos7.9

[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)
[root@localhost ~]# uname -ra
Linux localhost.localdomain 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

四、下载源码

此处正式切入正题,下载源码
一般情况下下载源码的常见形式(不限于)有两种:

第一种:
https://www.kernel.org/
在这里插入图片描述
第二种:
下载src.rpm包的形式
比如:centos下载地址,这里使用7.8的源码包
https://vault.centos.org/7.8.2003/os/Source/SPackages/kernel-3.10.0-1127.el7.src.rpm

4.1、两者源码区别

①、通过第一种方式下载的 tarball包解压后就能直接拿到源码了;
②、通过第二种方式下载的包需要多操作几步才能拿到源码,下面就单独说下第二种方式获取源码的步骤

  • 1、通过下载获取到kernel-3.10.0-1127.el7.src.rpm 文件
  • 2、安装rpm包,可能说解压更恰当一点

在这里插入图片描述
提示需要制定的用户和组,如何语句创建

[root@localhost ~]# groupadd mockbuild
[root@localhost ~]# useradd mockbuild -g mockbuild

再执行:

[root@localhost ~]# rpm -i kernel-3.10.0-1127.el7.src.rpm
[root@localhost ~]# ls
kernel-3.10.0-1127.el7.src.rpm  rpmbuild

可以看到多出了一个 rpmbuild 文件夹

  • 3、安装源代码组件及工具:
yum install asciidoc audit-libs-devel bash bc binutils binutils-devel bison diffutils elfutils -y
yum install elfutils-devel elfutils-libelf-devel findutils flex gawk gcc gettext gzip hmaccalc hostname java-devel -y
yum install m4 make module-init-tools ncurses-devel net-tools newt-devel numactl-devel openssl -y
yum install patch pciutils-devel perl perl-ExtUtils-Embed pesign python-devel python-docutils redhat-rpm-config -y
yum install rpm-build sh-utils tar xmlto xz zlib-devel -y

yum groups install "Development and Creative Workstation" "Compatibility Libraries" -y
  • 4、现在源代码组件已经安装了,请解压及预备源代码文件
[root@localhost ~]# cd ~/rpmbuild/SPECS
[root@localhost SPECS]# rpmbuild -bp --target=$(uname -m) kernel.spec

现在内核的源代码目录树可以在 ~/rpmbuild/BUILD/kernel*/linux*/ 这个目录内找得到
在这里插入图片描述

4.2、将获取到的源码放在/usr/src/kernels/ 下

*无论通过那种方式获取的源码,后面的步骤 是没有区别的


五、编译内核

5.1、获取.config文件

 cp /boot/config-3.10.0-1160.el7.x86_64 .config

5.2、修改config配置

make menuconfig

如果没有特别要修改的,可以直接save退出

5.3、编译版本号显示配置

查看Makefile
在这里插入图片描述
如果这里不做配置编译的显示结果,uname -r 显示的是3.10.0 而不是我们想要的 3.10.0-1127
这里我们把 EXTRAVERSION = -1127.el7

通过.config配置, 也能修改显示的内容,但是格式是Makefile里面优化
General setup —>
() Local version - append to kernel release
在这里插入图片描述
这里随便填写个,可以不填,这里为了测试看看结果就填了个

结果格式:VERSION+.+PATCHLEVEL+.+SUBLEVEL+EXTRAVERSION+local version
VERSION=3
PATCHLEVEL=10
SUBLEVEL=0
EXTRAVERSION=-1127.el7
local version=-cdd

组合后显示:3.10.0-1127.el7-cdd

5.4、 编译make

make -4

此阶段需要花费较长的时间,大概几十分钟到1小时多点,具体看机器性能;可以去喝杯茶休息下;
在这里插入图片描述

waiting…

5.5、安装内核模块和镜像配置

make modules_install  && make install

此阶段耗时 几分钟到二十几分钟左右;

  INSTALL /lib/firmware/edgeport/boot.fw
  INSTALL /lib/firmware/edgeport/boot2.fw
  INSTALL /lib/firmware/edgeport/down.fw
  INSTALL /lib/firmware/edgeport/down2.fw
  INSTALL /lib/firmware/edgeport/down3.bin
  INSTALL /lib/firmware/whiteheat_loader.fw
  INSTALL /lib/firmware/whiteheat.fw
  INSTALL /lib/firmware/keyspan_pda/keyspan_pda.fw
  INSTALL /lib/firmware/keyspan_pda/xircom_pgs.fw
  DEPMOD  3.10.0-1127.el7-cdd
sh ./arch/x86/boot/install.sh 3.10.0-1127.el7-cdd arch/x86/boot/bzImage \
        System.map "/boot"

编译安装结束!

六、重启机器验证

重启机器,选择 新编译的内核
在这里插入图片描述
启动后,查看内核版本

[root@localhost ~]# uname -r
3.10.0-1127.el7-cdd

参考链接:
https://wiki.centos.org/zh/HowTos/I_need_the_Kernel_Source

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值