系統(tǒng)開發(fā)說明
Linux-RT內(nèi)核與普通Linux內(nèi)核在系統(tǒng)開發(fā)上基本保持一致,具體操作方法請參考《Linux系統(tǒng)開發(fā)手冊》。
其中,使用Linux-RT內(nèi)核進(jìn)行系統(tǒng)開發(fā)僅在Kernel開發(fā)的配置與編譯環(huán)節(jié)存在關(guān)鍵差異,其他開發(fā)流程(如U-Boot開發(fā)、Rootfs開發(fā)等)與普通內(nèi)核完全一致。以下對Linux-RT內(nèi)核的Kernel進(jìn)行說明。
Kernel開發(fā)(Linux-RT)
Kernel配置
執(zhí)行如下命令,進(jìn)入LinuxSDK源碼目錄下的內(nèi)核目錄,打開圖形配置界面。
Host# cd /home/tronlong/DR1/SDK_2025.1/
Host# ./build.sh kernelmenuconfig
圖28
(1)配置RT內(nèi)核
打開圖形配置界面,依次打開"General setup -> Preemption Model(Preemptible Kernel(Low-Latency Desktop))"。
圖 29
圖 30
進(jìn)入如圖所示界面后,選擇"Fully Preemptible Kernel (Real-Time)",接著選擇保存。
備注:我司提供的普通內(nèi)核版本默認(rèn)為"Preemptible Kernel(Low-Latency Desktop)"
圖31
圖32
其他選項(xiàng)的參數(shù)解析如下表所示。

(2)配置Linux-RT內(nèi)核定時器頻率
打開圖形配置界面,依次打開"Kernel Features-> Timer frequency(250 HZ)"。
圖33
圖34
進(jìn)入如圖所示界面后,選擇"1000HZ",接著選擇保存。
備注:普通Linux內(nèi)核需要選擇"250HZ"。
圖35
圖36
配置完成后,將配置選項(xiàng)自動保存到LinuxSDK根目錄下的"linux/arch/arm64/configs/anlogic_dr1m90_defconfig"中,執(zhí)行如下命令,檢查RT內(nèi)核是否配置成功。
Target# grep -nr "PREEMPT_RT" ./linux/arch/arm64/configs/anlogic_dr1m90_defconfig
Target# grep -nr "1000" ./linux/arch/arm64/configs/anlogic_dr1m90_defconfig
圖 37
編譯Kernel
請參考《Linux系統(tǒng)開發(fā)手冊》的Kernel開發(fā)章節(jié)編譯Kernel。
應(yīng)用開發(fā)說明
Linux-RT內(nèi)核與普通Linux內(nèi)核在應(yīng)用開發(fā)上保持一致,具體操作方法請參考《Linux應(yīng)用開發(fā)手冊》。
本章節(jié)說明Linux-RT應(yīng)用開發(fā)組件支持情況并介紹基于Linux-RT內(nèi)核開發(fā)的應(yīng)用案例。
rt_gpio_ctrl案例
案例說明
通過創(chuàng)建一個基本的實(shí)時線程,在線程內(nèi)觸發(fā)LED的電平翻轉(zhuǎn),同時程序統(tǒng)計實(shí)時線程的調(diào)度延時,并通過示波器測出LED電平兩次翻轉(zhuǎn)的時間間隔。由于程序默認(rèn)以最高優(yōu)先級運(yùn)行,為避免CPU資源被程序完全占用導(dǎo)致系統(tǒng)被掛起,因此在程序中增加100us的延時。程序原理大致如下:
(1)在Linux-RT內(nèi)核上創(chuàng)建、使用實(shí)時線程。
(2)實(shí)時線程中,計算出觸發(fā)LED電平翻轉(zhuǎn)的系統(tǒng)調(diào)度延時。
案例測試
執(zhí)行如下命令,查看程序運(yùn)行參數(shù)。
Target# ./rt_gpio_ctrl -h
圖38
參數(shù)解析:
-t:程序運(yùn)行時間,單位s,默認(rèn)為10s;
-d:延遲時間,單位us,默認(rèn)為100us;
-h:打印幫助信息。
將案例bin目錄下的可執(zhí)行文件拷貝至評估板文件系統(tǒng),并執(zhí)行如下命令運(yùn)行測試程序,指定程序以增加100us的時間延時運(yùn)行,再按"Ctrl + C"退出測試,串口終端將打印程序統(tǒng)計的延遲數(shù)據(jù),如下圖所示。
Target# ./rt_gpio_ctrl -t 10 -d 100
圖 39
同時使用示波器捕捉LED兩次電平翻轉(zhuǎn)之間的間隔,即可得到線程調(diào)度的延遲,測試點(diǎn)為R44電阻一端。
圖40
本次測得電平翻轉(zhuǎn)周期為?x = 108us,如下圖所示。由于程序中默認(rèn)增加了100us的時間延時,因此實(shí)際延時應(yīng)為:108us - 100us = 8us,與程序統(tǒng)計打印的Latency results平均值相近。
圖41
執(zhí)行如下命令,指定程序以增加0us的時間延時運(yùn)行,再按"Ctrl + C"退出測試,串口終端將打印程序統(tǒng)計的延遲數(shù)據(jù),如下圖所示。
Target# ./rt_gpio_ctrl -t 10 -d 0
圖 42
同時使用示波器捕捉LED兩次電平翻轉(zhuǎn)之間的間隔,即可得到線程調(diào)度的延遲,測試點(diǎn)為R44電阻一端。本次測得電平翻轉(zhuǎn)周期為?x = 5.3us,如下圖所示。既實(shí)際延時為:5.3us,與程序統(tǒng)計打印的Latency results平均值相近。
圖43
案例編譯
將產(chǎn)品資料“4-軟件資料Demolinux-rt-demosrt_gpio_ctrl”案例源碼拷貝至Ubuntu。進(jìn)入案例源碼目錄,執(zhí)行如下命令,編譯案例生成可執(zhí)行文件。
Host# make CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++
圖44
關(guān)鍵代碼
(1)創(chuàng)建實(shí)時任務(wù),具體操作包括內(nèi)存鎖定、線程堆棧內(nèi)存設(shè)置、調(diào)度策略和優(yōu)先級配置等。
圖45
(2)在線程中打開LED文件節(jié)點(diǎn),并對LED狀態(tài)進(jìn)行翻轉(zhuǎn)。
圖46
(3)統(tǒng)計調(diào)度時間延時情況。
圖47
rt_input案例
案例說明
通過創(chuàng)建一個基本的實(shí)時線程,在線程內(nèi)打開input設(shè)備,并對按鍵事件進(jìn)行監(jiān)聽,然后觸發(fā)LED的電平翻轉(zhuǎn),再通過示波器測量按鍵觸發(fā)到LED電平翻轉(zhuǎn)期間的實(shí)際耗時。程序原理大致如下:
(1)在Linux-RT內(nèi)核上創(chuàng)建、使用實(shí)時線程。
(2)實(shí)時線程中對打開的input設(shè)備節(jié)點(diǎn)進(jìn)行按鍵事件監(jiān)聽,通過判斷監(jiān)聽得到的按鍵事件來觸發(fā)LED的電平翻轉(zhuǎn)。
案例測試
執(zhí)行如下命令,查看用戶輸入按鍵對應(yīng)的事件號。其中USER1(KEY2)對應(yīng)的按鍵事件號為event0。
Target# cat /proc/bus/input/devices
圖48
將案例bin目錄下的可執(zhí)行文件拷貝至評估板文件系統(tǒng),并執(zhí)行如下命令運(yùn)行測試程序。程序運(yùn)行后按下USER1(KEY2)用戶輸入按鍵點(diǎn)亮LED,松開按鍵后LED熄滅,再按"Ctrl + C"退出測試程序。
Target# ./rt_input /dev/input/event0
圖49
同時分別使用示波器探頭1測量LED電路R44電阻一端,使用示波器探頭2測量按鍵USER1(KEY2)引腳1。
圖50
圖51
從按鍵下降沿觸發(fā)的開始(下圖藍(lán)線)到LED上升沿觸發(fā)的完成(下圖黃線)的時間間隔,即為系統(tǒng)實(shí)時捕獲按鍵輸入時間并響應(yīng)觸發(fā)LED電平翻轉(zhuǎn)的時間?x,從圖中可看到?x = 138us。
圖52
備注:在硬件特性上,由于按鍵電壓由低電平上拉到高電平比較緩慢,因此本次測試實(shí)時事件的輸入采用下降沿觸發(fā)方式。
案例編譯
將產(chǎn)品資料“4-軟件資料Demolinux-rt-demosrt_input”案例源碼拷貝至Ubuntu。進(jìn)入案例源碼目錄,執(zhí)行如下命令,編譯案例生成可執(zhí)行文件。
Host# make CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++
圖53
關(guān)鍵代碼
(1)創(chuàng)建實(shí)時任務(wù),具體操作包括內(nèi)存鎖定、線程的堆棧內(nèi)存設(shè)置、調(diào)度策略和優(yōu)先級配置等。
圖54
(2)在線程中打開input設(shè)備節(jié)點(diǎn)并監(jiān)聽按鍵事件,同時觸發(fā)LED電平的翻轉(zhuǎn)。
圖55
-
嵌入式
+關(guān)注
關(guān)注
5209文章
20679瀏覽量
337232 -
Linux
+關(guān)注
關(guān)注
88文章
11821瀏覽量
219592 -
開發(fā)板
+關(guān)注
關(guān)注
26文章
6433瀏覽量
121083 -
GPIO
+關(guān)注
關(guān)注
16文章
1334瀏覽量
56470
發(fā)布評論請先 登錄
基于安路DR1M90 FPSoC的Linux系統(tǒng)全流程開發(fā)指南(4)
RK3562 單板機(jī) Linux-RT 系統(tǒng)開發(fā)指南:內(nèi)核配置、實(shí)時性優(yōu)化與案例詳解
實(shí)測14us,Linux-RT實(shí)時性能及開發(fā)案例分享—基于全志T507-H國產(chǎn)平臺
實(shí)測14us,Linux-RT實(shí)時性能及開發(fā)案例分享—基于全志T507-H國產(chǎn)平臺
米爾國產(chǎn)FPGA SoC芯選擇,安路飛龍DR1M90核心板重磅發(fā)布
Linux-RT特點(diǎn)及簡單應(yīng)用
基于全志A40i開發(fā)板——Linux-RT內(nèi)核應(yīng)用開發(fā)教程(1)
全志A40i開發(fā)板——Linux-RT內(nèi)核應(yīng)用開發(fā)教程(2)
基于全志A40i開發(fā)板——Linux-RT內(nèi)核應(yīng)用開發(fā)教程(3)
創(chuàng)龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—Linux-RT應(yīng)用開發(fā)案例
安路DR1M90評估板:從基礎(chǔ)外設(shè)到通信模塊測試指南
基于安路DR1M90 FPSoC 的Linux 系統(tǒng)全流程開發(fā)指南(1)
基于安路DR1M90 FPSoC 的Linux 系統(tǒng)全流程開發(fā)指南(3)
基于 DR1M90 的 Linux-RT 內(nèi)核開發(fā):從編譯配置到 GPIO / 按鍵應(yīng)用實(shí)現(xiàn)(1)
DR1M90 開源 IgH EtherCAT 主站案例:伺服電機(jī)正反轉(zhuǎn)實(shí)時控制方案
基于DR1M90的Linux-RT內(nèi)核開發(fā):從編譯配置到GPIO/按鍵應(yīng)用實(shí)現(xiàn)(2)
評論