Ubuntu编译Preempt_rt内核

拉取内核文件

内核:https://www.kernel.org/pub/linux/kernel/

rt补丁:https://www.kernel.org/pub/linux/kernel/projects/rt/

阿里镜像-内核:https://mirrors.aliyun.com/linux-kernel/

阿里镜像-rt补丁:https://mirrors.aliyun.com/linux-kernel/projects/rt/

内核版本需与rt补丁版本对应,本文以linux-5.15.14.tar.gz与patch-5.15.14-rt27.patch.gz为例。

合并内核补丁

创建工作目录

1
mkdir kernel && cd kernel

将内核与补丁文件放在kernel目录下,合并

1
2
3
tar -xzvf linux-5.15.14.tar.gz
cd linux-5.15.14
gzip -cd ../patch-5.15.14-rt27.patch.gz | patch -p1 --verbose

编译

  1. 安装依赖
1
sudo apt-get install libncurses-dev libssl-dev libelf-dev flex bison zstd
  1. 导入当前内核的配置文件
1
cp /boot/config-5.13.0-27-generic .config
  1. 配置内核
1
make menuconfig

General setup -> Preemprion Model(Desktop) 更换为 Fully Preemptible Kernel(Real-Time)

Kernel hacking -> Compile-time checks and compiler options -> Genereate BTF typeinfo 取消

保存并退出,手动修改.config文件

1
gedit .config

修改以下两项为空或将其注释(make指令执行后会提示自动生成)

CONFIG_SYSTEM_TRUSTED_KEYS=""

CONFIG_SYSTEM_REVOCATION_KEYS=""

  1. 编译并安装
1
2
3
make -j8
sudo make INSTALL_MOD_STRIP=1 modules_install -j8
sudo make install

更新启动项

1
sudo update-grub

重启验证

1
sudo reboot

重启后使用uname -a查看当前内核版本

为当前用户增加权限

修改/etc/security/limits.conf文件,添加以下内容,其中USER为用户名

1
2
3
USER              -       memlock         unlimited
USER              -       priority        99
USER              -       rtprio          99

测试

使用cyclictest测试实时性

1
2
sudo apt install rt-tests
cyclictest -p 90 -m -t 5