项目里需要对麒麟v10打实时补丁(PREEMPT_RT),但安装elrepo源时提示nothing provides system-release < 8 needed by elrepo-release-7.0-6...
的问题,试了几个elrepo版本都没有解决。后改用源码打补丁的方式编译安装通过,这里记录安装过程。此方法也适用升级内核或打其他内核补丁的场景。
首先查看当前内核版本号,例如下面的4.19.90
。我们这次并不想升级内核版本因此后面将使用相同版本号:
> uname -a
Linux bogon 4.19.90-24.4.v2101.ky10.x86_64 #1 SMP Thu Dec 19 15:21:06
CST 2024 x86_64 x86_64 x86_64 GNU/Linux
下载Linux内核源码和实时补丁并解压缩,它们的版本号要完全相同,否则patch时会失败:
wget https://mirrors.aliyun.com/linux-kernel/v4.x/linux-4.19.90.tar.gz
wget https://cdn.kernel.org/pub/linux/kernel/projects/rt/4.19/older/patch-4.19.90-rt35.patch.gz
tar zxvf linux-4.19.90.tar.gz
gunzip patch-4.19.325-rt140.patch.gz
对源码打实时补丁:
cd linux-4.19.90
patch -p1 < patch-4.19.325-rt140.patch
安装必要的依赖:
yum install ncurses-devel bison flex elfutils-devel openssl-devel
配置内核参数:
make menuconfig
- 在
General setup
->Preemption Model
里修改选项为Fully Preemptible Kernel
- 在
Timer subsystem
里确认启用了High Resolution Timer Support
项 - 保存为默认的
.config
文件退出
编译和安装内核:
# 4为线程数,根据cpu线程数配置
make -j4
make modules_install -j4
make install -j4
更新grub2:
grub2-mkconfig -o /boot/grub2/grub.cfg
重启服务器并在开机画面选择新内核验证效果;如果是远程操作可以先grub2-reboot 0
实现一次性修改默认启动项,然后reboot
重启系统进入新内核。
验证内核是否已打好PREEMPT_RT实时补丁:
> uname -a
Linux bogon 4.19.90-rt35 #1 SMP PREEMPT RT Thu Dec 19 16:57:18
CST 2024 x86_64 x86_64 x86_64 GNU/Linux