圆咕噜咕噜 发表于 前天 00:28

一文搞懂Linux kernel编译步骤

一、前言

什么是Linux的内核编译呢?简单来说,Linux内核编译是一个将内核源代码转换成可在特定的硬件架构上运行的二进制文件的过程。通过编译内核,我们可以根据自己的需求和爱好对内核进行定制和优化,以满足特定的应用场景。下文则是Linux内核编译的详细流程:
   注: 在ubuntu20.04.3 LTS中以kernel 6.11.6为编译版本
二、 内核编译流程

2.1 准备工作



[*]1.安装必要的编译工具
安装gcc编译器、make工具、ncurses库(用于make menuconfig)等编译工具
sudo apt install make gcc gitlibncurses5-dev
sudo apt installfakeroot build-essential xz-utils libssl-dev bc flex libelf-dev bisonccache zstd dwarves(解决btf生成问题)

[*]2.获取内核源代码
可以从官方网站或源代码堆栈中获取Linux内核的源代码,我们可以选择下载最新版本的源代码,或者根据我们的需求选择特定版本的源代码,可以通过git clone或者直接下载来获取内核源代码。
官网地点: https://kernel.org/
[*]3.解压内核源代码
如果下载的是压缩包,必要使用相应的命令将压缩包解压到你必要的目录。
2.2 设置内核



[*]4.复制默认设置
将默认的内核设置文件复制到我们下载好的内核源代码的目录中,并重命名为.config文件。
cp /boot/config-$(uname -r) .config
https://i-blog.csdnimg.cn/direct/7b87820f751b46d3a570fd03a267e964.png
[*]5.修改默认设置
打开config
修改 CONFIG_SYSTEM_TRUSTED_KEYS,将其赋空值。
vim .config   
CONFIG_SYSTEM_TRUSTED_KEYS=""

[*]6.打开内核设置界面
通过make menuconfig命令在终端中打开内核设置界面。在设置界面中,可以选择启用或禁用特定的功能、模块和设备驱动程序。还可以调整内核的参数和选项,以满足我们特定的需求。
make menuconfig

[*]7.保持设置
设置完成后,生存并退出菜单。这将天生一个包含所选设置信息的.config文件。
2.3 编译内核



[*]8.开始编译
在内核源码目录中运行make命令开始编译内核。这个过程必要一段时间,具体取决于体系设置和计算机性能。
make -j8//-j代表CPU的个数
//查看CPU的个数
screenfetch
https://i-blog.csdnimg.cn/direct/23a74a4d31674f459349b1e15d7ec8f5.png
[*]9.安装内核模块
编译完成后,将编译天生的内核模块安装到体系中。
sudo make modules_install //可能有问题,如果有问题,则执行下面的语句
sudo make INSTALL_MOD_STRIP=1 modules_install -j8(INSTALL_MOD_STRIP=1一定要加上,否则会有initrd.img-xxx文件太大的问题,导致开机一直卡在加载映像到磁盘,无法开机)
https://i-blog.csdnimg.cn/direct/73da57aec58c4e11934772332186c4b0.png
[*]10.安装内核镜像
运行make install命令将编译天生的内核镜像(如vmlinuz)和initramfs或initrd 镜像(如果必要的话)复制到/boot目录下。
sudo make install
https://i-blog.csdnimg.cn/direct/4f2207e652ca4cd988b16b98ced3b953.png
[可选] 检查一下/boot/initrd.img-xxx大小是否太大,正常一样寻常不超过100M,如果太大就执行(make INSTALL_MOD_STRIP=1 modules_install -j8)的命令,然后再执行:
        mkinitramfs /lib/modules/6.11.xxxx/ -o /boot/initrd.img-6.11xxx
> 注意: 当我们编译并安装了新的内核后,通常需要为新的内核创建一个匹配的initrd映像文件。这是因为新的内核可能需要不同的驱动程序和配置来访问存储介质和挂载根文件系统。在这种情况下,我们就可以使用mkinitramfs命令来创建新的initrd映像文件,并确保它与新的内核版本相匹配。
2.4 验证和测试



[*] 11.重新启动计算机
选择新编译的内核启动。
[*] 12.验证内核编译是否乐成
使用uname-a
命令查察当前体系的信息,确认内核名称、版本号和发布日期是否正确。uname-a
https://i-blog.csdnimg.cn/direct/8c1f11fd7c9e4cd4bd0fec42c467c85c.png
三、留意事项



[*] 备份
在进行内核编译之前,建议将备份当前的体系和内核设置,以防万一编译失败或出现其他问题的时候我们可以及时回退。
[*] 依赖关系
确保体系设置和硬件支持所选择的内核选项,在编译过程中,如果碰到依赖关系错误,可以检查并安装缺失的依赖包。这个一样寻常我们将编译错误复制在欣赏器中查询一样寻常就可以找到缺失的依赖包了。
四、具体内核编译问题

4.1 编译内核报错:No rule to make target ‘debian/canonical-certs.pem‘



[*]报错描述
make: *** No rule to make target 'debian/canonical-certs.pem', needed by                                 'certs/x509_certificate_list'.Stop.
make: *** Error 2

[*]问题原因
缺少证书
[*]问题解决
方法一: 打开.config文件注释掉这一行或将其赋空值
CONFIG_SYSTEM_TRUSTED_KEYS="debian/certs/benh@debian.org.cert.pem"
方法二: 执行完下面的语句后make clean,然后重新编译
scripts/config --disable SYSTEM_TRUSTED_KEYS
后续碰到的一些实际错误也会在下面接着进行增补,大家感爱好和以关注加收藏。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 一文搞懂Linux kernel编译步骤