树莓派打preempt RT补丁(树莓派内编译)

本文最后更新于 2024年12月7日 晚上

查看当前内核

1
uname -a

下面是已经换好的内核版本

本人换之前的内核为linux-headers-6.6.51+rpt-rpi-v8

下载必要工具

1
2
sudo apt-get install bc git bison flex libssl-dev make vim git 
sudo apt-get install libncurses5-dev libncursesw5-dev

克隆仓库

1
git clone --depth=1 https://github.com/raspberrypi/linux --branch <your_version>

版本可以到github仓库去看,我是使用的版本是rpi-6.6.y

查看Makefile文件前10行来查看源码的内核版本

1
2
cd linux-<your_version> #进入项目目录
head -n 10 Makefile

下载补丁源码

PREEMPT RT 内核源码地址

注意:这里Preempt RT内核版本要与前面linux源码内核版本前两个数字要一致。

把补丁源码放在项目目录外。

1
2
cd ..
wget "https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/6.6/patch-6.6.63-rt47-rc1.patch.gz" #使用前请替换成你自己的版本

编译

1
2
3
4
cd linux-<your_version>
gzip -cd ../patch-6.6.63-rt47-rc1.patch.gz | patch -p1 --verbose #使用前更改为你自己的版本
KERNEL=kernel8 #这里用kernel8是因为我的架构是armV8
make bcm2711_defconfig #这里是64位树莓派的config,如果找不到可以到报错的目录去找自己对应的config

编译设置

(1)将系统设置为Real Time系统

General setup -> Preemption Model -> Fully Preemptible Kernel(Real-Time)

(2)修改定时器频率为1000HZ。

Kernel Features -> Timer frequency -> 1000HZ

Save保存设置,返回到命令行。

内核编译

1
make -j8

编译时间比较长,大概要2个小时左右

安装Preempt RT内核

1
make modules_install

复制到内核文件夹

1
2
3
4
cp arch/arm64/boot/dts/broadcom/*.dtb /boot/firmware
cp arch/arm64/boot/dts/overlays/*.dtb* /boot/firmware/overlays/
cp arch/arm64/boot/dts/overlays/README /boot/firmware/overlays/
cp arch/arm64/boot/Image /boot/firmware/kernel8.img

在文件/boot/firmware/config.txt最后一行添加kernel=kernel8.img即可

1
2
vim /boot/firmware/config.txt
kernel=kernel8.img #添加在文件最后一行

尾声

重启后使用uname -a命令查看内核是否成功更换。

1
uname -a

成功更换


树莓派打preempt RT补丁(树莓派内编译)
http://example.com/posts/38038/
作者
晓寒
发布于
2024年12月6日
许可协议