Ubuntu18.04添加PREEMPT实时补丁

一、查看当前Linux内核版本

uname -r

本次测试使用的环境
1、虚拟机VirtualBox 7.0.6
2、Ubuntu18.04.2,内核版本是5.4.0-150

注意:后面的指令都是在root账户下输入的,如果在home下,几乎所有命令都加sudo

二、内核和补丁下载
下载相近版本内核
内核下载网站:https://mirrors.edge.kernel.org/pub/linux/kernel/
(网站打开后,目录是按字母排序,需要下拉到Linux开头的地方找想要的内核)
下载与内核版本一致的补丁
补丁下载网站: https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/

本次测试选了5.4.10版本的内核,5.4.10-rt5版本的实时补丁

三、安装依赖库
网上的资料对于依赖库的内容略有区别,但经测试,安装下面这些是够用的

apt-get -y update
apt-get install patch
apt-get install build-essential make gcc libncurses-dev libssl-dev libc6-dev libelf-dev bison dwarves zstd flex

四、配置Linux内核
4.1、在/usr/src/下新建一个文件夹,可命名为rt_linux_preempt
将两个压缩包复制到该文件下,解压缩
下面是官方文件提供的解压方法(应该是针对.xz压缩包)

$ xz -cd linux-4.4.12.tar.xz | tar xvf -
$ cd linux-4.4.12
$ xzcat ../patch-4.4.12-rt19.patch.xz | patch -p1

本次测试使用的是.gz压缩包。对于.gz压缩包,可使用下面的解压缩方法

tar -vxzf linux-x.x.x.tar.gz
gunzip -d patch-x.x.x-rtx.patch.gz  // 这个命令执行完后,原patch压缩包会自动删除

将解压出来的.patch文件移动(或复制)到解压出来的linux-x.x.x文件夹中
在linux-x.x.x文件夹中查看.patch 的权限,将文件的权限修改一下

chmod 777 patch-x.x.x-rtx.patch

给linux内核配置RT patch:(打Patch)

patch -p1 < patch-x.x.x-rtx.patch

4.2、执行一次make clean,确保文件夹下没有旧的make后生成的文件

4.3、将原内核配置文件复制到linux-x.x.x文件夹下

cp -v /boot/config-$(uname -r) .config

4.4、配置内核

make menuconfig

图形符号界面出来后,执行以下操作
1、“General setup” -> “Preemption Model” -> 选择 “Fully Preemptible Kernel(Real-Time)”
2、“Device Drivers” -> 去掉"Staging drivers"(按空格,或者按n)
3、“Processor type and features” -> “Timer frequency” -> 选择"1000Hz "
4、General setup -> Timers subsystem,选中“High resolution timer support” // 使用高精度Timer, 可以提高RTLinux实时性
5、保存并退出

说明:
1、以上修改项可以全部修改完后一起保存,也可以修改一项保存一项。
2、界面显示,需要终端窗口最大化。如果是虚拟机,虚拟机的窗口也要最大化,否则会显示失败。

4.5、编辑.config文件
删除或注释.config文件中CONFIG_SYSTEM_TRUSTED_KEYS与CONFIG_SYSTEM_REVOCATION_KEYS的配置参数

说明:
1、建议选择删除目标变量的配置参数的方法;如果选择注释掉,后面make的时候会出现一些额外的提示;
2、.config文件中可能不存在CONFIG_SYSTEM_REVOCATION_xxx这类变量;
3、有的资料还建议注释掉CONFIG_MODULE_SIG_ALL、CONFIG_MODULE_SIG_KEY等,经测试最好别动,否则后面make的时候会出现额外的提示,需要分析然后决定怎么操作。

五、编译RTLinux内核(-jn表示n线程编译,n根据分配的处理器数量)
在内核源码目录下,执行make编译

make -j8

Two thousand years Later。。。(根据电脑性能而定,本次测试大概1小时左右)

make结束后,执行

make modules_install
make install

两个指令运行结束,并没有报错,说明安装成功
说明:
1、经测试,两条指令没有先后顺序;
2、make modules_install后面的-jn可有可无。

六、制作initramfs启动引导:
需要制作initramfs 才能引导RTlinux 内核启动
cd /boot
在/boot目录下:执行
mkinitramfs -k -o initrd.img-x.x.x-rtx x.x.x-rtx # 版本号是实际用到的版本

七 重启
正确完成后,执行reboot,重启

重启后,执行uname -r,看输出结果是否为下x.x.x-rtx

参考连接中提到了,重启后会出现内核选择界面,以及提供了若没出现,该怎么修改等内容,
实际测试中,
1、并没有会跳出选择界面,会直接启动加了实时补丁的内核(应该是.gurb文件中,GRUB_DEFAULT=0的原因,且加了实时补丁的内核刚好在列表的第一个)
2、如果按照博文中说的方法修改,不仅没有跳出界面,默认启动的内核也变成了没加实时补丁的(GRUB_DEFAULT=0改成了GRUB_DEFAULT=“1>2” %1代表默认启动内核,2代表所启动内核位于列表中第2个(序号从0开始))

要根据实际情况进行分析操作

八,实时性测试
8.1、安装rt-test

sudo apt-get install rt-tests

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

sudo cyclictest -t 4 -p 80 -N    # -N 是纳秒显示; -n 是微妙显示

说明:
1、在虚拟机上面运行,实时性测试效果可能很差,如果用真机测试,这些延时等参数会好很多,一般的AVG在1-5us左右
2、测试中,用纳秒显示时,会显示出一个值很大的负数,具体原因还没查出

参考:
硬实时RTLinux?为Linux打实时preempt_rt补丁

硬实时RTLinux安装配置详解 (一):准备工作

硬实时RTLinux安装配置详解 (二):编译运行RTLinux

Ubuntu18.04安装实时内核Preempt-RT

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值