admin管理员组文章数量:1598836
硬实时RTlinux系统配置
- 4. 配置RTLinux
- 4.1 配置Patch
- 4.2 配置RTLinux内核
- 4.3. 编译Rtlinux内核
- 4.4 制作initramfs启动引导:
- 5. 大功告成,启动运行RTlinux
- 6. 测试RTLinux
- 6.1 编译安装 RT-tests
- 6.2 执行测试程序
- 7. 深入探讨下RTLinux
- 原理: RTLinux将内核变成完全抢占式
- 所谓的实时调度策略
- 博主热门文章推荐:
书接上篇: 硬实时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/index.php/Preemption_Test
git clone git://github/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后,很多资源都无法访问了,不过目前基本应用来说,已经足够了
博主热门文章推荐:
一篇读懂系列:
- 一篇读懂无线充电技术(附方案选型及原理分析)
- 一篇读懂:Android/iOS手机如何通过音频接口(耳机孔)与外设通信
- 一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)
LoRa Mesh系列:
- LoRa学习:LoRa关键参数(扩频因子,编码率,带宽)的设定及解释
- LoRa学习:信道占用检测原理(CAD)
- LoRa/FSK 无线频谱波形分析(频谱分析仪测试LoRa/FSK带宽、功率、频率误差等)
网络安全系列:
- ATECC508A芯片开发笔记(一):初识加密芯片
- SHA/HMAC/AES-CBC/CTR 算法执行效率及RAM消耗 测试结果
- 常见加密/签名/哈希算法性能比较 (多平台 AES/DES, DH, ECDSA, RSA等)
- AES加解密效率测试(纯软件AES128/256)–以嵌入式Cortex-M0与M3 平台为例
嵌入式开发系列:
- 嵌入式学习中较好的练手项目和课题整理(附代码资料、学习视频和嵌入式学习规划)
- IAR调试使用技巧汇总:数据断点、CallStack、设置堆栈、查看栈使用和栈深度、Memory、Set Next Statement等
- Linux内核编译配置(Menuconfig)、制作文件系统 详细步骤
- Android底层调用C代码(JNI实现)
- 树莓派到手第一步:上电启动、安装中文字体、虚拟键盘、开启SSH等
- Android/Linux设备有线&无线 双网共存(同时上内、外网)
AI / 机器学习系列:
- AI: 机器学习必须懂的几个术语:Lable、Feature、Model…
- AI:卷积神经网络CNN 解决过拟合的方法 (Overcome Overfitting)
- AI: 什么是机器学习的数据清洗(Data Cleaning)
- AI: 机器学习的模型是如何训练的?(在试错中学习)
- 数据可视化:TensorboardX安装及使用(安装测试+实例演示)
版权声明:本文标题:硬实时RTLinux安装配置详解 (二):编译运行RTLinux 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1728298296a1152698.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论