91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

一、先搞懂:沒(méi)有設(shè)備樹時(shí),Linux有多

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

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

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

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

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

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

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

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

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

簡(jiǎn)單理解:

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

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

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

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

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

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

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

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

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

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

第二步:?jiǎn)?dòng)時(shí)傳遞DTB(引導(dǎo)階段)

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

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

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

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

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

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

wKgZO2kah4OAC_v2AAXcBkTz8b0911.png

咱們把每個(gè)階段掰開揉碎講:

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

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

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

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

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

內(nèi)核會(huì)遍歷自己的平臺(tái)描述庫(kù),找到和compatible最匹配的項(xiàng)——比如找到BeagleBoard的初始化邏輯,就執(zhí)行對(duì)應(yīng)的硬件初始化(如設(shè)置時(shí)鐘、電源)。

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

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

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

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

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

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

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

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

關(guān)鍵函數(shù)是of_platform_populate(),它的邏輯很簡(jiǎn)單:

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

2.對(duì)每個(gè)包含compatible屬性的節(jié)點(diǎn),創(chuàng)建一個(gè)平臺(tái)設(shè)備platform_device);

3.驅(qū)動(dòng)通過(guò)of_match_table(設(shè)備樹匹配表),根據(jù)compatible屬性找到對(duì)應(yīng)的設(shè)備,完成驅(qū)動(dòng)-設(shè)備綁定。

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

?創(chuàng)建一個(gè)名為serial@4806a000的平臺(tái)設(shè)備;

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

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

四、記住3個(gè)關(guān)鍵問(wèn)題,避免踩坑

1.設(shè)備樹能替代驅(qū)動(dòng)嗎?

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

2.compatible屬性寫錯(cuò)了會(huì)怎樣?

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

3.DTB文件放錯(cuò)位置會(huì)怎樣?

內(nèi)核啟動(dòng)失敗!引導(dǎo)程序如果沒(méi)加載DTB,或者內(nèi)核沒(méi)找到DTB,會(huì)報(bào)Cannot find device tree”錯(cuò)誤,然后卡住——因?yàn)閮?nèi)核不知道自己要管理什么硬件。

五、總結(jié):設(shè)備樹的本質(zhì)是硬件標(biāo)準(zhǔn)化描述

其實(shí)設(shè)備樹的核心價(jià)值,就在于標(biāo)準(zhǔn)化

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

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

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

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

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

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

    關(guān)注

    5198

    文章

    20438

    瀏覽量

    333955
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11756

    瀏覽量

    219001
  • 設(shè)備樹
    +關(guān)注

    關(guān)注

    0

    文章

    45

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

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

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

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

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

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

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

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

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

    一張看懂“PCB設(shè)計(jì)考慮的因素”

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    家的士兵,各自說(shuō)著“德語(yǔ)”(PROFINET)和“日語(yǔ)”(CC-LINK)。協(xié)議轉(zhuǎn)換網(wǎng)關(guān),正是這場(chǎng)跨品牌協(xié)作的“翻譯官”,它讓新舊設(shè)備、不同品牌的技術(shù)在統(tǒng)的產(chǎn)線中無(wú)縫對(duì)話,驅(qū)動(dòng)著柔性制造的未來(lái)。? 核心方案:網(wǎng)關(guān)部署與拓?fù)湓O(shè)計(jì)
    的頭像 發(fā)表于 11-26 16:08 ?296次閱讀
    &quot;網(wǎng)關(guān)”成頂流!PROFINET轉(zhuǎn)CC-LINK,汽車產(chǎn)線的“<b class='flag-5'>翻譯官</b>”出圈記