0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于 DR1M90 的 Linux-RT 内核开发:从编译配置到 GPIO / 按键应用实现(1)

Tronlong创龙科技 来源:Tronlong创龙科技 作者:Tronlong创龙科技 2025-12-02 10:38 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前 言

本文档主要介绍Linux-RT实时内核的性能测试方法,以及使用Linux-RT内核进行系统开发和应用开发的使用说明。

开发环境

Windows开发环境:Windows10 64bit

Linux开发环境:VMware16.2.5、Ubuntu22.04.4 64bit

LinuxSDK开发包:LinuxSDK-[版本号](基于SDK_2025.1)

交叉编译工具链:

应用开发:gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu

U-Boot、内核开发:gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu

评估板系统版本:U-Boot-2021.01、Linux-6.1.111、Buildroot-2022.02

备注:本文基于8GByteeMMC、1GByteDDR配置核心板进行演示。

术语表

为便于阅读,下表对文档出现的关键术语进行解释;对于广泛认同释义的术语,在此不做注释。

wKgZPGkuUhuASFa8AAAbvNaqZZE168.png

注意事项

我司默认使用的是Linux内核,同时提供了Linux-RT内核,位于产品资料“4-软件资料LinuxKernelimagelinux-6.1.111-[版本号]-[Git系列号]”目录下。请按照《Linux系统开发手册》替换Kernel镜像章节中的方法替换Linux-RT内核。

Linux-RT介绍

我司提供的Linux-RT内核应用了开源的RT PREEMPT机制进行补丁。PREEMPT_RT补丁的关键是最小化不可抢占的内核代码量,同时最小化必须更改的代码量,以便提供这种附加的可抢占性。Linux-RT内核增加PREEMPT_RT补丁后,增加了系统响应的确定性和实时性,但是代价是CPU性能降低。

Linux-RT内核与普通Linux内核相比,几个主要的相同之处是:

(1)具有相同的开发生态系统,包括相同工具链、文件系统和安装方法,以及相同的POSIX API等。

(2)仍然存在内核空间和用户空间的划分。

(3)Linux应用程序在用户空间中运行。

Linux-RT内核与普通Linux内核在常规编程方式上的几个主要不同之处是:

(1)调度策略。

(2)优先级和内存控制。

(3)基于Linux-RT内核的应用程序使用了调度策略后,系统将根据调度策略对其进行调优。

Linux系统实时性测试

本章节主要介绍使用Cyclictest延迟检测工具测试Linux系统实时性的方法。Cyclictest是rt-tests测试套件下的一个测试工具,也是rt-tests下使用最广泛的测试工具,一般主要用来测试内核的延迟,从而判断内核的实时性。

Cyclictest常用于实时系统的基准测试,是评估实时系统相对性能的最常用工具之一。Cyclictest反复测量并精确统计线程的实际唤醒时间,以提供有关系统的延迟信息。它可测量由硬件、固件和操作系统引起的实时系统的延迟。

为了测量延迟,Cyclictest运行一个非实时主线程(调度类SCHED_OTHER),该线程以定义的实时优先级(调度类SCHED_FIFO)启动定义数量的测量线程。测量线程周期性地被一个到期的计时器(循环报警)所定义的间隔唤醒,随后计算有效唤醒时间,并通过共享内存将其传递给主线程。主线程统计延迟值并打印最小、最大和平均延迟时间。

Linux、Linux-RT实时性对比

本次测试结合Iperf和Cyclictest工具,对比测试基于Linux-RT-6.1.111内核和Linux-6.1.111内核的系统实时性能。此处使用Iperf工具不断触发系统中断,提高中断处理负载,以便更好测试系统实时特性。

在Ubuntu执行如下命令查看IP地址,并以服务器模式启动Iperf测试。

Host# ifconfig

Host# iperf3 -s

wKgZO2kuUiWAf7vAAAGSfWTfGp4837.png图 1

分别使用Linux-RT-6.1.111内核和Linux-6.1.111内核启动评估板进行测试。执行如下命令以客户端模式启动Iperf,并连接至服务器端(Ubuntu系统)。"192.168.13.81"为Ubuntu的IP地址,"-t3600"设置测试时间为3600秒,"&"表示让程序在后台运行。

Target# iperf3 -c 192.168.13.81-d -t3600 > /dev/null 2>&1 &

wKgZO2kuUi6ALhJ9AAAI1mgo_WI303.png图 2

评估板文件系统默认已提供Cyclictest工具,进入评估板文件系统,执行如下命令使用Cyclictest工具测试系统实时性。

Target# cyclictest -t5 -p98 -m -D10m

wKgZPGkuUjeAXGZuAAAyOOKcxdc140.png图 3 Linux-RT-6.1.111内核测试结果

wKgZO2kuUjeADfrXAAAwHIHS23M877.png图 4 Linux-6.1.111内核测试结果

wKgZPGkuUkSAdSTRAAAsCybChdk905.png

对比测试数据,可看到基于Linux-RT-6.1.111内核的系统的延迟更加稳定,平均延迟、最大延迟更低,系统实时性更佳。

Cyclictest命令参数解析可执行"cyclictest --help"查看,如下图所示。

wKgZO2kuUk6ACCkqAAC0l7w9vNk014.png图 5

wKgZO2kuUk6AADjDAAA7Tvwbq5c110.png图 6

Linux-RT性能测试

本次测试分别在CPU空载、满负荷(运行stress压力测试工具)、隔离CPU核心的情况下,对比评估Linux-RT内核的系统实时性。

CPU空载状态

评估板上电启动,进入评估板文件系统,执行如下命令修改内核printk日志等级,避免内核打印信息影响实时测试。

Target# echo 1 > /proc/sys/kernel/printk

wKgZO2kuUy2AIoSCAAAGrpsS3xA053.png图 7

调整内存分配策略为"2",禁用内存过度使用。避免出现OOM(Out-of-Memory) Killer攻击某些进程而产生延迟,影响测试结果。

Target# echo 2> /proc/sys/vm/overcommit_memory

wKgZO2kuU2CAbGDdAAAHNSIe2lw825.png图 8

执行如下命令,基于CPU空载状况下测试系统的实时性。测试指令需运行12小时,请保持评估板长时间稳定工作,测试完成后将生成统计结果no_load_output文件。

Target# cyclictest -m -Sp99 -i1000 -h800 -D12h -q > no_load_output

wKgZO2kuU_mAW_A4AAATPlqHe3U648.png图 9

参数解析:

-m:锁定当前和将来的内存分配;

-S:采用标准SMP测试;

-p:设置线程优先级;

-i:设置线程的基本间隔;

-h:运行后将延迟直方图转储至标准输出,亦可指定要跟踪的最大延时时间(以微秒为单位);

-D:指定测试运行时长,附加m(分钟)、h(小时)、d(天)指定;

-q:运行时不打印相关信息;

CPU满负荷状态

评估板上电启动,进入评估板文件系统执行如下命令,修改内核printk日志等级,避免内核打印信息影响实时测试。

Target# echo 1 > /proc/sys/kernel/printk

wKgZO2kuVACAHE6IAAAGtC6a8bI402.png图 10

调整内存分配策略为"2",禁用内存过度使用。避免出现OOM(Out-of-Memory) Killer攻击某些进程而产生延迟,影响测试结果。

Target# echo 2 > /proc/sys/vm/overcommit_memory

wKgZPGkuVAaAexgqAAAHLu6ng8I080.png图 11

执行如下命令,运行stress压力测试工具,使得CPU处于满负荷状态。

Target# stress-ng --cpu 2 --cpu-method=all --io 2 --vm 2 --vm-bytes 32M --timeout 43200s &

wKgZO2kuVAyAXULTAAAee-bzhbg370.png图 12

参数解析:

--cpu:指定压力测试的进程个数;

--cpu-method:指定CPU压力测试的方式;

--io:指定I/O测试的进程个数;

--vm:指定内存测试的进程个数;

--vm-bytes:指定每个内存测试进程中分配内存的大小;

--timeout:指定测试时长;

使用cyclictest工具测试CPU满负荷状态下的系统实时性能。测试指令需运行12小时,请保持评估板长时间稳定工作,测试完成后将生成统计结果overload_output文件。

Target# cyclictest -m -Sp99 -i1000 -h800 -D12h -q > overload_output

wKgZO2kuVBOAY632AAAg3iyohks906.png图 13

隔离CPU核心状态

本次测试以隔离CPU1核心为例,通过降低系统上所运行的其他进程对隔离CPU1产生的延迟影响,确保CPU1进程的正常运行,进而评估Linux-RT内核的系统实时性。

评估板上电启动后,在U-Boot倒计时结束之前长按"Ctrl + C"进入U-Boot命令行模式,执行如下命令,修改环境变量,隔离CPU1核心。

U-Boot# setenv mmc_boot 'if mmc dev ${devnum}; then devtype=mmc; if test ${devnum} -eq 0; then setenv bootargs '"'"'console=ttyS1,115200n8 earlycon=uart,mmio32,0xf8401000 loglevel=8 root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait isolcpus=1'"'"'; fi; if test ${devnum} -eq 1; then setenv bootargs '"'"'console=ttyS1,115200n8 earlycon=uart,mmio32,0xf8401000 loglevel=8 root=/dev/mmcblk1p2 rw rootfstype=ext4 rootwait isolcpus=1'"'"'; fi; ext4load mmc ${devnum}:2 ${kernel_addr_r} ${bootdir}/${kernel_image}; ext4load mmc ${devnum}:2 ${fdt_addr_r} ${bootdir}/${devicetree_image}; bootm ${kernel_addr_r} - ${fdt_addr_r}; run scan_dev_for_boot_part2; fi'

U-Boot# saveenv

U-Boot# reset

wKgZPGkuVBqADK-EAAAw0r20zm0586.png图 14

如需恢复U-Boot环境变量,在U-Boot命令行模式执行以下命令。

U-Boot# env default -a-f

U-Boot# saveenv

U-Boot# reset

wKgZPGkmlrOAZQkFAAAKhGVVYnk073.png图 15

进入评估板文件系统,执行如下命令,查看环境变量是否设置成功。

Target# cat /proc/cmdline

wKgZO2kuVamAB_hwAAASx8BkVns687.png图 16

执行如下命令,修改内核printk日志等级,避免内核打印信息影响实时测试。

Target# echo 1 > /proc/sys/kernel/printk

wKgZO2kuVACAHE6IAAAGtC6a8bI402.png图 17

调整内存分配策略为"2",禁用内存过度使用。避免出现OOM(Out-of-Memory) Killer攻击某些进程而产生延迟,影响测试结果。

Target# echo 2> /proc/sys/vm/overcommit_memory

wKgZPGkuVAaAexgqAAAHLu6ng8I080.png图 18

执行如下命令,运行stress压力测试工具,使得CPU处于满负荷状态。

Target# stress-ng --cpu 2 --cpu-method=all --io 2 --vm 2 --vm-bytes 32M --timeout 43200s &

wKgZO2kuVAyAXULTAAAee-bzhbg370.png图 19

因CPU1核心被隔离,程序默认不会在CPU1上运行,需使用taskset工具将cyclictest测试程序运行在所有核心上,测试cyclictest在满负荷状态的CPU0和被隔离的CPU1的实时性能。测试指令需运行12小时,请保持评估板长时间稳定工作,测试完成后将生成统计结果iso_overload_output文件。

Target# taskset -c 0-1 cyclictest -m -Sp99 -i1000 -h800 -D12h -q > iso_overload_output

wKgZO2kuVeyAUimyAAAhwuSDRGk441.png图 20

统计结果分析

我司已提供脚本文件get_histogram.sh用于绘制统计结果直方图,位于产品资料“4-软件资料Demolinux-rt-demoscyclictestbin”目录下,请将该脚本文件拷贝至Ubuntu工作目录下。

wKgZPGkuVfSAUlucAAAeyh8NSz8309.png图 21

在Ubuntu系统执行如下命令,安装gnuplot工具。

Host# sudo apt-get install gnuplot

wKgZO2kuVfmASt8aAAIwfQMxAl0640.png图 22

(1)CPU空载状态

请将CPU空载状态下的统计结果no_load_output文件拷贝至Windows工作目录,使用Windows文本工具打开该文件并拖动至文件末尾,可查看Linux系统每个核心CPU0~CPU1的最小延迟(Min Latencies)、平均延迟(Avg Latencies)、最大延迟(Max Latencies)统计结果。

wKgZO2kuVgGAKOdNAAAkhU7SScc160.png图 23

请将CPU空载状态下的统计结果no_load_output文件拷贝至Ubuntu,存放在get_histogram.sh同一目录下。拷贝no_load_output文件为output文件。执行如下命令生成直方图文件plot.png,请将其拷贝至Windows下并打开。

Host# cp no_load_output output

Host# ./get_histogram.sh

wKgZO2kuVgiADQo1AABS0i0OX_M123.png图 24

wKgZPGkuVg-AJgHzAAAaFpP9nAQ274.png图 25

根据测试结果output文件数据以及结合直方图,可得主要数据如下表。本次测试中,CPU1核心Max Latencies值最大,为44us,CPU0核心的Max Latencies值最小,为42us。

备注:测试数据与实际测试环境有关,仅供参考。

wKgZO2kuVheAWzviAAAV7cNzZr0690.png

(2)CPU满负荷状态

参考如上方法,分析CPU满负荷状态下的统计结果如下所示。本次测试中,CPU1核心Max Latencies值最大,为100us,CPU0核心的Max Latencies值最小,为78us。

wKgZO2kuVh6AA2i_AAAcTxF95s0748.png图 26

wKgZO2kuViWAN5fKAAAVS1yTIcg519.png

(3)隔离CPU核心状态

参考如上方法,分析隔离CPU核心状态下的统计结果如下所示。本次测试中,CPU0核心Max Latencies值最大,为42us,隔离CPU1核心的Max Latencies值最小,为28us。

wKgZPGkuViyAFi7fAAAaK0JDVFU672.png

wKgZO2kuVjOAPOnBAAAVBrqe61U657.png

根据CPU空载、CPU满负荷、隔离CPU核心三种状态的测试结果可知:当程序指定至隔离的CPU1核心上运行时,Linux系统延迟最低,可有效提高系统实时性。故推荐对实时性要求较高的程序(功能)指定至隔离的CPU核心运行。

外设使用说明

我司提供的Linux-RT内核与普通Linux内核测试方法一致,请参考《评估板测试手册》进行测试即可。Linux-RT内核支持的外设接口及测试结果汇总如下表所示。

wKgZPGkuVjyAHNtxAAA97Ip85ng284.png

系统使用说明

Linux-RT内核与普通Linux内核在系统使用上保持一致,具体操作方法请参考《Linux系统使用手册》。

​审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11627

    浏览量

    217888
  • 编译
    +关注

    关注

    0

    文章

    687

    浏览量

    34935
  • GPIO
    +关注

    关注

    16

    文章

    1313

    浏览量

    55697
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于安路DR1M90 FPSoC的Linux系统全流程开发指南(4)

    本手册由创龙科技研发,针对安路飞龙 DR1M90,详述 Linux 系统开发流程:LinuxSDK 配置编译、BOOT.bin(FSBL+U
    的头像 发表于 11-30 15:46 1624次阅读
    基于安路<b class='flag-5'>DR1M90</b> FPSoC的<b class='flag-5'>Linux</b>系统全流程<b class='flag-5'>开发</b>指南(4)

    一步步完成安路飞龙 DR1M90 Linux 系统固化:启动卡制作 + eMMC 固化

    本手册由创龙科技研发,针对安路飞龙 DR1M90,详述 Linux 系统启动卡制作(含工具包使用、PV 工具安装等)与 eMMC 固化步骤,说明启动卡和 eMMC 分区结构,提供 eMMC 剩余空间
    的头像 发表于 11-21 10:48 5024次阅读
    一步步完成安路飞龙 <b class='flag-5'>DR1M90</b> <b class='flag-5'>Linux</b> 系统固化:启动卡制作 + eMMC 固化

    实测14us,Linux-RT实时性能及开发案例分享—基于全志T507-H国产平台

    本文带来的是基于全志T507-H(硬件平台:创龙科技TLT507-EVM评估板),Linux-RT内核的硬件GPIO输入和输出实时性测试及应用开发案例的分享。本次演示的
    发表于 04-18 10:21

    实测14us,Linux-RT实时性能及开发案例分享—基于全志T507-H国产平台

    的案例用户手册进行操作,得出如下测试结果。备注:测试数据与实际测试环境有关,仅供参考。测试结果如下表所示: 表1 Linux-RT GPIO输入输出案例测试数据 (1
    发表于 07-25 15:58

    米尔国产FPGA SoC芯选择,安路飞龙DR1M90核心板重磅发布

    接口丰富,开箱即用 配套软件开发资源丰富 MYC-YM90X核心板:工业级品质与紧凑设计 MYC-YM90X集成了DR1M90、DDR、eMMC、QSPI、WDT、Osc、Power
    发表于 01-10 14:32

    基于全志A40i开发板——Linux-RT内核应用开发教程(1

    目录1 Linux-RT内核简介 32 Linux系统实时性测试 33 rt_gpio_ctrl案例 104
    发表于 04-19 15:17

    全志A40i开发板——Linux-RT内核应用开发教程(2)

    本帖最后由 Tronlong创龙科技 于 2022-4-19 15:30 编辑 目录1 Linux-RT内核简介 32 Linux系统实时性测试 33
    发表于 04-19 15:22

    基于全志A40i开发板——Linux-RT内核应用开发教程(3)

    目录1 Linux-RT内核简介 32 Linux系统实时性测试 33 rt_gpio_ctrl案例 104
    发表于 04-19 15:33

    每日推荐 | 第十期盖楼送书活动,全志开发Linux-RT内核应用开发教程

    Verilog HDL知识,本书在介绍数字电路设计的过程中列举了Verilog HDL的很多例程,并假定读者没有任何数字逻辑基础知识。3、基于全志A40i开发板——Linux-RT内核应用开发
    发表于 04-20 10:30

    米尔-安路飞龙DR1M90 -国产FPGA核心板开发

    MYC-YM90X核心板及开发板安路飞龙DR1M90 ,国产FPGA芯选择最新一代FPSOC工业级64位MPU,2xCortex-A35@1GHz集成0.4 TOPS NPU,完整端侧
    发表于 01-15 14:57 3次下载

    创龙科技DR1M90工业评估板的关键优势

    安路科技生态合作伙伴创龙科技正式推出了基于安路科技产品DR1M90工业核心板,共同助力国产FPGA技术的推广和创新应用。
    的头像 发表于 08-18 16:20 994次阅读

    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—Linux-RT应用开发案例

    Linux-RT 性能;还提供 rt_gpio_ctrl(实时线程控制 LED 翻转)、rt_input(实时线程监听按键触发 LED)两个开发
    的头像 发表于 09-25 17:25 537次阅读
    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业<b class='flag-5'>开发</b>板—<b class='flag-5'>Linux-RT</b>应用<b class='flag-5'>开发</b>案例

    安路DR1M90评估板:基础外设到通信模块测试指南

    本手册由创龙科技研发,针对安路飞龙 DR1M90 评估板,详述 Linux 系统下功能测试流程。含系统启动验证,LED、按键、DDR 等基础外设测试,ETH、WiFi、4G、GPS 等通信功能测试
    的头像 发表于 11-20 15:26 484次阅读
    安路<b class='flag-5'>DR1M90</b>评估板:<b class='flag-5'>从</b>基础外设到通信模块测试指南

    基于安路DR1M90 FPSoC 的Linux 系统全流程开发指南(1

    本手册由创龙科技研发,针对安路飞龙 DR1M90,详述 Linux 系统开发流程:LinuxSDK 配置编译、BOOT.bin(FSBL+U
    的头像 发表于 11-25 14:09 194次阅读
    基于安路<b class='flag-5'>DR1M90</b> FPSoC 的<b class='flag-5'>Linux</b> 系统全流程<b class='flag-5'>开发</b>指南(<b class='flag-5'>1</b>)

    基于安路DR1M90 FPSoC 的Linux 系统全流程开发指南(3)

    本手册由创龙科技研发,针对安路飞龙 DR1M90,详述 Linux 系统开发流程:LinuxSDK 配置编译、BOOT.bin(FSBL+U
    的头像 发表于 11-26 17:01 126次阅读
    基于安路<b class='flag-5'>DR1M90</b> FPSoC 的<b class='flag-5'>Linux</b> 系统全流程<b class='flag-5'>开发</b>指南(3)