哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

Linux設備樹到底是啥?一張圖看懂硬件適配的「翻譯官」

jf_44130326 ? 來源:Linux1024 ? 2026-02-09 17:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

你有沒有想過:同一份Linux內(nèi)核鏡像,為啥能在不同型號的開發(fā)板上跑起來?比如一塊ARM架構(gòu)的開發(fā)板,今天換個顯示屏、明天加個傳感器,內(nèi)核不用重新編譯就能識別新硬件——這背后,設備樹(Devicetree功不可沒。

很多嵌入式工程師剛接觸設備樹時,總被節(jié)點”“屬性”“綁定規(guī)范這些術語繞暈。其實設備樹的本質(zhì)特別簡單:它就是硬件和內(nèi)核之間的翻譯官,把硬件的長相能力寫成標準化的文件,讓內(nèi)核不用硬編碼就能讀懂硬件。

今天咱們用人話+流程圖拆解設備樹,從為什么需要它內(nèi)核怎么用它,一次講透核心邏輯。

一、先搞懂:沒有設備樹時,Linux有多?

在設備樹出現(xiàn)前,Linux適配硬件靠的是硬編碼”——把硬件參數(shù)(比如串口地址、中斷號)直接寫進內(nèi)核代碼里。比如要支持一款新開發(fā)板,工程師得:

1.在內(nèi)核中新增一個板級文件,寫死該板子的所有硬件配置;

2.編譯內(nèi)核時選擇對應板子的配置,生成專屬鏡像;

3.要是換個硬件(比如把串口從UART1換成UART2),就得修改代碼、重新編譯。

這種方式的痛點太明顯了:一款硬件對應一個內(nèi)核鏡像,嵌入式廠商要維護幾十上百個鏡像,成本極高。

而設備樹的出現(xiàn),徹底解決了這個問題:它把硬件描述從內(nèi)核中剝離出來,做成獨立的DTB文件(設備樹二進制文件)。內(nèi)核啟動時讀取DTB,就能動態(tài)識別硬件——從此實現(xiàn)一個內(nèi)核鏡像適配N種硬件

二、設備樹的核心:3層結(jié)構(gòu),像給硬件畫家譜

設備樹的結(jié)構(gòu)特別像一棵硬件家譜,最核心的是3個概念:節(jié)點(Node屬性(Property、路徑(Path。咱們用一個簡單的例子看懂:

/* 設備樹源碼(DTS文件)示例 *// {         //根節(jié)點:代表整個硬件系統(tǒng)  compatible ="ti,omap3-beagleboard","ti,omap3"; //屬性:告訴內(nèi)核這是哪款硬件   chosen {    //子節(jié)點:專門存儲運行時配置    bootargs ="console=ttyS0,115200"; //屬性:內(nèi)核命令行(指定串口控制臺)  };  soc {      //子節(jié)點:代表SoC(系統(tǒng)級芯片)    compatible ="simple-bus"; //屬性:說明這是“簡單內(nèi)存映射總線”       uart0: serial@4806a000{ //子節(jié)點:串口設備(@后是基地址)      compatible ="ti,omap3-uart"; //屬性:告訴內(nèi)核用什么驅(qū)動      reg = <0x4806a0000x1000>;  //屬性:地址范圍(基地址+大?。?/span>      interrupts = <72>;      //屬性:中斷號    };  };};

簡單理解:

?節(jié)點:對應一個硬件模塊(如根節(jié)點=整個系統(tǒng)、uart0 =串口),用節(jié)點名@地址命名(地址可選,用于區(qū)分同類型設備);

?屬性:描述硬件的具體參數(shù),格式是=(值可以是字符串、數(shù)字、二進制),比如compatible設備兼容性標識,reg內(nèi)存/ IO地址

?路徑:像文件路徑一樣定位節(jié)點,比如串口節(jié)點的路徑是/soc/uart0

記住一個關鍵原則:設備樹只描述硬件有什么、參數(shù)是多少,不包含任何驅(qū)動邏輯——驅(qū)動靠匹配設備樹屬性來關聯(lián)硬件。

三、內(nèi)核怎么用設備樹?3步流程+ 1張圖講透

設備樹的生命周期從編譯內(nèi)核使用,分為3個關鍵階段。咱們結(jié)合流程圖,一步步看內(nèi)核是如何通過設備樹識別并控制硬件的。

第一步:設備樹文件的變身(編譯階段)

工程師寫的是DTS文件(設備樹源碼,人類可讀),但內(nèi)核只能識別DTB文件(設備樹二進制,機器可讀)。這個轉(zhuǎn)換靠工具dtcDevice Tree Compiler)完成:

dtc -Idts -O dtb -o my_board.dtbmy_board.dts

最終生成的DTB文件,會和內(nèi)核鏡像一起放在開發(fā)板的啟動分區(qū)(比如boot分區(qū))。

第二步:啟動時傳遞DTB(引導階段)

開發(fā)板上電后,先運行引導程序(如U-Boot,引導程序做兩件關鍵的事:

1.初始化硬件(比如內(nèi)存、串口);

2.DTB文件加載到內(nèi)存的指定地址,然后啟動內(nèi)核,并告訴內(nèi)核“DTB在內(nèi)存的哪里

這一步就像:引導程序把硬件家譜DTB)遞給內(nèi)核,說這是你要管理的硬件,先看看說明書

第三步:內(nèi)核解析DTB,創(chuàng)建設備(內(nèi)核初始化階段)

這是最核心的階段,內(nèi)核通過3個關鍵步驟,把DTB中的硬件描述變成可操作的設備實例。咱們用流程圖+通俗解釋拆解:

wKgZO2kah4OAC_v2AAXcBkTz8b0911.png

咱們把每個階段掰開揉碎講:

階段1:平臺識別——內(nèi)核先搞清楚我跑在哪個板子上

內(nèi)核啟動后,首先要確定自己跑在什么硬件上(比如是BeagleBoard還是樹莓派),這一步靠根節(jié)點的compatible屬性。

比如根節(jié)點的compatible = "ti,omap3-beagleboard", "ti,omap3",這個屬性是從具體到通用的列表:

?第一個值“ti,omap3-beagleboard”:精確匹配“TIomap3系列BeagleBoard開發(fā)板;

?第二個值“ti,omap3”:兼容“TIomap3系列所有板子。

內(nèi)核會遍歷自己的平臺描述庫,找到和compatible最匹配的項——比如找到BeagleBoard的初始化邏輯,就執(zhí)行對應的硬件初始化(如設置時鐘電源)。

階段2:運行時配置——內(nèi)核獲取啟動參數(shù)

設備樹中的/chosen節(jié)點是專門給內(nèi)核傳參數(shù)的通道,最常用的是bootargs屬性(內(nèi)核命令行)。

比如bootargs = "console=ttyS0,115200 loglevel=8",意思是:

?console=ttyS0,115200:把串口0UART0)作為控制臺,波特率115200;

?loglevel=8:顯示所有級別的內(nèi)核日志(方便調(diào)試)。

內(nèi)核會解析這些參數(shù),完成基礎配置——比如初始化串口控制臺,讓開發(fā)者能通過串口看到內(nèi)核啟動日志。

階段3:創(chuàng)建設備——內(nèi)核把硬件描述變成可操作設備

這是設備樹的最終目的:內(nèi)核根據(jù)DTB中的節(jié)點,動態(tài)創(chuàng)建設備實例,再讓驅(qū)動去匹配這些設備。

關鍵函數(shù)是of_platform_populate(),它的邏輯很簡單:

1.從指定節(jié)點(默認是根節(jié)點)開始,遍歷所有子節(jié)點;

2.對每個包含compatible屬性的節(jié)點,創(chuàng)建一個平臺設備platform_device);

3.驅(qū)動通過of_match_table(設備樹匹配表),根據(jù)compatible屬性找到對應的設備,完成驅(qū)動-設備綁定。

舉個例子:串口節(jié)點uart0compatible = "ti,omap3-uart",內(nèi)核會:

?創(chuàng)建一個名為serial@4806a000的平臺設備;

?串口驅(qū)動的of_match_table中,正好有“ti,omap3-uart”這一項,于是驅(qū)動和設備綁定;

?綁定后,驅(qū)動就能通過設備樹中的reg(地址)、interrupts(中斷號),控制串口硬件收發(fā)數(shù)據(jù)。

四、記住3個關鍵問題,避免踩坑

1.設備樹能替代驅(qū)動嗎?

不能!設備樹只描述硬件參數(shù),驅(qū)動才是控制硬件的大腦。比如設備樹告訴內(nèi)核串口在0x4806a000地址,但怎么發(fā)數(shù)據(jù)、收數(shù)據(jù),還得靠串口驅(qū)動實現(xiàn)。

2.compatible屬性寫錯了會怎樣?

驅(qū)動找不到設備!比如把“ti,omap3-uart”寫成“ti,omap4-uart”,串口驅(qū)動的匹配表中沒有這個值,設備就會處于未綁定狀態(tài),無法使用。

3.DTB文件放錯位置會怎樣?

內(nèi)核啟動失敗!引導程序如果沒加載DTB,或者內(nèi)核沒找到DTB,會報Cannot find device tree”錯誤,然后卡住——因為內(nèi)核不知道自己要管理什么硬件。

五、總結(jié):設備樹的本質(zhì)是硬件標準化描述

其實設備樹的核心價值,就在于標準化

?對硬件廠商:按規(guī)范寫DTS,不用改內(nèi)核代碼;

?對內(nèi)核開發(fā)者:按規(guī)范寫驅(qū)動,不用適配每款硬件;

?對嵌入式工程師:換硬件只換DTB,不用重新編譯內(nèi)核。

記住一句話:設備樹是硬件的說明書,驅(qū)動是讀懂說明書并操作硬件的人——兩者配合,才能讓Linux在千變?nèi)f化的硬件上跑起來。

如果看完還是有點暈,建議找一款簡單的開發(fā)板,打開它的DTS文件,對照本文的流程逐行看:根節(jié)點的compatiblechosen節(jié)點的bootargs、外設節(jié)點的reginterrupts——慢慢就會發(fā)現(xiàn),設備樹其實沒那么復雜~

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

    關注

    5208

    文章

    20620

    瀏覽量

    336637
  • Linux
    +關注

    關注

    88

    文章

    11806

    瀏覽量

    219482
  • 設備樹
    +關注

    關注

    0

    文章

    45

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    水表界的“翻譯官”:讓CCLinkIE和Modbus TCP“無障礙聊天”!

    ,耐達訊通信技術CCLinkIE轉(zhuǎn)Modbus TCP網(wǎng)關堪稱“設備和諧大使”。它無需替換舊設備,就能讓新老系統(tǒng)高效協(xié)作,為工程師省下大筆改造費用,還帶來靈活的系統(tǒng)升級方案。當你的車間出現(xiàn)“協(xié)議吵架”時,不妨請這位“翻譯官”來場
    發(fā)表于 07-10 15:43

    一張看懂阿里云網(wǎng)絡產(chǎn)品[二] 專有網(wǎng)絡VPC

    摘要: 一張看懂網(wǎng)絡產(chǎn)品系列文章,讓用戶用最少的時間了解網(wǎng)絡產(chǎn)品,本文章是第二篇 專有網(wǎng)絡VPC一張
    發(fā)表于 01-08 12:34

    一張看懂USB充電協(xié)議

    一張看懂Battery Charging Specification 1.2(BC1.2)USB充電協(xié)議作者:AirCity簡介如果你做過基帶工程師,肯定分析過那些不充電的客退手機。如果你發(fā)現(xiàn)
    發(fā)表于 09-15 08:45

    一張看懂ERP和MES的區(qū)別分析資料下載

    一張看懂ERP和MES的區(qū)別
    發(fā)表于 01-04 15:44 ?14次下載

    一張看懂STM32芯片型號的命名規(guī)則

    一張看懂STM32芯片型號的命名規(guī)則
    發(fā)表于 12-02 16:51 ?55次下載
    <b class='flag-5'>一張</b><b class='flag-5'>圖</b><b class='flag-5'>看懂</b>STM32芯片型號的命名規(guī)則

    一張看懂“PCB設計考慮的因素”

    一張看懂“PCB設計考慮的因素”
    的頭像 發(fā)表于 11-23 18:15 ?2125次閱讀
    <b class='flag-5'>一張</b><b class='flag-5'>圖</b><b class='flag-5'>看懂</b>“PCB設計考慮的因素”

    一張看懂睿創(chuàng)微納2023年年報

    一張看懂睿創(chuàng)微納2023年年報
    的頭像 發(fā)表于 04-23 10:38 ?1225次閱讀
    <b class='flag-5'>一張</b><b class='flag-5'>圖</b><b class='flag-5'>看懂</b>睿創(chuàng)微納2023年年報

    EtherCAT轉(zhuǎn)Profinet網(wǎng)關:紡織業(yè)設備互聯(lián)的“翻譯官

    EtherCAT轉(zhuǎn)Profinet網(wǎng)關不僅是紡織車間設備互聯(lián)的“翻譯官”,更是推動生產(chǎn)模式革新的“加速器”。其價值在于打破協(xié)議壁壘的同時,為紡織業(yè)的精益化、柔性化生產(chǎn)提供了可落地的技術路徑。對于亟待轉(zhuǎn)型升級的紡織企業(yè)而言,這
    的頭像 發(fā)表于 04-28 15:39 ?1902次閱讀
    EtherCAT轉(zhuǎn)Profinet網(wǎng)關:紡織業(yè)<b class='flag-5'>設備</b>互聯(lián)的“<b class='flag-5'>翻譯官</b>”

    光模塊科普:1×9與SFP,如何選擇適合你的“信號翻譯官”?

    在光纖通信網(wǎng)絡中,光模塊如同“信號翻譯官”,負責將電信號與光信號相互轉(zhuǎn)換。
    的頭像 發(fā)表于 05-27 15:27 ?792次閱讀

    CAN收發(fā)器:總線信號的“翻譯官

    在CAN總線通信中,CAN收發(fā)器(Transceiver)扮演著至關重要的角色——它就像位“翻譯官”,負責將微控制器(MCU)的數(shù)字信號轉(zhuǎn)換為總線上的差分信號,同時把總線信號翻譯回MCU能理解
    的頭像 發(fā)表于 06-27 11:34 ?2547次閱讀
    CAN收發(fā)器:總線信號的“<b class='flag-5'>翻譯官</b>”

    工業(yè)網(wǎng)關:連接工業(yè)現(xiàn)場與數(shù)字世界的“翻譯官

    。這時,工業(yè)網(wǎng)關就登場了,它就像個專業(yè)的“翻譯官”,不僅能讓這些設備“開口說話”,還能把它們的數(shù)據(jù)安全、高效地傳送到更遠的地方,甚至云端。那么,工業(yè)網(wǎng)關到底能用在哪些場景上呢?今天咱
    的頭像 發(fā)表于 09-24 14:45 ?755次閱讀
    工業(yè)網(wǎng)關:連接工業(yè)現(xiàn)場與數(shù)字世界的“<b class='flag-5'>翻譯官</b>”

    逆變器是什么?廣州郵科如何用“電力翻譯官”守護通信命脈

    在移動辦公、應急通信和離網(wǎng)供電場景中,總有個“隱形英雄”在默默工作——它能把12V或24V的直流電“翻譯”成220V交流電,讓手機、服務器甚至基站持續(xù)運轉(zhuǎn)。這個設備就是逆變器,而廣州郵科網(wǎng)絡
    的頭像 發(fā)表于 11-06 10:37 ?1333次閱讀
    逆變器是什么?廣州郵科如何用“電力<b class='flag-5'>翻譯官</b>”守護通信命脈

    智能“翻譯官”:MODBUS轉(zhuǎn)PROFIBUS網(wǎng)關,解鎖攪拌站無人裝載新紀元

    智能“翻譯官”:MODBUS轉(zhuǎn)PROFIBUS網(wǎng)關,解鎖攪拌站無人裝載新紀元 在工業(yè)自動化的浪潮中,數(shù)據(jù)協(xié)議的“語言不通”常常成為系統(tǒng)聯(lián)通的絆腳石。在家現(xiàn)代化攪拌站內(nèi),就上演了這樣場精彩的“溝通
    的頭像 發(fā)表于 11-21 14:38 ?325次閱讀
    智能“<b class='flag-5'>翻譯官</b>”:MODBUS轉(zhuǎn)PROFIBUS網(wǎng)關,解鎖攪拌站無人裝載新紀元

    數(shù)據(jù)采集卡:工廠里的“信號翻譯官

    數(shù)據(jù)采集卡:工廠里的“信號翻譯官
    的頭像 發(fā)表于 11-21 16:53 ?718次閱讀
    數(shù)據(jù)采集卡:工廠里的“信號<b class='flag-5'>翻譯官</b>”

    &quot;網(wǎng)關”成頂流!PROFINET轉(zhuǎn)CC-LINK,汽車產(chǎn)線的“翻譯官”出圈記

    家的士兵,各自說著“德語”(PROFINET)和“日語”(CC-LINK)。協(xié)議轉(zhuǎn)換網(wǎng)關,正是這場跨品牌協(xié)作的“翻譯官”,它讓新舊設備、不同品牌的技術在統(tǒng)的產(chǎn)線中無縫對話,驅(qū)動著柔性制造的未來。? 核心方案:網(wǎng)關部署與拓撲設計
    的頭像 發(fā)表于 11-26 16:08 ?539次閱讀
    &quot;網(wǎng)關”成頂流!PROFINET轉(zhuǎn)CC-LINK,汽車產(chǎn)線的“<b class='flag-5'>翻譯官</b>”出圈記
    桦川县| 昌都县| 营山县| 比如县| 巧家县| 北海市| 延津县| 虎林市| 阿克苏市| 喀喇| 楚雄市| 济阳县| 离岛区| 封丘县| 观塘区| 上杭县| 台湾省| 三台县| 南皮县| 昌乐县| 英吉沙县| 鄄城县| 海原县| 闵行区| 旬阳县| 宜兴市| 湖南省| 宁强县| 昌黎县| 淮安市| 齐河县| 六盘水市| 黄大仙区| 徐州市| 许昌市| 浦县| 吴旗县| 石河子市| 佳木斯市| 五莲县| 邵阳县|