0


【linux打实时补丁 | ubuntu20.04安装实时内核补丁PREEMPT_RT及正确启用RT】

ubuntu20.04安装PREEMPT_RT实时内核及测试

1.前置准备工作

大多数教程都说:“首先要通过

uname -r

查看当前版本内核,注意查找离自己目前内核最接近的 kernal 并下载,然后根据下载的内核版本下载补丁,内核版本和补丁版本要保持一致。”但据我的测试,我在5.15.0-64-generic的基础上,分别安装了5.15.167-rt79和5.10.225-rt117,都是可以正常运行rt内核的,实时性都是OK的。不清楚大家为什么这么说?

2.从官方下载内核的源码和对应RT补丁

正确的顺序应该是,先去rt页面找到哪个版本有对应的rt补丁,再去linux内核页面下载对应的内核源码。

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

本文使用的是在ubuntu20.04内核5.15.0-64-generic基础上,安装了linux5.10.225内核以及对应的5.10.225-rt117实时补丁,已通过测试。

【需要注意】RT补丁尽量和linux内核版本上完全保持一致,有的教程也说可以接近就行,但没尝试过,不确定稳定性如何。

3.安装依赖项

sudoapt-getinstall libncurses5-dev libssl-dev build-essential openssl zlibc libelf-dev minizip libidn11-dev libidn11 bison flex zstd

4.创建内核+补丁的环境

假如下载的是xz后缀,以5.10.225为例:

sudomkdir /usr/src/rt_kernal
sudocp ~/Downloads/linux-5.10.225.tar.xz /usr/src/rt_kernal/
sudocp ~/Downloads/patch-5.10.225-rt117.patch.xz /usr/src/rt_kernal/
cd /usr/src/rt_kernal/
sudosu
xz -cd linux-5.10.225.tar.xz |tar xvf -
cd linux-5.10.225
xzcat ../patch-5.10.225-rt117.patch.xz | patch -p1

5.配置内核

如果之前操作都正确,目前应该是在linux-5.10.225的root用户路径下
所以接下来的操作都没有sudo命令前缀
如果不是root,使用sudo su进入

  1. 复制系统当前内核的.config文件(无论当前是哪个内核版本都可以)
cp /boot/config-5.15.0-64-generic .config
  1. 进入图形化界面配置.config文件
make menuconfig
  1. 需要改动的地方如下:

General Setup -> Timers subsystem -> Timer tick handling 设置为 Full dynticks system
General Setup -> Timers subsystem 开启 High Resolution Timer Support
General Setup -> Preemption Model 设置为 Fully Preemptible Kernel (Real Time)
Processor type and features -> Timer frequency 设置为 1000 HZ
Device Drivers -> staging drivers 设置为 不开启 ——[ ] 默认开启,按N取消

  1. 编辑.config文件并修改以下内容
gedit .config

CONFIG_SYSTEM_TRUSTED_KEY=“”
CONFIG_SYSTEM_REVOCATION_KEYS=“”
CONFIG_DEBUG_INFO=n
不然新内核带debug信息超大

  1. 下面正式开始编译后,全部按enter选择默认选项即可

6.编译带RT补丁的内核

其中

-j$(nproc)

表示使用本机的全部线程数进行编译,加快速度

本机共20个线程,下面四步完整编译过程大约30分钟

make -j$(nproc)make modules_install -j$(nproc)makeinstall

7.校验结果

cd /boot
ls

查看/boot 目录下是否有生成的rt核心,应该包括以下4个文件:

config-5.10.225-rt117
System.map-5.10.225-rt117
initrd.img-5.10.225-rt117
vmlinuz-5.10.225-rt117

如果都有,则重启电脑,在开机引导中选择

linux-5.10.225-rt117

,开机后检查当前内核版本号,若为

5.10.225-rt117

则表示正确安装了RT补丁

rebootuname -r

8.设置用户权限以使用RT实时调度(关键一步)

为了能够以用户权限调度线程(驱动程序将执行此操作),您需要通过更改

/etc/security/limits.conf

文件来修改用户的限制

建议为实时用户设置一个组,而不是将固定的用户名写入配置文件:

sudogroupadd realtime
sudousermod -aG realtime $(whoami)

然后:

sudonano /etc/security/limits.conf

确保

/etc/security/limits.conf

文件包含以下内容:

@realtime soft rtprio 99
@realtime soft priority 99
@realtime soft memlock 204800
@realtime hard rtprio 99
@realtime hard priority 99
@realtime hard memlock 204800

其中,

rtprio

是实时调度的优先级,

memlock

是内存锁定的大小,单位为

KB

,防止应用程序的内存被交换到磁盘(即锁定内存),从而保证高性能

使用

ulimit -r

命令来验证当前用户的实时优先级限制,这个命令会返回用户的最大实时优先级。正常情况下,输出应该是 99。如果不是,说明配置没有正确应用

9.测试实时性

安装rt_test测试工具

sudoapt-getinstall rt-tests 

运行测试

5个线程,线程优先级99,以ms单位显示时间
sudo cyclictest -t 5 -p 99 -N -m
  • -t 5:启动 5 个线程
  • -p 99:设置线程的优先级为 99
  • -N:禁用控制台打印,减少不必要的输出
  • -m:以毫秒(ms)为单位显示结果

测试结果中各项含义如下

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

10.启动设置

/etc/default/grub

中配置开机自动选择

sudo gedit /etc/default/grub
 GRUB_TIMEOUT=10       %超时时间,单位s
 GRUB_DEFAULT="1>2"    %1代表默认启动第2个内核,2代表所启动内核1中的第3个(序号从0开始)

然后更新

grub
sudoupdate-grub
标签: linux 运维 服务器

本文转载自: https://blog.csdn.net/qq_46387453/article/details/143108869
版权归原作者 Kasout 所有, 如有侵权,请联系我们删除。

“【linux打实时补丁 | ubuntu20.04安装实时内核补丁PREEMPT_RT及正确启用RT】”的评论:

还没有评论