Linux 内核版本管理
Linux kernel官网:https://kernel.org/
Active kernel releases(查看EOL信息):https://kernel.org/category/releases.html
Linux kernel版本状态说明
mainline
mainline指由Linus Torvalds亲自制作的内核发布版,是官方当前最新版本的kernel source。在Torvalds对所有其他程序员所做出的重大变化进行整合,并且对先前版本的bug进行几轮修复之后,大约每十周正式发布一个新版本。mainline事实上代表着一个linux kernel分支,这个分支有另一个名称,叫做vanilla。
longterm
longterm,是Long Term Support的缩写,长期维护的意思。
stable
stable顾名思义,稳定版。
说明:稳定版本不一定都提供长期支持,而提供长期支持的一定是稳定版本。
linux-next
linux-next,是代码提交周期结束之前生成的快照,用于给Linux代码贡献者们做测试。
Prepatch
Prepatch 或 “RC” 内核是主要的内核预发行版本,主要针对内核开发人员和 Linux 爱好者。必须从源代码进行编译,并且通常包含必须在可以放入稳定版本之前进行测试的新功能。Prepatch 内核由 Linus Torvalds 维护和发布。
升级前准备
1 2
| # 依赖环境安装 [root@boy ~]# yum -y install gcc gcc-c++ kernel-devel kernel-headers bison flex ncurses-devel qt-devel hmaccalc zlib-devel binutils-devel elfutils-libelf-devel ncurses ncurses-devel openssl-devel
|
升级GCC版本,由于5.15.26源码对gcc版本有要求了,自动的gcc无法满足编译。安装升级gcc 8
1 2 3
| # [root@boy ~] # [root@boy ~] # [root@boy ~]
|
GCC源码升级(时间长)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| cd /server/tools tar xf gcc-5.5.0.tar.xz cd gcc-5.5.0/ ./contrib/download_prerequisites cd ../ mkdir gcc-build-5.5.0 cd gcc-build-5.5.0/ ../gcc-5.5.0/configure --prefix=/usr/local/gcc --enable-checking=release --enable-languages=c,c++ --disable-multilib make -j32 #-j后边的数字表示并发编译,一般等于CPU core 数量 make install mv /usr/bin/gcc{,.bak} mv /usr/bin/g++{,.bak} ln -s /usr/local/gcc/bin/gcc /usr/bin/gcc ln -s /usr/local/gcc/bin/g++ /usr/bin/g++
|
升级内核
下载并解压
1 2 3 4 5 6 7 8
| # 下载5.15.26 源码包 [root@boy ~]# wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.26.tar.xz -O /root/linux-5.15.26.tar.xz
# 解压源码包 [root@boy ~]# unxz -v linux-5.15.26.tar.xz linux-5.15.26.tar.xz (1/1) 100 % 121.7 MiB / 1,098.9 MiB = 0.111 46 MiB/s 0:23 [root@boy ~]# tar -xf linux-5.15.26.tar
|
配置内核功能
1 2 3 4
| # 拷贝原有的内核配置文件,后续可在原有基础之上进行内核功能删减 [root@boy ~]# cd linux-5.15.26/ [root@boy linux-5.15.26]# cp /boot/config-$(uname -r) .config [root@boy linux-5.15.26]# make menuconfig
|
运行 make menuconfig,开启文本界面的编译选项菜单窗口,可以对内核加载的模块编译选项进行调整,如修改编译后的内核名称、新添加之前系统缺少的模块等。
修改内核名称:
General setup —>local version -append to kernel release
此处修改内核名称为-vuln-docker.x86_64
,编译完成后内核名称为5.15.26-vuln-docker.x86_64
新添加NTFS文件系统支持模块:
File systems —>DOS/FAT/NT Filesystems —>NTFS file system support
建议选择以模块方式(M选项)编译。(*号则是以静态方式编译打包进内核文件中,如果新添加的模块较多,会导致内核文件体积增大)
新添加cgroup
模块中RDMA
General setup —-> Control Group support
去掉Kernel debbugging选项,这样可以减少编译完成后内核存储大小
Kernel Hacking —> Kernel debbugging
编译内核
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| # 开始编译并创建一个压缩的内核镜像,-j后边的数字表示并发编译,一般等于CPU core 数量 [root@boy linux-5.15.26]# make -j$(nproc)
# 安装内核modules,实际上就是把编译好的module拷贝到/lib/modules/5.15.26 [root@boy linux-5.15.26]# make modules_install
# 安装内核,安装完成后会在/boot目录生成三个文件,initramfs-5.15.26.img、System.map-5.15.26、vmlinuz-5.15.26 [root@boy linux-5.15.26]# make install
# 更新grub配置 [root@boy linux-5.15.26]# grub2-mkconfig -o /boot/grub2/grub.cfg [root@boy linux-5.15.26]# grub2-set-default 0 #0表示 /boot/grub2/grub.cfg 文件中排在第一位的 menuentry 段
# 重启系统 [root@boy ~]# reboot
# 查看重启后的内核版本 [root@boy ~]# uname -mrs Linux 5.15.26-vuln-docker.x86_64 x86_64
|
报错
1 2 3 4
| You are building kernel with non-retpoline compiler. Please update your compiler. make[1]: *** [checkbin] Error 1 make: *** [__sub-make] Error 2
|
vim .config
CONFIG_RETPOLINE=n
内存不足
1 2 3 4 5 6
| objcopy:arch/x86/boot/compressed/vmlinux.bin[.text]: No space left on device make[3]: *** [arch/x86/boot/compressed/vmlinux.bin] Error 1 make[3]: *** Waiting for unfinished jobs.... make[2]: *** [arch/x86/boot/compressed/vmlinux] Error 2 make[1]: *** [bzImage] Error 2 make: *** [__sub-make] Error 2
|