本文介绍瑞芯微RK3576『芯片』平台RT-Linux系统实时性及硬件中断延迟测试,基于触觉智能RK3576开发板Purple Pi OH2演示。
(点击视频,了解触觉智能RK3576开发板Purple Pi OH2)
Linux-RT实时性测试
- 测试环境说明
本次测试是使用Cyclictest延迟检测工具测试Linux系统实时性。Cyclictest 是一款专门用于测试和评估系统实时性(Real-Time)的工具,主要用于测量 Linux 系统中线程调度的延迟(即从线程被唤醒到实际开始执行之间的时间差)。它是 rt-tests 工具集的核心组件之一,广泛应用于实时系统(如 RT-Linux)的性能验证和优化。
- Preempt_RT
可参考网盘文档,使用Cyclictest程序测试系统实时性(Linux内核版本:Kernel 6.1.99)。
空载测试12小时:
负载测试12小时:
负载隔离CPU测试12小时:
测试结果汇总:
- Xenomai RT
空载测试12小时:
负载测试12小时:
负载隔离CPU测试12小时:
Xenomai RT内核测试结果汇总:
结论如下:对比Preempt_RT与Xenomai RT的实时性数据,Preempt RT内核的延时更低。触觉智能作为专业RK方案商,不仅RK3576这款还测试了RK3506等多款『芯片』平台,实际应用推荐使用Preempt RT内核。
Linux-RT硬件中断延迟测试
- 测试基本原理
基于Preempt_RT内核在隔离CPU的情况下,使用一个GPIO引脚(简称GPIO1)作为中断输入,使用另一个GPIO引脚(简称GPIO2)作为响应中断输出,当GPIO1接收到信号触发中断后立即控制GPIO2输出,使用示波器抓取“触发信号”与“响应信号”之间的时间差(简称中断延迟)。
- 测试结果
(1)配置隔离CPU,配置GPIO1作为按键输入(中断信号输入),配置GPIO2作为LED输出(中断响应信号输出)
chosen: chosen {
bootargs = "earlycon=uart8250,mmio32,0x2ad40000 console=ttyFIQ0 root=PARTUUID=614e0000-0000 rw rootwait rcupdate.rcu_expedited=1 rcu_nocbs=all isolcpus=3";
};
--- a/kernel-6.1/arch/arm64/boot/dts/rockchip/ido-evb7608_v1b.dtsi
+++ b/kernel-6.1/arch/arm64/boot/dts/rockchip/ido-evb7608_v1b.dtsi
@@ -213,7 +213,12 @@
status = "okay";
compatible = "gpio-leds";
pinctrl-names = "default";
- pinctrl-0 = <&leds_gpio>;
+ pinctrl-0 = <&leds_gpio &led1_gpio>;
+
+ user_led0: user-led0 {
+ gpios = <&gpio2 RK_PB2 GPIO_ACTIVE_HIGH>;
+ default-state = "off";
+ };
work_led: work {
gpios = <&gpio3 RK_PA4 GPIO_ACTIVE_HIGH>;
@@ -280,6 +285,22 @@
default-state="on";
};
};
+
+ gpio_keys: gpio-keys {
+ status = "okay";
+ compatible = "gpio-keys";
+ autorepeat;
+ pinctrl-names = "default";
+ pinctrl-0 = <&key1_user>;
+
+ user_key1 {
+ label = "user-key1";
+ linux,code = <KEY_PROG2>;
+ gpios = <&gpio4 RK_PC5 GPIO_ACTIVE_HIGH>;
+ debounce-interval = <0>;
+ };
+ };
+
};
@@ -568,6 +589,16 @@
<0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>,
<2 RK_PB4 RK_FUNC_GPIO &pcfg_pull_none>;
};
+
+ led1_gpio: led1-gpio {
+ rockchip,pins = <2 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ keys {
+ key1_user: key1-user {
+ rockchip,pins = <4 RK_PC5 RK_FUNC_GPIO &pcfg_pull_down>;
+ };
};
例程通过创建一个基本的实时线程,在线程内实现打开GPIO1对应的按键input设备并对按键事件进行监听从而触发GPIO2对应的LED的亮灭控制。例程代码参考如下:
完成交叉编译应用程序后,执行测试程序等待接收触发信号,硬件使用示波器捕获触发信号。
红色信号为GPIO1,黄色信号为GPIO2,示波器实测中断延迟为:44us。
更多RT-Linux实时性系统资料,请关注深圳触觉智能公众号,添加官方客服134 2385 6106,提供近80个G的软硬件资料与更多Demo。