编译Linux内核并安装使用

Last Updated: 2023-03-13 00:57:04 Monday

-- TOC --

本文总结的经验,来自在Ubuntu/Fedora桌面系统下的玩耍...

第一步

下载kernel,并解压,准备编译kernel的环境:

$ sudo apt install bison flex libssl-dev libncurses-dev libelf-dev build-essential
$ sudo dnf install bison flex ncurses-devel openssl-devel openssl elfutils-devel

Kernel版本命名:

在 2.6.x 版本以前,kernel的版本有奇数和偶数之分,次版本为奇数表示发展中版本(development) 如2.5.xx,这种版本主要用在测试与测试新功能,次版本为偶数表示稳定版本 (stable) 如 2.6.xx,等到核心功能发展成熟后会加到这类版本中,提供使用者一个相对稳定的 Linux 作业环境平台。自 2.6.0(2003年12月)发布后,人们认识到,更短的发布周期将是有益的。自那时起,版本的格式为A.B.C.D,其中A,B,C,D代表:A和B是无关紧要的,C是内核的版本,D是安全补丁。自 3.0(2011年7月)发布后,版本的格式为3.A.B,其中A,B代表:A是内核的版本,B是安全补丁。而4.0(2015年4月)发布后,则延续3.A.B的命名格式,只是将主版号变更为4。现在主版本号是5!2022年9月,版本开始使用6。

第二步

这一步配置内核。

$ make menuconfig

/boot目录下,能找到当前running kernel的config配置。

第三步

$ make -j8

一个单独的make,就包含了 make vmlinuxmake bzImagemake moduels 。make 和 make all 等价。

-j8表示开8个线程加速编译(视CPU核心core数量而定),但也有个坑:如果编译有错误,整体不会立刻停下来,等停下来了,错误的打印也查不到了。此时可以直接make,不要带-j8,可以看到编译错误,并进行修正。我最后一次使用 -j16 。

编译内核大约需要超过10G的硬盘空间!编译完成后,可以使用 make distclean 清理。用相同的代码树编译多次,需要确保每次编译 make menuconfig 之前,使用 make mrproper 清理 config文件,使用 make clean 清理上次编译的object files, make distclean 是前面两个命令的综合。

没事可以看看 make help

第四步

$ sudo make modules_install
$ sudo make install

在最后的 make install 之前,更新 /etc/default/grub,使得在开机的时候,能够看到grub选择目录。

默认编译出来的内核和模块,都带有debug信息,如果硬盘空间受限,可以使用 make INSTALL_MOD_STRIP=1 modules_installmake INSTALL_MOD_STRIP=1 install 来去掉debug信息,减少硬盘占用。

第五步

reboot,在grub界面选择内核版本,要先选择 Advance... 那一项:

grub_menu

本文链接:https://cs.pynote.net/sf/linux/dd/202110256/

-- EOF --

-- MORE --