【Linux】编译Linux内核

之所以编译内核,是因为gem5全系统仿真需要vmlinux文件,在此记录一下以备后面需要。

此过程编译之后会获得vmlinux和bzImage两个文件;

主要参考知行大佬的编译内核gem5官方教程

文章目录

一、Linux源码下载

注意:内核编译一般需要20GB 左右的空间,可以预留相应的空间,之后的源码和编译过程都在那里进行。
Linux Kernel包含了所有Linux内核的版本,可以挑选自己需要的内核版本下载即可,本文以5.4.49为例,可以使用wget下载:

bash 复制代码
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.4.49.tar.gz
tar xf linux-5.4.49.tar.gz
cd linux-5.4.49

wget有可能比较慢,此时也可以直接点进上面的Linux Kernel页面手动下载并解压到指定位置。

二、安装编译依赖

一般来说,需要下面的依赖库,直接安装就可以:

bash 复制代码
sudo apt update
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison vim

三、编译

1. 内核编译前配置

编译内核前需要进行编译配置,选择哪些组件要编译进去,添加调试信息等。内核中包含了大量的驱动代码,很多驱动其实用不到,一般是通过一个图形化界面选择配置。

在linux-5.4.49文件夹下面打开终端输入:

bash 复制代码
make menuconfig

在这个界面通过方向键和上边提示的字母选项进行配置,*代表已选择。具体配置可以参考编译内核或者按需选择其他教程。

配置完毕选择Save然后Exit退出,会生成一个.config文件,这个文件里面就包含了编译配置信息,所以,需要再修改配置信息,可以用vscode打开.config文件直接进行修改。

作为普通人的我们,不大清楚哪些需要哪些不需要,我选择使用gem5官方提供的.config文件,将这个文件下载下来替换原本.config内容即可。

注意,.config文件是隐藏文件,需要选择文件夹的显示隐藏文件才能看到。

2. 进行编译:

bash 复制代码
sudo make -j 24
# 后面的数字是同时进行编译的线程数,可以灵活根据电脑配置选择

编译时间长短不定,取决于配置信息和线程数。使用gem5官方的配置文件我大概编译了几分钟就结束,得到的vmlinux文件只有26MB,但是自己通过图形化界面配置,编译则需要半个小时左右,得到的vmlinux文件有500MB。看来还是包含了很多不必要的东西。

编译得到的文件有:./vmlinux./arch/x86/boot/bzImage,参考知行大佬的解释:

vmlinux和bzImage都是Linux内核编译生成的可执行文件,它们的主要区别在于它们的文件格式和用途。

  • vmlinux是Linux内核编译生成的未压缩的内核镜像文件,它包含了整个内核的代码和数据,可以用来调试内核.它通常比较大,因为它没有被压缩.
  • bzImage是Linux内核编译生成的压缩内核镜像文件,它是用来引导启动Linux操作系统的.它是通过将vmlinux压缩成一个单独的文件,并添加一些引导代码和头部信息来生成的.

当系统引导时,bzImage首先会被加载到内存中,然后被解压缩成vmlinux形式的内核映像.因为vmlinux文件比较大,而且内核启动过程中需要加载和解压缩文件,所以bzImage文件通常比vmlinux文件小很多.

3. 编译失败进行清除重试

如果编译失败,使用下面命令清除重试:

bash 复制代码
sudo make mrproper
sudo make clean

四、可能遇到的问题

正常流程下来,极有可能遇到下面的问题:

错误1

bash 复制代码
make[1]: *** No rule to make target 'debian/canonical-certs.pem', needed by 'certs/x509_certificate_list'.  Stop.
make: *** [Makefile:1868: certs] Error 2

在终端中执行:

bash 复制代码
scripts/config --disable SYSTEM_TRUSTED_KEYS

错误2

bash 复制代码
make[1]: *** No rule to make target 'debian/canonical-revoked-certs.pem', needed by 'certs/x509_revocation_list'.  Stop.
make: *** [Makefile:1868: certs] Error 2

在终端中执行:

bash 复制代码
scripts/config --disable SYSTEM_REVOCATION_KEYS

错误3

bash 复制代码
BTF: .tmp_vmlinux.btf: pahole version v1.15 is too old, need at least v1.16
Failed to generate BTF for vmlinux
Try to disable CONFIG_DEBUG_INFO_BTF
make: *** [Makefile:1199: vmlinux] Error 1

打开.config文件注释CONFIG_DEBUG_INFO_BTF

**注意:**建议遇到之后直接使用上面的清除命令,重新生成.config文件,提前将需要注释和取消的选项进行处理 。随后进行编译,会询问你是否需要开启上面注释的选项,全部按Enter默认就可以,不要选择Y或N。

报错参考1
报错参考2

相关推荐
linkingvision37 分钟前
H5S 视频监控AWS S3 对象存储
linux·运维·aws·视频监控s3对象存储
BillKu1 小时前
服务器多JAR程序运行与管理指南
运维·服务器·jar
QQ2740287561 小时前
BlockMesh Ai项目 监控节点部署教程
运维·服务器·web3
belldeep1 小时前
WSL 安装 Debian 12 后,Linux 如何安装 vim ?
linux·debian·vim
wqqqianqian2 小时前
国产linux系统(银河麒麟,统信uos)使用 PageOffice自定义Word模版中的数据区域
linux·word·自定义·pageoffice·数据区域
小疆智控2 小时前
数字化工厂升级引擎:Modbus TCP转Profinet网关助力打造柔性生产系统
服务器·网络·tcp/ip
南棱笑笑生2 小时前
20250512给NanoPi NEO core开发板在Ubuntu core20.04系统更新boot.img
linux·运维·ubuntu
XMYX-02 小时前
Linux du 命令终极指南:从基础到精通
linux·服务器
DourPanda2 小时前
polarctf-web-[rce1]
linux·网络协议·网络安全
purrrew3 小时前
【Java ee初阶】IP协议
服务器·网络协议·tcp/ip