(2022.02.27更新)

一、准备

1.1 获取内核源码与RT补丁

RT补丁: https://www.kernel.org/pub/linux/kernel/projects/rt/
内核源码: https://www.kernel.org/pub/linux/kernel

        对于某些内核版本找不到的场合,寻找相近的内核源码就可以,但是要注意到RT补丁与所下载的内核源码版本号需要严格对应。下载好后,将补丁包与解压后的内核源码文件夹放在同一级目录下。

1.2 安装依赖项

sudo apt-get install libncurses5-dev libssl-dev build-essential openssl zlibc libelf-dev minizip libidn11-dev libidn11 bison flex

二、安装补丁

        下面以linux-5.10.100-rt62的安装为例。

sudo mkdir /usr/src/rt_kernal
sudo cp ~/下载/linux-5.10.100.tar.xz /usr/src/rt_kernal/
sudo cp ~/下载/patch-5.10.100-rt62.patch.xz /usr/src/rt_kernal/
cd /usr/src/rt_kernal/
sudo su
xz -cd linux-5.10.100.tar.xz | tar xvf -
cd linux-5.1.100
xzcat ../patch-5.10.100-rt62.patch.xz | patch -p1

三、配置内核

        复制系统当前内核的.config文件

cp /boot/config-5.11.0-41-generic .config

        调用图形化界面,设置.config文件,改动结束后,在图形化界面最下边框选择save,则将当前的改动保存到.config文件中。

make menuconfig

     需要改动的地方主要是(带*号环节可以忽略):
1. General setup

Preemption Model (Voluntary Kernel Preemption(Desktop))
—[x] Fully Preemptible Kernel(RT)

(如果在这一级找不到 Preemption model 的设置的话,在Processor type and featuer
里找)
*2. Kernel hacking

Memory Debugging
—[] check for stack overflow

(如果没有则忽略;如果默认关闭 就不用管了,这里针对的是默认开启内存溢出检查的场合)
*3. Device Drivers

—[] staging drivers

(如果默认开启,按N键取消)

        修改.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信息超大。

gedit .config

四、编译内核

        按照本机线程数设置编译线程,例子中本机为16线程。

make -j16
make modules_install -j16
make install 
update-grub

五、校验结果

cd /boot
ls

        查看/boot 目录下是否有生成的rt核心, 应该生成的文件包括:config-5.10.100-rt62、System.map-5.10.100-rt62、initrd.img-5.10.100-rt62、vmlinuz-5.10.100-rt62。

reboot
uname -r

        重启电脑,在开机引导中选择“linux-5.10.100-rt62”,开机后检查当前内核版本号,若为linux-5.10.100-rt62则正确安装实时内核补丁。

六、测试

        安装rt_test

sudo apt-get install rt-tests 

        运行测试(5个线程,线程优先级80,以ns显示时间)

sudo cyclictest -t 5 -p 80 -N

 测试结果中各项含义如下

T: 0     序号为0的线程
P: 0     线程优先级为0
C: 9397  计数器。线程的时间间隔每达到一次,计数器加1
I: 1000  时间间隔为1000微秒(us)
Min:     最小延时(us)
Act:     最近一次的延时(us)
Avg:    平均延时(us)
Max:    最大延时(us)  

七、启动设置

        如果重启后直接开机,没有出现选择内核的页面,则在进入系统后,执行下面的命令:

sudo gedit /etc/default/grub

GRUB_TIMEOUT=10  %超时时间,单位s

GRUB_DEFAULT="1>2"  %1代表默认启动内核,2代表所启动内核位于列表中第2个(序号从0开始)

        然后更新grub

sudo update-grub

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐