By Toradex 胡珊逢

1). 简介

对于实时、决策或者低延时应用,Linux能够提供多种方案。第一种方法是和 Linux 内核一起运行一个hypervisor或者co-kernel。这种方案中hypervisor或者co-kernel的优先级高于 Linux,实时任务则运行于其中。另外一种方式是使用非对称异构多核系统,Linux和另外一个实时内核分别运行在不同处理器内核上。最后,还可使 Linux 更具抢占性从而提高其实时性能。这通常可以通过 PREEMPT_RT 补丁实现。本文就基于Toradex Colilbri iMX6 ARM计算机模块系统着重介绍如何部署病测试PREEMPT_RT 补丁。

2). 部署

a). 下载 Linux 内核源码

---------------------

Toradex-ubuntu$ git clone -b toradex_4.1-2.0.x-imx git://git.toradex.com/linux-toradex.git

---------------------

或者从 FTP 下载

ftp://ftp.toradex.cn

Linux/I.MX6/SourceCode/v2.7/linux-toradex.tar.gz

b). 下载rt补丁

ftp://ftp.toradex.cn

Linux/I.MX6/RT-Linux/Linux4.1.35/patch.tar.gz

c). 安装补丁

---------------------

Toradex-ubuntu $cdlinux-toradex

Toradex-ubuntu $ patch -p1 < ../patch/patch-4.1.35-rt41.patch

Toradex-ubuntu $ patch -p1 < ../patch/0001-fix-build.patch

Toradex-ubuntu $ patch -p1 < ../patch/0002-fix-build.patch

Toradex-ubuntu $ patch -p1 < ../patch/0003-Work-around-CPU-stalls-in-the-imx-sdma-driver.patch

Toradex-ubuntu $ patch -p1 < ../patch/0004-export-swait-locked-functions.patch

---------------------

注意,根据所在的目录,需要调整 patch 命令–p 的参数。

d). 配置内核

---------------------

Toradex-ubuntu $ make colibri_imx6_defconfig

Toradex-ubuntu $ make menuconfig

---------------------

勾选下面选项

---------------------

./ Kernel Features  --->Preemption Model (Fully Preemptible Kernel (RT))  --->(X) Fully Preemptible Kernel (RT)

./ Timer frequency (100 Hz)  --->(X) 1000 Hz

---------------------

虽然在 Linux 使用了rt补丁,但是Linux 的大部分驱动却并不是使用PREEMPT_RT API,这些驱动的存在会影响实时性能,特别是显示驱动。因此,如果你的应用中不需要显示功能,那么可以在 Linux 内核配置中禁用它,以及其他你所不需要的功能。设备驱动位于下面位置:

---------------------

Device Drivers  --→

---------------------

e). 编译内核

---------------------

Toradex-ubuntu $ make -j4 uImage LOADADDR=10008000

---------------------

3). 测试

a). 这里我们也将使用 console image(无图形界面)的镜像作为测试。

ftp://ftp.toradex.cn/

Linux/I.MX6/RT-Linux/Linux4.1.35/Colibri_iMX6_LinuxConsoleImageV2.7_20170308.tar.bz2

b). 根据这里说明将上面console image更新到Colibri iMX6模块上面, 然后用上一章节编译出的uImage 替换Colibri iMX6 上的内核,并重新启动。

c). 在没有使用 PREEMPT_RT 补丁的 Linux 中,cyclictest测试如下,测试过程中使用 stress 增加 CPU负荷

---------------------

root@colibri-imx6:~# uname -a

Linux colibri-imx6 4.1.35-v2.7b1+gc117783 #1 SMP Thu Jan 19 09:06:57 CST 2017 armv7l GNU/Linux

root@colibri-imx6:~# stress -c 2 &

[1] 535

root@colibri-imx6:~# stress: info: [535] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd

root@colibri-imx6:~# cyclictest -n -p 80 -t -D10m

# /dev/cpu_dma_latency set to 0us

policy: fifo: loadavg: 2.00 1.79 1.04 3/74 541

T: 0 (  539) P:80 I:1000 C: 599994 Min:     10 Act:   13 Avg:   13 Max:     826

T: 1 (  540) P:80 I:1500 C: 399996 Min:     10 Act:   13 Avg:   13 Max:      42

---------------------

d). 使用 PREEMPT_RT 补丁后,做同样的测试

---------------------

root@colibri-imx6:~# uname -a

Linux colibri-imx6 4.1.35-rt41 #1 SMP PREEMPT RT Wed Mar 8 11:41:31 CST 2017 armv7l GNU/Linux

root@colibri-imx6:~# stress -c 2 &

[1] 526

root@colibri-imx6:~# stress: info: [526] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd

root@colibri-imx6:~# cyclictest -n -p 80 -t -D10m

# /dev/cpu_dma_latency set to 0us

policy: fifo: loadavg: 2.00 1.78 1.01 3/114 535

T: 0 (  530) P:80 I:1000 C: 599994 Min:     14 Act:   20 Avg:   18 Max:      71

T: 1 (  531) P:80 I:1500 C: 399996 Min:     14 Act:   16 Avg:   17 Max:      50

---------------------

通过对比测试发现,使用 PREEMPT_RT 补丁后,最大延时由 826us 降到 71us。

4). 总结

PREEMPT_RT通过软件的方法提高普通 Linux 的实时能力,但这仍然不是真正意义上的实时,正如上面的测试,还是会出现数十微秒的延时,当系统的负荷增加时,可能出现更长的延时情况。Colibri iMX7 上的 M4 内核可以运行FreeRTOS,从而提供真正的实时操作系统。详细的情况,请参考Toradex举办的网络研讨会《使用嵌入式 Linux 进行实时系统开发》

实时linux部署测试相关推荐

  1. Kali Linux渗透测试——无线渗透

    笔记内容参考安全牛课堂苑房弘老师的Kali Linux渗透测试教程,以及文章: https://blog.csdn.net/qq_38265137/article/details/80370554 h ...

  2. 项目四 CentOS使用kubeadm部署工具部署测试环境的K8s集群---Kubectl命令使用以及安装dashboard界面

    大家好,我是SuieKa.在之前呢有幸学习了马哥教育提供的K8s入门指南以及视频.初来乍到,写一篇关于K8s的介绍以及部署测试环境使用的K8s集群. 树 @·K8s入门简单介绍 一.K8s(Kuber ...

  3. Linux部署Node.js应用

    Linux部署Node.js应用 文章目录 Linux部署Node.js应用 一.背景描述 二.环境准备 三.添加守护进程 四.参考链接 一.背景描述 将基于Node.js开发的应用部署到Linux系 ...

  4. linux渗透测试_渗透测试:选择正确的(Linux)工具栈来修复损坏的IT安全性

    linux渗透测试 Got IT infrastructure? Do you know how secure it is? The answer will probably hurt, but th ...

  5. 记录第一次使用linux部署springbootweb项目

    记录第一次使用linux部署springbootweb项目 收获感受 经过一下午的安装虚拟机.Linux系统.JDK1.8,项目打包,解决bug,终于项目部署成功!哈哈哈哈哈哈哈哈哈 收获还是不错的, ...

  6. 《Kali Linux渗透测试的艺术》—第2章2.3节安全测试方法论

    本节书摘来自异步社区<Kali Linux渗透测试的艺术>一书中的第2章2.3节安全测试方法论,作者[英]Lee Allen , [印尼]Tedi Heriyanto , [英]Shake ...

  7. 视频教程-Kali Linux渗透测试全程课与脚本语言编程系列课程-渗透测试

    Kali Linux渗透测试全程课与脚本语言编程系列课程 本人有多年的服务器高级运维与开发经验,擅长计算机与服务器攻防及网络攻防技术!对网络安全领域有持续的关注和研究! 林晓炜 ¥899.00 立即订 ...

  8. KALI LINUX渗透测试学习笔记

    KALI LINUX渗透测试学习笔记 (苑房弘主讲) 第1章 课程介绍 任务1:Kali Linux渗透测试介绍.exe 安全问题的根源: 分层思想 只求功能实现 最大的威胁是人 渗透测试: 尝试挫败 ...

  9. 【测试】测试人员部署测试环境是什么意思

    文章目录 前言 一.测试人员部署测试环境是什么意思? 二.简要的说部署测试环境 2.1.大体流程 2.2.java项目 2.3.看语言 2.4.个人看法 总结 前言 提示:以下是本篇文章正文内容,下面 ...

最新文章

  1. PostgreSQL在何处处理 sql查询之四十六
  2. MySQL开启federated引擎实现数据库表映射
  3. .NET Core开发:项目实践
  4. 如何隐晦地表达“滚”?
  5. Qt连接MySQL数据库
  6. 信安精品课:第3章密码学基本理论精讲笔记
  7. linux安装python包_【Linux】非root安装Python3及其包管理
  8. [渝粤教育] 中国地质大学 电力系统保护原理 复习题
  9. SI 9000 及阻抗匹配学习笔记(四)
  10. 制作纯DOS启动U盘
  11. html图片圆点切换,图片轮播带小圆点选择左右切换
  12. openbravo与淘宝对接文档一
  13. WPF 做的时钟表盘 加上天气预报
  14. 插槽和axios的封装
  15. 关于心跳包的实现手法
  16. C语言一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?
  17. QQ群空间登录网址:http://qun.qq.com/air/#
  18. 毛细管电泳分离条件的小波神经网络优化
  19. hp2.5 300g sas服务器硬盘辨真伪,【原装*** HP/惠普 507284-001 300G 10K SAS 2.5寸 6Gb服务器硬盘】价格_厂家 - 中国供应商...
  20. 基于CANoe的UDS Bootloader刷写软件

热门文章

  1. 便于查询增加索引文件 c语言,英汉电子词典小项目总结
  2. 空间注意力机制sam_一种基于注意力机制的神经网络的人体动作识别方法与流程...
  3. 一体式MaaS应用程序首次在以色列启动
  4. Volumetric Cloudscapes(一):理论
  5. 资料员培训建筑八大员培训资料员公路工程施工资料管理的建议
  6. 学Linux操作之前不得不了解的知识!!!
  7. 【Pygame实战】笑到颤抖的小游戏《不要停下来,八音符酱》,边撕边吼边泪奔
  8. Object-C,对象和方法
  9. [Cocos Creator] 定时器
  10. 大白菜U盘启动制作工具v5.1 Win8PE兼容装机版