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

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