当前位置:   article > 正文

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

rt-linux


在这里插入图片描述
书接上篇: 硬实时RTLinux安装配置详解 (一):准备工作

4. 配置RTLinux

4.1 配置Patch

准备工作做完后,就开始配置RTLinux,
首先需要生成Patch,cd到usr/src/rt-preempt-linux/目录下:

  • 将patch 复制到linux内核目录下:cp patch-4.19.1-rt2.patch linux-4.19.1
    在这里插入图片描述

然后进入内核源码目录:usr/src/rt-preempt-linux/linux-4.19.1

  • 给linux内核配置RT patch:(打Patch)
    patch -p1 < patch-4.19.1-rt2.patch

在这里插入图片描述

4.2 配置RTLinux内核

继续在usr/src/rt-preempt-linux/linux-4.19.1中,

  • 执行make mrproper 或make clean 在编译前清除一下环境
  • 拷贝/boot文件夹下与当前内核版本匹配的config文件到内核源码目录,并命名为.config:
    在这里插入图片描述
  • 执行make menuconfig 图形化配置内核
    在这里插入图片描述

弹出menu配置窗口:

进入到“General setup”

  • 在"Preemption Model"中选择“Fully Preemptible Kernel(Real-Time)”
    在这里插入图片描述
    在这里插入图片描述
  • 输入空格选择Fully Preemptible Kernel,

因为Linux内核采用标准Unix技术使得内核是不可抢占的,采用固定时间片调度,通过该设置使得内核能够实现完全抢占

在这里插入图片描述

  • 回到上一层,进入”Device Drivers”中,去掉“Staging drivers”
    在这里插入图片描述
    输入N反选

在这里插入图片描述

  • General setup -> Timers subsystem,选中“High resolution timer
    support”,
    使用高精度Timer, 可以提高RTLinux实时性
    在这里插入图片描述

  • “Processor type and features” ->“Timer frequency”选1000 HZ

    Linux默认Timer是100Hz,这里设置提升Timer为1000Hz (否则RTlinux实时性测试会很差)
    在这里插入图片描述

  • 检测.config里如果有如下CONFIG_SYSTEM_TRUSTED_KEYS配置,需要注释掉,否则会连接证书校验报错
    通过gedit或mousepad,编辑.config文件:

在这里插入图片描述

4.3. 编译Rtlinux内核

  • 上面步骤完成后,在内核源码目录下,执行make编译内核

新版本Make同样也会进行make module
编译过程会比较费时,根据电脑性能不同大约需要1-3个小时左右。

在这里插入图片描述

  • 等待make结束

在这里插入图片描述
如果make过程报错,原因大多是依赖包安装不全,可以根据报错信息对依赖包进行安装)

  • make成功后,执行make install
    在这里插入图片描述
  • 之后执行Make modules_install 安装各模块
    在这里插入图片描述

4.4 制作initramfs启动引导:

还没算完,需要制作initramfs 才能引导RTlinux 内核启动
cd /boot ,在/boot目录下:

  • 执行mkinitramfs -k -o initrd.img-4.19.1-rt2 4.19.1-rt2
    在这里插入图片描述

5. 大功告成,启动运行RTlinux

上述步骤全部正确完成后,重启会弹出选择4.19.1-rt2版本,既编译的RTlinux内核版本的硬实时linux操作系统(Grab已自动配置)

在这里插入图片描述
启动后,查看内核版本,既为RTlinux硬实时操作系统内核的linux :

  • uname -a
    在这里插入图片描述
    同时查看boot config,确认目前这个内核已是实时内核配置
  • cat /boot/config-4.19.1-rt2 | grep CONFIG_PREEMPT_RT
    在这里插入图片描述

接下来就可以在RTLinux上实现应用开发啦

6. 测试RTLinux

6.1 编译安装 RT-tests

使用RT-tests对RTLinux的实时性进行性能测试:

rt-tests包已经可以直接apt安装了:
apt-get install rt-tests

在这里插入图片描述
或者获取source 自己make:

apt-get source rt-tests
在这里插入图片描述
更改makefile prefix为安装目录
在这里插入图片描述
之后进行Make rt-test
(这一步如果报错numa.h:No such file,需要apt-get install libnuma-dev)
在这里插入图片描述

之后 make all即可
在这里插入图片描述

6.2 执行测试程序

安装完成后,通过cyclictest cmd开始测试:

cyclictest -t 5 -p 80 -n

  • 使用rt的内核:

在这里插入图片描述

  • 使用非rt的内核:
    在这里插入图片描述
    上面图片跑在虚拟机上面的,所以实时性测试效果很差,但也能看出一些rt和非rt的实时性差距。

如果用真机测试,这些延时等参数会好很多,一般的AVG 在1-5us左右.

真机测试结果:

在这里插入图片描述

cyclictest cmd的参数介绍:

在这里插入图片描述

可参考Preempt_Test:
https://rt.wiki.kernel.org/index.php/Preemption_Test

git clone git://github.com/ghaskins/preempt-test.git
在这里插入图片描述

7. 深入探讨下RTLinux

原理: RTLinux将内核变成完全抢占式

主要通过:

  • 修改lock原语的实现,使得资源可以抢占
  • 修改使得被spinlock_t,
    rwlock_t等保护的临界区可以抢占,raw_spinlock_t, raw_rwlock_t等保留不能抢占的特性
  • 优先级继承priority inheritance的实现
  • 中断处理程序变成可被抢占的内核线程, 软中断被视为内核线程上下文, 就像用户空间的进程一样拥有一个task_struct。
  • 原本的linux定时器的API拥有了更高精度,使得用户空间POSIX timer也拥有了更高精度

RTLinux内核结构示意图:

在这里插入图片描述

所谓的实时调度策略

实时进程将得到优先调用,实时进程根据实时优先级决定调度权值,普通分时进程则通过nice和counter值决定权值,nice越小,counter越大,被调度的概率越大,也就是曾经使用了cpu最少的进程将会得到优先调度。

实时任务按照可抢占优先级调度算法进行,就绪态的实时任务可以立即抢占非实时任务。

SCHED_FIFO:First Input First Output,优先级范围1-99(最大)
SCHED_FIFO一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃。

如果有相同优先级的实时进程(根据优先级计算的调度权值是一样的)已经准备好,FIFO时必须等待该进程主动放弃后才可以运行这个优先级相同的任务。
而RR可以让每个任务都执行一段时间。

可惜的是WindRiver 收购RTlinux后,很多资源都无法访问了,不过目前基本应用来说,已经足够了

在这里插入图片描述


在这里插入图片描述

博主热门文章推荐:

一篇读懂系列:

LoRa Mesh系列:

网络安全系列:

嵌入式开发系列:

AI / 机器学习系列:


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/574894
推荐阅读
相关标签
  

闽ICP备14008679号