一起游 手游攻略 手游评测 基于DR1M90的Linux-RT内核开发:从编译配置到GPIO/按键应用实现(2)

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

时间: 来源:互联网 浏览:0

系统开发说明

Linux-RT内核在系统开发方面与普通Linux内核基本一致。具体操作方法参见《Linux系统开发手册》。

其中,使用Linux-RT内核进行系统开发仅在Kernel开发的配置和编译上有关键的区别。其他开发流程(如U-Boot开发、Rootfs开发等)与普通内核完全一致。下面介绍Linux-RT内核的Kernel。

Kernel开发(Linux-RT)

Kernel配置

执行以下命令进入LinuxSDK源码目录下的kernel目录,打开图形配置界面。

Host#cd /home/tronlong/DR1/SDK_2025.1/

Host#./build.sh kernelmenuconfig

wKgZPGkn_QqAKnw4AAD7RYcS7ic809.png图28

(1)配置RT内核

打开图形配置界面,依次打开“常规设置-抢占模型(Preemptible Kernel(Low-Latency Desktop))”。

wKgZO2kyUUCAMuRpAAFJB6Y4xdc607.png图29

wKgZO2kyUUCANtuqAAHv4MsTWec634.png图30

进入如图所示界面后,选择“Fully Preemptible Kernel (Real-Time)”,然后选择保存。

注:我司提供的通用内核版本默认为“抢占式内核(低延迟桌面)”

wKgZPGkyUVKAFNlXAACgwsFqsdQ845.png图31

wKgZO2kyUVKAahXAAAHshssVH2g006.png图32

其他选项的参数分析如下表所示。

wKgZPGkyUWyAQ3R5AAAg6QUtATc387.png

(2)配置Linux-RT内核定时器频率

打开图形配置界面,依次打开“内核功能-定时器频率(250HZ)”。

wKgZO2kyUXaAW_mFAAFItcZIATA485.png图33

wKgZO2kyUXaAYIQzAAIbLr7JqQM843.png图34

进入如图所示界面后,选择“1000HZ”,然后选择保存。

注意:普通Linux内核需要选择“250HZ”。

wKgZO2kyUYmAIFcBAAB7cBvK3ew127.png图35

wKgZPGkyUYmAclZ5AAIZmLKHObs383.png图36

配置完成后,配置选项会自动保存到LinuxSDK根目录下的“linux/arch/arm64/configs/anlogic_dr1m90_defconfig”中。执行以下命令检查RT内核是否配置成功。

Target# grep -nr 'PREEMPT_RT' ./linux/arch/arm64/configs/anlogic_dr1m90_defconfig

Target# grep -nr '1000' ./linux/arch/arm64/configs/anlogic_dr1m90_defconfig

wKgZPGkyUZuABD4aAACA4NR2_ns009.png图37

编译Kernel

请参考《Linux系统开发手册》的内核开发章节来编译内核。

应用开发说明

Linux-RT内核在应用开发方面与普通Linux内核一致。具体操作方法参见《Linux应用开发手册》。

本章讲解Linux-RT应用开发组件的支持,并介绍基于Linux-RT内核开发的应用案例。

rt_gpio_ctrl案例

案例说明

通过创建基本实时线程,在线程内触发LED 电平翻转。同时,程序统计实时线程的调度延迟,并通过示波器测量两次LED电平翻转的时间间隔。由于程序默认以最高优先级运行,为了防止CPU资源被程序完全占用而导致系统挂起,给程序添加了100us的延时。程序原理大致如下:

(1)在Linux-RT内核上创建并使用实时线程。

(2) 在实时线程中,计算触发LED电平翻转的系统调度延迟。

案例测试

执行以下命令查看程序运行参数。

Target# ./rt_gpio_ctrl -h

wKgZO2kyUaSAM3FEAAAVRVVyhKk738.png图38

参数解析:-t:程序运行时间,单位s,默认10s;

-d:延迟时间,单位us,默认100us;

-h:打印帮助信息。

将case bin目录下的可执行文件复制到评估板文件系统中,执行以下命令运行测试程序。指定程序延时100us运行,然后按“Ctrl+C”退出测试。串口终端会打印程序统计的延时数据,如下图所示。

Target# ./rt_gpio_ctrl -t 10 -d 100

wKgZPGkyUayASV1YAAAjppQX4FU992.png图39

同时用示波器捕捉LED两次电平翻转的时间间隔,得到线程调度的延迟。测试点为R44电阻的一端。

wKgZO2kyUbOABA58AADA9f0C1ZA977.png图40

本次测得的电平翻转周期为x=108us,如下图所示。由于程序默认添加了100us的时间延迟,所以实际延迟应该是:108us - 100us=8us,与程序统计打印的Latency结果的平均值类似。

wKgZPGkyUbuAQOUSAABe-bQOlhI710.png图41

执行以下命令,指定要运行的程序,延时0us,然后按“Ctrl + C”退出测试。串口终端会打印节目统计的延时数据,如下图所示。

Target# ./rt_gpio_ctrl -t 10 -d 0

wKgZO2kyUcSARRZuAAAjXwtOsyk493.png图42

同时用示波器捕捉LED两次电平翻转的时间间隔,得到线程调度的延迟。测试点为R44电阻的一端。本次测得的电平翻转周期为x=5.3us,如下图所示。实际延迟为:5.3us,与程序统计打印的Latency结果平均值相近。

wKgZPGkyUcyAIcPvAABg_yqS_Fs502.png图43

案例编译

将产品信息“4-软件信息Demolinux-rt-demosrt_gpio_ctrl”案例的源代码复制到Ubuntu。进入案例源码目录,执行以下命令,编译案例并生成可执行文件。

Host#使CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++

wKgZO2kyUdOAB-mEAACFA-bPCdU806.png图44

关键代码

(1)创建实时任务,具体操作包括内存锁定、线程栈内存设置、调度策略和优先级配置等。

wKgZPGkyUdqAVawxAADz9L8aoic413.png图45

(2)在线程中打开LED文件节点,翻转LED状态。

wKgZO2kyUeOALv0jAACkoKqnW2M846.png图46

(3)调度时延统计。

wKgZO2kyUeyAY51mAAB4t2R4ouE427.png图47

rt_input案例

案例说明

通过创建一个基本的实时线程,在线程中打开输入设备,监听按键事件,然后触发LED电平翻转,然后用示波器测量按键触发到LED电平翻转之间的实际时间。程序原理大致如下:

(1)在Linux-RT内核上创建并使用实时线程。

(2)在实时线程中监听打开的输入设备节点的按键事件,通过判断监听到的按键事件来触发LED的电平翻转。

案例测试

执行以下命令查看用户输入按键对应的事件号。 USER1(KEY2)对应的按键事件号为event0。

Target# 猫/proc/总线/输入/设备

wKgZO2kyUfSAc9w7AAAa_AB5wkg250.png图48

将case bin目录下的可执行文件复制到评估板文件系统中,执行以下命令运行测试程序。程序运行后,按USER1(KEY2)用户输入按钮,LED点亮。松开按钮后,LED 熄灭,然后按“Ctrl + C”退出测试程序。

Target# ./rt_input /dev/input/event0

wKgZPGkyUl6ALIZLAAAb3IdAg6Y514.png图49

同时用示波器探头1测量LED电路的R44电阻一端,用示波器探头2测量按键USER1(KEY2)的1脚。

wKgZO2kyUbOABA58AADA9f0C1ZA977.png图50

wKgZPGkyUmiAWg5GAABZxaqxz9c572.png图51

从按键下降沿触发开始(下图蓝线)到LED上升沿触发完成(下图黄线)的时间间隔就是系统实时捕捉按键输入时间并响应触发LED电平翻转的时间x。从图中可以看出x=138us。

wKgZPGkyUoOAZvmpAABehSrOPmA305.png图52

注:从硬件特性来看,由于按键电压从低电平拉升到高电平的速度比较慢,因此本次测试中实时事件的输入采用下降沿触发方式。

案例编译

将产品信息“4-软件信息Demolinux-rt-demosrt_input”案例的源代码复制到Ubuntu。进入案例源码目录,执行以下命令,编译案例并生成可执行文件。

Host#使CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++

wKgZPGkyUoqARTsjAAB93YDsBBw645.png图53

关键代码

(1)创建实时任务,具体操作包括内存锁定、线程栈内存设置、调度策略和优先级配置等。

wKgZO2kyUpKAaIzjAADsmnFtI0Q426.png图54

(2)在线程中打开输入设备节点,监听按键事件,同时触发LED电平的翻转。

wKgZO2kyUpuAZO1DAADD70mre5s469.png图55

标题:基于DR1M90的Linux-RT内核开发:从编译配置到GPIO/按键应用实现(2)
链接:https://yqqlyw.com/news/sypc/62620.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
  • 基于易灵思eMMC IP的Linux系统加载
  • 基于ETAS嵌入式AI工具链将机器学习
  • 绯红之境兑换码最新2021 礼包兑换码大全

    绯红之境兑换码最新2021 礼包兑换码大全[多图],绯红之境兑换码怎么领取?绯红之境兑换码有哪些?绯红之境在今日

    2025-12-27
    三国群英传7霸王再临攻略 霸王再临攻略技巧开启方法

    三国群英传7霸王再临攻略 霸王再临攻略技巧开启方法[多图],三国群英传7霸王再临怎么玩?三国群英传7霸王再临

    2025-12-27
    妄想山海怎么加好友 加好友方法大全

    妄想山海怎么加好友 加好友方法大全[多图],妄想山海添加好友功能在哪里?妄想山海添加好友的方法是什么?好友添

    2025-12-27
    江南百景图又见桃花村钓鱼位置在哪?又见桃花村钓鱼攻略

    江南百景图又见桃花村钓鱼位置在哪?又见桃花村钓鱼攻略[多图],江南百景图又见桃花村钓鱼怎么钓?又见桃花村钓

    2025-12-27