chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RT-Thread 新一代驅(qū)動框架 DM 揭秘:從設(shè)備樹到動態(tài)加載,徹底告別硬編碼 | 技術(shù)集結(jié)

RT-Thread官方賬號 ? 2026-04-24 18:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在傳統(tǒng)的 RTOS 驅(qū)動開發(fā)中,硬件資源往往靠硬編碼、設(shè)備與驅(qū)動強(qiáng)耦合,導(dǎo)致移植難、復(fù)用低、維護(hù)成本高。

如今,RT-Thread 推出了新一代DM(Device Manager)驅(qū)動框架,引入設(shè)備樹(Device Tree)、自動匹配與動態(tài) probe 機(jī)制,讓驅(qū)動開發(fā)更加現(xiàn)代化、可擴(kuò)展。

本文以qemu-virt64-aarch64 平臺為例,帶你從零上手DM 框架

設(shè)備樹的三種使用方式

最小系統(tǒng)與多核啟動實戰(zhàn)

與傳統(tǒng)驅(qū)動框架的對比

如果你是嵌入式開發(fā)RT-Thread 愛好者,這篇文章將幫你快速掌握下一代 RT-Thread 驅(qū)動開發(fā)范式。

目錄


簡介


核心特點


兩種驅(qū)動框架對比


DM使用方式(以qemu-virt64-aarch64為例)

1 簡介

RT-Thread 新一代 DM(Device Manager)驅(qū)動框架,是近年來引入的一套現(xiàn)代化設(shè)備驅(qū)動管理模型。

該框架主要面向高性能平臺(MPU / SoC),通過引入類似 Linux 驅(qū)動模型的設(shè)計理念,實現(xiàn):

設(shè)備與驅(qū)動解耦

基于設(shè)備樹(Device Tree)的硬件描述

自動匹配與動態(tài)加載(probe 機(jī)制)

其目標(biāo)是逐步替代或并行于傳統(tǒng)靜態(tài)設(shè)備注冊方式,構(gòu)建更加統(tǒng)一、靈活、可擴(kuò)展的驅(qū)動體系。

2 核心特點

基于設(shè)備樹描述硬件資源

Driver / Device 解耦

自動匹配(compatible)

動態(tài) probe / remove 機(jī)制

更適合復(fù)雜 SoC 平臺

3 兩種驅(qū)動框架對比

2728cd18-3fc5-11f1-ab55-92fbcf53809c.png

4 DM使用方式(以qemu-virt64-aarch64為例)

4.1 準(zhǔn)備工作

獲取最新RT-Thread源碼 本文檔使用commit: 2b58dec87b584aa7ded6e8c736498716f8d29cd0

進(jìn)入BSP 目錄:bsp/qemu-virt64-aarch64

打開menuconfig,開啟 SMART 選項

下載 SMART 專用工具鏈,并設(shè)置RTT_EXEC_PATH與RTT_CC_PREFIX環(huán)境變量

4.2 設(shè)備樹使用方式

在 DM 框架中,設(shè)備樹(Device Tree)是核心輸入,用于描述硬件資源(UART、GIC、VirtIO 等)。

當(dāng)前支持三種方式:

方式一:使用 QEMU 自動生成 DTB

QEMU 的 virt 平臺可以自動生成設(shè)備樹,并通過寄存器傳遞給內(nèi)核。

啟動命令:

qemu-system-aarch64\ -M virt,gic-version=2\ -cpu cortex-a53\ -m128M\ -smp4\ -kernel rtthread.bin\ -nographic

原理:

QEMU 在啟動時動態(tài)構(gòu)建 DTB

將 DTB 地址通過寄存器傳遞

RT-Thread 在 early boot 階段解析該 DTB

方式二:使用外部 DTB 文件

可以自定義 .dts 并編譯為 .dtb,然后傳給 QEMU:

qemu-system-aarch64\ -M virt\ -cpu cortex-a53\ -m128M\ -kernel rtthread.bin\ -dtb virt.dtb\ -nographic

設(shè)備樹編譯方法:

dtc -Idts -O dtb -o virt.dtbvirt.dts

方式三:內(nèi)嵌設(shè)備樹(RT-Thread 內(nèi)置 DTB)

可以在 menuconfig 中配置:

RT_BUILTIN_FDT_PATH="path/to/your.dtb"

系統(tǒng)會通過 .incbin 將 DTB 嵌入到最終鏡像中。

實現(xiàn)原理:

編譯階段將 DTB 二進(jìn)制嵌入 .rodata

啟動時直接使用內(nèi)置 DTB,而不依賴 QEMU 傳參

4.3 自定義設(shè)備樹使用(最小系統(tǒng)示例)

本節(jié)基于一個最小可運行設(shè)備樹(DTS),講解如何在 RT-Thread DM 框架中使用自定義設(shè)備樹。

4.3.1 最小設(shè)備樹示例

/dts-v1/;/ { compatible ="linux,dummy-virt"; #address-cells =<2>; #size-cells =<2>; interrupt-parent = <0x8002>; memory@40000000{ reg = <0x000x400000000x000x8000000>; device_type ="memory"; }; chosen { stdout-path ="/pl011@9000000"; }; cpus { #size-cells =<0x00>; #address-cells =<0x01>; cpu@0{ reg = <0x00>; compatible ="arm,cortex-a53"; device_type ="cpu"; }; }; intc@8000000{ phandle = <0x8002>; reg = <0x000x80000000x000x100000x000x80100000x000x10000>; compatible ="arm,cortex-a15-gic"; ranges; #size-cells =<0x02>; #address-cells =<0x02>; interrupt-controller; #interrupt-cells =<0x03>; }; timer { interrupts = <0x010x0d0x1040x010x0e0x1040x010x0b0x1040x010x0a0x104>; always-on; compatible ="arm,armv8-timer\0arm,armv7-timer"; }; apb-pclk { phandle = <0x8000>; clock-output-names ="clk24mhz"; clock-frequency = <0x16e3600>; #clock-cells =<0x00>; compatible ="fixed-clock"; }; pl011@9000000{ clock-names ="uartclk\0apb_pclk"; clocks = <0x80000x8000>; interrupts = <0x000x010x04>; reg = <0x000x90000000x000x1000>; compatible ="arm,pl011\0arm,primecell"; };};

在上述設(shè)備樹中只包含以下內(nèi)容:

273d422a-3fc5-11f1-ab55-92fbcf53809c.png

使用下述命令將dts編譯為dtb,交由rt-thread去解析處理

dtc -Idts -O dtb -o qemu-virt.dtb qemu-virt.dts

使用如下命令啟動QEMU:

qemu-system-aarch64\ -machine virt,gic-version=2\ -cpu cortex-a53\ -smp1\ -m128M\ -kernel rtthread.elf\ -dtb qemu-virt.dtb\ -nographic

可以看到系統(tǒng)啟動成功LOG:

[I/rtdm.ofw] Booting RT-Thread on physical CPU 0x0[I/rtdm.ofw] Machine model: linux,dummy-virt[I/rtdm.ofw] Memory node(0) ranges: 0x0000000040000000 - 0x0000000048000000[I/mm.memblock] System memory:[I/mm.memblock] [0x0000000040000000, 0x0000000048000000][I/mm.memblock] Reserved memory:[I/mm.memblock] [0x0000000040080000, 0x00000000401ef000][I/mm.memblock] [0x00000000401ef000, 0x00000000441ef000][I/mm.memblock] [0x00000000441ef000, 0x00000000443ef000][I/mm.memblock] [0x00000000443ef000, 0x00000000443f5000][I/mm.memblock] physical memory region [0x0000000040000000-0x0000000040080000] installed to system page[I/mm.memblock] physical memory region [0x00000000443f5000-0x0000000048000000] installed to system page[I/mm.memblock] 63 MB memory installed to system page[I/osi.psci] Using PSCI v1.1 Function IDs[I/rtdm.ofw] Console: uart0()\ | /- RT - Thread Smart Operating System/ | \ 5.3.0 build Mar 19 2026 08102006 - 2024 Copyright by RT-Thread team[I/drivers.serial] Using /dev/ttyS0 as default console[E/DFS.fs] mount point(/proc) already mounted![I/rtdm.mnt] File system initializationdonehello rt-threadmsh />msh />msh /

4.3.2 設(shè)備樹多核啟動示例

在之前menuconfig中可以看到,當(dāng)前系統(tǒng)是支持 SMP的,并且qemu-virt64-aarch64默認(rèn)配置#define RT_CPUS_NR 4,這里啟動兩個CPU作為演示

那么我們需要額外配置一下設(shè)備樹,首先配置CPUS節(jié)點

cpus { #address-cells = <1>; #size-cells = <0>; cpu@0{ reg = <0>; enable-method= "psci"; compatible ="arm,cortex-a53"; device_type ="cpu"; }; cpu@1{ reg = <1>; enable-method= "psci"; compatible ="arm,cortex-a53"; device_type ="cpu"; };};

在這個CPU配置中,CPU多核啟動需要通過調(diào)用 PSCI來完成,所以設(shè)備樹中需要加入PSCI的節(jié)點,如下:

psci { migrate = <0xc4000005>; cpu_on = <0xc4000003>; cpu_off = <0x84000002>; cpu_suspend = <0xc4000001>; method= "hvc"; compatible ="arm,psci-1.0\0arm,psci-0.2\0arm,psci";};

使用下述命令將dts編譯為dtb,交由rt-thread去解析處理

dtc -Idts -O dtb -o qemu-virt.dtb qemu-virt.dts

使用如下命令啟動QEMU:

qemu-system-aarch64\ -machine virt,gic-version=2\ -cpu cortex-a53\ -smp1\ -m128M\ -kernel rtthread.elf\ -dtb qemu-virt.dtb\ -nographic

可以看到系統(tǒng)啟動成功LOG:

[I/rtdm.ofw] Booting RT-Thread on physical CPU 0x0[I/rtdm.ofw] Machine model: linux,dummy-virt[I/rtdm.ofw] Memory node(0) ranges: 0x0000000040000000 - 0x0000000048000000[I/mm.memblock] System memory:[I/mm.memblock] [0x0000000040000000, 0x0000000048000000][I/mm.memblock] Reserved memory:[I/mm.memblock] [0x0000000040080000, 0x00000000401ef000][I/mm.memblock] [0x00000000401ef000, 0x00000000441ef000][I/mm.memblock] [0x00000000441ef000, 0x00000000443ef000][I/mm.memblock] [0x00000000443ef000, 0x00000000443f5000][I/mm.memblock] physical memory region [0x0000000040000000-0x0000000040080000] installed to system page[I/mm.memblock] physical memory region [0x00000000443f5000-0x0000000048000000] installed to system page[I/mm.memblock] 63 MB memory installed to system page[I/osi.psci] Using PSCI v1.1 Function IDs[I/rtdm.ofw] Console: uart0()\ | /- RT - Thread Smart Operating System/ | \ 5.3.0 build Mar 20 2026 03142006 - 2024 Copyright by RT-Thread team[I/drivers.serial] Using /dev/ttyS0 as default console[E/DFS.fs] mount point(/proc) already mounted![I/rtdm.mnt] File system initializationdonehello rt-threadmsh />[I/cpu.aa64] Call cpu 1 on successmsh />msh />msh />

注:在之前所提到的,系統(tǒng)啟動時是根據(jù)設(shè)備樹來決定系統(tǒng)配置的,所以,即使我們定義了 #define RT_CPUS_NR 4 也還是啟動了2個CPU

如果將QEMU啟動時的參數(shù) -smp 修改的比設(shè)備樹中定義的多,或?qū)?RT_CPUS_NR 修改的比設(shè)備樹中定義的少,或?qū)⑾到y(tǒng)的SMP關(guān)掉會發(fā)生什么,這里建議上手驗證一下


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • RTOS
    +關(guān)注

    關(guān)注

    25

    文章

    870

    瀏覽量

    123213
  • 驅(qū)動開發(fā)
    +關(guān)注

    關(guān)注

    0

    文章

    142

    瀏覽量

    12718
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1639

    瀏覽量

    45207
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    01教你寫RT-Thread之新建工程

    仿真,然后我們再開始步地教大家把 RT-Thread 內(nèi)核 0 1 寫出來,讓大家徹底
    發(fā)表于 11-18 14:17 ?2455次閱讀

    基于RT-Thread的RoboMaster電控框架設(shè)計

    由于 RT-Thread 穩(wěn)定高效的內(nèi)核,豐富的文檔教程,積極活躍的社區(qū)氛圍,以及設(shè)備驅(qū)動框架、Kconfig、Scons、日志系統(tǒng)、海量的軟件包……很難不選擇
    發(fā)表于 09-06 15:21 ?1658次閱讀

    基于RT-Thread的簡單物聯(lián)網(wǎng)溫控箱 | 技術(shù)集結(jié)

    接入網(wǎng)絡(luò),配套了功能完善的Web可視化監(jiān)控和調(diào)參Dashboard,實現(xiàn)了完整的物聯(lián)網(wǎng)閉環(huán)。整個項目充分利用了RT-Thread多線程、設(shè)備驅(qū)動框架和網(wǎng)絡(luò)組件的能力
    的頭像 發(fā)表于 12-26 18:18 ?7434次閱讀
    基于<b class='flag-5'>RT-Thread</b>的簡單物聯(lián)網(wǎng)溫控箱 | <b class='flag-5'>技術(shù)</b><b class='flag-5'>集結(jié)</b>

    RT-Thread Vector軟件包:嵌入式開發(fā)的動態(tài)數(shù)組容器 | 技術(shù)集結(jié)

    RT-Thread Vector軟件包:嵌入式開發(fā)的動態(tài)數(shù)組容器 | 技術(shù)集結(jié)
    的頭像 發(fā)表于 01-25 09:33 ?5642次閱讀
    <b class='flag-5'>RT-Thread</b> Vector軟件包:嵌入式開發(fā)的<b class='flag-5'>動態(tài)</b>數(shù)組容器 | <b class='flag-5'>技術(shù)</b><b class='flag-5'>集結(jié)</b>

    01,教你徹底學(xué)透RT-Thread

    BSP 中使用的資源,并且可以讓開發(fā)者對資源的使用情況目了然。RT-Thread應(yīng)用筆記(設(shè)備驅(qū)動類)配套資料含源碼:資料為RT-Thread
    發(fā)表于 04-16 16:18

    RT-Thread全球技術(shù)大會:RT-Thread上的單元測試框架與運行測試用例

    RT-Thread全球技術(shù)大會:RT-Thread上的單元測試框架與運行測試用例 ? ? ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 16:21 ?2433次閱讀
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術(shù)</b>大會:<b class='flag-5'>RT-Thread</b>上的單元測試<b class='flag-5'>框架</b>與運行測試用例

    RT-Thread設(shè)備模型框架及創(chuàng)建注冊設(shè)備的實現(xiàn)

    RT-Thread設(shè)備模型框架及創(chuàng)建注冊設(shè)備的實現(xiàn)方式介紹如下:
    的頭像 發(fā)表于 05-28 10:38 ?3369次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>設(shè)備</b>模型<b class='flag-5'>框架</b>及創(chuàng)建注冊<b class='flag-5'>設(shè)備</b>的實現(xiàn)

    RT-Thread全球技術(shù)大會:RNDIS設(shè)備介紹及應(yīng)用

    RT-Thread全球技術(shù)大會上,以RNDIS設(shè)備驅(qū)動框架為主題,首先介紹了RNDIS設(shè)備介紹及
    的頭像 發(fā)表于 05-28 14:36 ?2994次閱讀
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術(shù)</b>大會:RNDIS<b class='flag-5'>設(shè)備</b>介紹及應(yīng)用

    RT-Thread全球技術(shù)大會:RNDIS通信協(xié)議原理及主機(jī)驅(qū)動框架

    RT-Thread全球技術(shù)大會直播上,開發(fā)者詳細(xì)介紹了RNDIS通信協(xié)議的原理及主機(jī)驅(qū)動框架,具體資料如下圖:
    的頭像 發(fā)表于 05-28 14:43 ?3630次閱讀
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術(shù)</b>大會:RNDIS通信協(xié)議原理及主機(jī)<b class='flag-5'>驅(qū)動</b><b class='flag-5'>框架</b>

    RT-Thread文檔_utest 測試框架

    RT-Thread文檔_utest 測試框架
    發(fā)表于 02-22 18:43 ?2次下載
    <b class='flag-5'>RT-Thread</b>文檔_utest 測試<b class='flag-5'>框架</b>

    淺析RT-Thread設(shè)備驅(qū)動框架

    RT-Thread 設(shè)備框架屬于組件和服務(wù)層,是基于 RT-Thread 內(nèi)核之上的上層軟件。設(shè)備框架
    的頭像 發(fā)表于 08-07 15:39 ?4258次閱讀

    基于 RT-Thread 的 RoboMaster 電控框架

    由于 RT-Thread 穩(wěn)定高效的內(nèi)核,豐富的文檔教程,積極活躍的社區(qū)氛圍,以及設(shè)備驅(qū)動框架、Kconfig、Scons、日志系統(tǒng)、海量的軟件包……很難不選擇
    的頭像 發(fā)表于 09-19 19:55 ?2665次閱讀

    基于RT-Thread的RoboMaster電控框架(二)

    由于 RT-Thread 穩(wěn)定高效的內(nèi)核,豐富的文檔教程,積極活躍的社區(qū)氛圍,以及設(shè)備驅(qū)動框架、Kconfig、Scons、日志系統(tǒng)、海量的軟件包
    的頭像 發(fā)表于 09-20 15:16 ?2008次閱讀

    RT-Thread設(shè)備驅(qū)動開發(fā)指南》基礎(chǔ)篇--以先楫bsp的hwtimer設(shè)備為例

    、概述(RT-Thread設(shè)備驅(qū)動RT-Thread
    的頭像 發(fā)表于 02-24 08:16 ?3631次閱讀
    《<b class='flag-5'>RT-Thread</b><b class='flag-5'>設(shè)備</b><b class='flag-5'>驅(qū)動</b>開發(fā)指南》基礎(chǔ)篇--以先楫bsp的hwtimer<b class='flag-5'>設(shè)備</b>為例

    RT-Thread設(shè)備的適配方法 | 技術(shù)集結(jié)

    本文基于RT-Thread現(xiàn)有的DM設(shè)備模型)框架,以Rock2F開發(fā)板為例,系統(tǒng)梳理了RK3528SoC的快速移植流程,涵蓋了CLK、Pinctrl、ADC、NVMEM、Therm
    的頭像 發(fā)表于 04-04 18:05 ?3135次閱讀
    <b class='flag-5'>RT-Thread</b> 中<b class='flag-5'>設(shè)備</b><b class='flag-5'>樹</b>的適配方法 | <b class='flag-5'>技術(shù)</b><b class='flag-5'>集結(jié)</b>