实时补丁和测试工具下载链接:
1、实时补丁的移植
Linux内核版本和 rt 版本尽量保持一致 , 如果实在找不到对应Linux内核版本的 rt 补丁包,可用最近补丁替代,再根据 make uImage 提出的错误做适当修改。(不同Linux内核的实时性有一定的差别,但总体差别不大)
Linux内核版本为:linux-4.19.94
rt 版本为:patch-4.19.94-rt38.patch
移植步骤: (提前设置好内核的编译器和架构)
1. cp patch-4.19.94-rt38.patch /home/zsj # 拷贝 rt 补丁包到 /home/zsj 目录
2. cd /home/zsj/linux-4.19.94 # 进入内核源码目录
3. patch -p1 <../patch-4.19.94-rt38.patch # 给内核打入实时补丁包
4. make menuconfig # 进入内核的图像化配置界面
5. /PREEMPT_RTB # 搜素 rt 选项的位置,并进入该位置,勾选 Fully Preemptible Kernel(RT) 后,保存退出
6. make uImage -j4 # 编译 rt 内核
7. # 替换到原有的 uImage 后,重启即可
8. uname -a # 检查 rt 移植是否成功
2、实时测量工具(cyclictest )移植
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/35b4774249e5af76843d81f1294b9ce9.png)
移植步骤:
1. 下载 rt-tests-1.0.tar.gz 源码,放入 /home/zsj 目录
2. tar xvf rt-tests-1.0.tar.gz # 解压源码
3. cd rt-tests-1.0 # 进入该目录
4. vim Makefie # 修改 Makefile 下的交叉编译器
5. make cyclictest NUMA=0 # 编译后生成 cyclictest, 再将该工具拷贝到开发板,并赋予可执行权限即可
3、cyclictest 参数介绍
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/de55b02ba0bd79f63c758fdcb30f4ee3.png)
./cyclictest -t1 -p 80 -n -i 10000 -l 10000 # 单线程测试
./cyclictest -t4 -p 80 -n -i 10000 -l 10000 # 多线程测试
-t # 运行的线程数量
-p # 给 cyclictest 赋优先级 80
-n # 使用 nanosleep 而不是简单的 sleep
-i # 线程的间隔为 10000us ,默认为 1000us
-l # 循环的数量,默认无限循环
4、实时测量结果分析
Note:
实际项目过程中,需要长时间(一天以上)测量系统的实时性,来检测系统任务的抖动时间。故使用以下命令:./cyclictest -t1 -p 99 -n -i 10000
打补丁前的测试结果:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2dfdc29cdd637c281a88ce7c6ce69bd2.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/eb8bead13873be8900d4d335834b9c0a.png)
打补丁后的测试结果:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6e8f203fd0c1e10ad1605e7a5bb7bbdf.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e963940db88eaca71cb20734e5b31d38.png)
结果分析:
打补丁后,系统的实时能力有明显的提高,但对于高实时要求的检测或者控制系统而言,其实时效果远远不能满足严格的实时要求。