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 vmlinux
,make bzImage
和 make 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_install
和 make INSTALL_MOD_STRIP=1 install
来去掉debug信息,减少硬盘占用。
第五步
reboot
,在grub界面选择内核版本,要先选择 Advance... 那一项:
本文链接:https://cs.pynote.net/sf/linux/dd/202110256/
-- EOF --
-- MORE --