toradex的个人空间 https://blog.eetop.cn/1539194 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

实时linux部署测试

已有 921 次阅读| 2017-3-9 12:04 |系统分类:硬件设计

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 进行实时系统开发》


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 3

    粉丝
  • 0

    好友
  • 1

    获赞
  • 2

    评论
  • 13923

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-29 23:07 , Processed in 0.013064 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部