硬件环境:树莓派4B
操作系统:树莓派版Ubuntu server 20.04 LTS(64bit)
1 依赖环境的安装
运行如下命令:
sudo apt update
sudo apt install build-essential libncurses* libssl-dev bison flex
2 下载内核和对应版本的补丁
下载地址如下:
内核下载网址: https://www.kernel.org/pub/linux/kernel
RT补丁下载网址: https://www.kernel.org/pub/linux/kernel/projects/rt/
注意:内核版本和补丁版本要一致
我这里选择的是5.13版的内核和补丁。
3 将下载的内核和补丁解压
tar -xzvf linux-5.13.tar.gz
gunzip patch-5.13-rt1.patch.gz
4 给内核打补丁
将解压得到的patch-5.13-rt1.patch文件复制到内核解压文件夹linux-5.13中,然后打补丁:
cp patch-5.13-rt1.patch linux-5.13/
patch -p1 < patch-5.13-rt1.patch
5 内核配置
执行make menuconfig
general setup–>Preemption Model(Preemptible kernel)–>
除此以外,我们还需要执行
vim .config
修改CONFIG_SYSTEM_TRUSTED_KEYS项,将其内容置空。否则内核编译会报错。
6 编译内核
make -j4
7 安装内核
sudo make modules_install -j4
sudo make install -j4
提示错误
执行如下命令
cd /boot/firmware
sudo cp bcm2711-rpi-4-b.dtb /etc/flash-kernel/dtbs
然后重新回到linux-5.13
目录下,重新执行
sudo make install -j4
8 切换内核启动
以上步骤执行完,应该可以在/boot
目录下看到vmlinuz-5.13.0-rt1
,并且通过ls -al
可以看到vmlinuz
是指向vmlinuz-5.13.0-rt1
的软链接。
因为在树莓派上是靠U-Boot启动引导的内核。U-Boot默认启动的内核是在/boot/firmware
目录下的vmlinuz
所指向的内核。所以我们先将/boot/firmware
目录下的vmlinuz
重命名为vmlinuz.old
,并删掉原有vmlinuz
。
sudo cp vmlinuz vmlinuz.old
sudo rm vmlinuz
然后把上面/boot
目录下的vmlinuz
拷贝到/boot/firmware
目录下
sudo cp vmlinuz firmware/
最后,执行reboot
重启即可。
在重启后的系统执行uname -a
查看内核版本,结果如下。可以看到当前系统内核已经切换为新安装的打了实时补丁的内核。