2021SC@SUDSC
Linux内核编译
1.下载源码
在官网https://www.kernel.org/下载需要的内核版本源代码,我下载的是linux-5.14.11。
2.解压
sudo tar -xavf linux-5.14.11.tar.xz -C /usr/src
因为要对 / 目录进行修改,所以必须使用特权指令,下面就不再赘述。
3.保持源代码干净
如果是第一次编译,我们并不知道下载的源代码中受否保留目标文件*.o或者其他的相关配置文件,因此,在正式编译前,我们可以通过make mrproper命令来删除掉“编译过程的目标文件以及配置文件”
make mrproper
这个命令也会将你以前选择过的没和功能文件删除,因此只用在第一次编译的时候才使用这个命令。另外,还有一个与这个类似的命令make clean ,我们大多数时候使用这个命令来删除前一次编译过程的残留数据,因为make clean 只会删除像目标文件之类的编译过程中产生的中间文件,并不会删除配置文件。
make clean
4.选择内核功能
Linux2.6以后,内核引入了kbuild机制,可以通过make menuconfig 配置把配置信息保存在.config文件中,当.config文件改变以后,再重新编译内核,Kbuild能够保证只进行最小化的编译。Linux内核的编译系统主要包含两种文件:
- 交互式配置工具,这些文件是编译生成的可执行文件,用来提供内核编译过程中的交互,并把用户配置交互的结果存到.config文件中。比如当用户输入make menuconfig命令时,Makefile会编译出mconf文件,mconf会根据内核根目录下的.config初始化配置界面,在配置结束的时候,把配置结果保存到.config文件中。
- Kconfig文件,其在各个子目录下都存在,它定义了交互式配置信息的菜单。比如当用户输入make menuconfig命令时,会运行mconf arch/x86/Kconfig,这个就定义了出现在menuconfig中的所有菜单项。
make menuconfig
会出现下面这样一个交互式配置界面,其是由scripts目录下的脚本生成的。
根据自己的需求,可以选择是否把相应的模块编译进内核。其中
- [*]表示把对应模块编译进内核。
- [M]表示把对应模块编译成客家在模块。
- [ ]表示不把对应模块编译进内核。
在执行make menuconfig命令时,可能会出现下面错误