赞
踩
书接上篇: 硬实时RTLinux安装配置详解 (一):准备工作
准备工作做完后,就开始配置RTLinux,
首先需要生成Patch,cd到usr/src/rt-preempt-linux/目录下:
然后进入内核源码目录:usr/src/rt-preempt-linux/linux-4.19.1
继续在usr/src/rt-preempt-linux/linux-4.19.1中,
弹出menu配置窗口:
进入到“General setup”
因为Linux内核采用标准Unix技术使得内核是不可抢占的,采用固定时间片调度,通过该设置使得内核能够实现完全抢占
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文件:
新版本Make同样也会进行make module
编译过程会比较费时,根据电脑性能不同大约需要1-3个小时左右。
如果make过程报错,原因大多是依赖包安装不全,可以根据报错信息对依赖包进行安装)
还没算完,需要制作initramfs 才能引导RTlinux 内核启动
cd /boot ,在/boot目录下:
上述步骤全部正确完成后,重启会弹出选择4.19.1-rt2版本,既编译的RTlinux内核版本的硬实时linux操作系统(Grab已自动配置)
启动后,查看内核版本,既为RTlinux硬实时操作系统内核的linux :
接下来就可以在RTLinux上实现应用开发啦
使用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即可
安装完成后,通过cyclictest cmd开始测试:
cyclictest -t 5 -p 80 -n
如果用真机测试,这些延时等参数会好很多,一般的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
主要通过:
RTLinux内核结构示意图:
实时进程将得到优先调用,实时进程根据实时优先级决定调度权值,普通分时进程则通过nice和counter值决定权值,nice越小,counter越大,被调度的概率越大,也就是曾经使用了cpu最少的进程将会得到优先调度。
实时任务按照可抢占优先级调度算法进行,就绪态的实时任务可以立即抢占非实时任务。
SCHED_FIFO:First Input First Output,优先级范围1-99(最大)
SCHED_FIFO一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃。
如果有相同优先级的实时进程(根据优先级计算的调度权值是一样的)已经准备好,FIFO时必须等待该进程主动放弃后才可以运行这个优先级相同的任务。
而RR可以让每个任务都执行一段时间。
可惜的是WindRiver 收购RTlinux后,很多资源都无法访问了,不过目前基本应用来说,已经足够了
一篇读懂系列:
LoRa Mesh系列:
网络安全系列:
嵌入式开发系列:
AI / 机器学习系列:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。