1.查看当前内核版本
uname -r
2.下载内核文件以及RT补丁(内核文件下载与Linux版本相近的最好一致,RT补丁要对应下载的内核文件版本)
RT补丁:https://www.kernel.org/pub/linux/kernel/projects/rt/
内核源码:Index of /pub/linux/kernel/
3.安装依赖
sudo apt-get update
sudo apt-get install patch
sudo apt install zstd
20. 04
sudo apt-get install libncurses5-dev libssl-dev build-essential openssl zlibc libelf-dev minizip libidn11-dev libidn11 bison flex
22.04
sudo apt install gcc make libncurses5-dev openssl libssl-dev build-essential pkg-config libc6-dev bison flex libelf-dev dwarves -y
4.解压两个压缩包,然后进入解压出来的内核文件执行patch。
patch -p1 <../patch-5.14.2-rt21.patch
用5.14.2举例。
5.make menuconfig,改相关配置
Processor type and features --->Preemption Model (Voluntary Kernel Preemption (Desktop)) --->改成Fully Preemptible Kernel (RT);
Kernel hacking下的Memory Debugging中的[ ] Check for stack overflows选项确认其处于未选中状态。
关掉General Setup -> Timers subsystem中的old idle dynticks config,保持第二项high resolution timer support开启
Kernel hacking,在Compile-time checks and compiler options中取消勾选第一项Compile the kernel with debug info,可以缩小内核尺寸,删除调试信息
Processor type and features -> Timer frequency设为1000 HZ。
6.通过gedit .config更改相关内容
修改.config文件,搜索关键词,将
CONFIG_MODULE_SIG_ALL
CONFIG_MODULE_SIG_KEY
CONFIG_SYSTEM_TRUSTED_KEYS
CONFIG_SYSTEM_REVOCATION_LIST
CONFIG_SYSTEM_REVOCATION_KEYS
五项注释掉,把CONFIG_DEBUG_INFO=y去掉,不然新内核带debug信息超大。
7.开始编译
sudo make -j16
Sudo make modules_install -j16
Sudo make install
Sudo update-grub
8.重启,选择ubuntu高级选择rt
sudo reboot
9.查看内核是否切换成功
如果切换成功,可以将rt内核改为系统默认启动。
sudo nano /etc/default/grub
修改 GRUB_DEFAULT
行,例如:GRUB_DEFAULT="1>2"
这里的 1>2
表示从第一个菜单项中的第三个子项(具体的内核选项)中选择。你可以调整这些值以匹配你记录的内核标题的位置。
更新 grub
配置
sudo update-grub