《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業界動態 > 設備樹使用簡介

設備樹使用簡介

2019-10-31
來源:致遠電子
關鍵詞: FDT 設備樹 Linux

  摘要:是不是所有的Linux內核都是完美的?畢竟諸多黑客效力于此,當然不是,至少在內核3.x版本之前不是,之前的代碼臃腫,代碼利用率較低,直到設備樹的引入,徹底改善這一情況;

  一、FDT的概念

  系統啟動時,Bootloader開始加載,將內核文件,如zImage讀取到內存中,內核按照我們的代碼,逐一去配置每個寄存器,每個外設,似乎沒有什么問題。但是試想一下,100種ARM芯片,就要寫100個配置文件么?當然,如果你非要這么做,我也無話可說。如果能抽象出一種數據結構,它可以直接抽象出內核需要配置的所有硬件以及硬件屬性,BootLoader預讀取到內存中,在內核啟動以后,可以直接配置,對于用戶而言,配置MCU的外圍時我們直接面對的就只是這個DTS文件,極其方便快捷。FDT準確來講是一種數據結構,使得硬件可以用形如XML的描述語言來描述。

  二、設備樹結構

設備樹使用簡介388.png

  圖一 設備樹結構

  設備樹一般包含以上內容:

  根節點“/”下的model ,這個一般為字符串類型,它描述了廠商以及板子名稱;

  根節點“/”下的compitable,這個一般為字符串類型,用以匹配model選定的開發板對應的代碼;包括后續外圍驅動的匹配均是有這個compitable來完成;

  根節點“/”下的aliases,這個設備節點只能放在根節點目錄,主要用以存放外設的別名,簡單講,"/soc/aips-bus@02000000/spba-bus@02000000/serial@02020000"其實是一個串口,但是開發人員自己看起來并不直觀,我可以在aliases中寫作:serial ="/soc/aips-bus@02000000/spba-bus@02000000/serial@02020000";serial即可代替剛才的串口設備;

  根節點“/”下的chosen:這個并非物理設備節點,而是內核啟動參數的節點,類似于uboot階段的bootargs參數;

  當然,這個節點也可以是子節點,不一定要在根節點下;

  實例:chosen {

  stdout-path = &uart1;

  };

  ?snvs@020b0000:除以上節點,剩下的我一般稱之為物理設備節點(可能不準確),以snvs外設舉例,直接舉例;

  實例:snvs@020b0000{

  conpitable = “fsl,imx6ul-snvs”;

  reg = <0x020b0000 0x4000>;

  interrupts = <0x0 0x4 0x4>;

  };

 ?。?)“@”后面緊跟就是該外設在MCU總線的地址,這個不難理解,可以理解為外設的基地址,外設模型 name@addresss;”

  (2)“compitable”:如上陳述,非常關鍵的屬性,匹配外設驅動,屬性模型 compitable = “[manufacture,[model]]”;

  (3)“reg”:該屬性為外設地址屬性,第一個參數為該節點總線地址,后者為地址長度;

 ?。?)“interrupt”:顧名思義,該外設的中斷,para1表示該中斷是不是SPI中斷(shared peripheral interrupt),注意名詞區分,參數值為1表示為SPI中斷,反之不是SPI中斷;para2是該中斷號;para3表示觸發方式,參數值為1,表示上升沿觸發,為4表示高電平觸發;如果需要低電平以及下降沿觸發,硬件需要加非門;

  三、編譯設備樹與反編譯

  設備樹編譯,我們都知道使用如下命令編譯:

  make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-  dtbs  或者

  make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-  all

  實際上,是dtc這個文件在負責把dts解釋成dtb文件,該文件在內核源碼根目錄 ./scripts/dtc

  編譯命令:

  ./scripts/dtc/dtc –I dts –O dtb /home/gyh/tmp/imx6y2c-256m.dtb  ./arch/arm/boot/dts/imx6y2c-256m.dts

  反編譯命令:

  ./scripts/dtc/dtc -I dtb -O dts -o /home/gyh/tmp/imx6y2c_asm.dts   ./arch/arm/boot/dts/imx6y2c-256m.dtb

  對于Linux命令的使用,可以使用help cmdname 或者man cmdname,對于dtc,非內建命令,man dtc:

  -I <input format>

  Input formats are:

  dts - device tree source text

  dtb - device tree blob

  fs - /proc/device-tree style directory

  -O <output format>

  Output formats are:

  dts - device tree source text

  dtb - device tree blob

  asm - assembler source

  系統提供的dts一般引用dtsi這個母設備樹,所以大量外設都是直接引用dtsi中的,因此很難理解這些字符串是怎樣的匹配驅動程序的,但是一旦將已經生產的dtb文件反編譯,生產的dts文件將更直觀;但是易讀性也更差。這并不矛盾;我選擇,” /”  ,”chosen” ,”aliases”三個節點來對比。

設備樹使用簡介2425.png

  圖二 BSP提供的dts文件

設備樹使用簡介2442.png 

圖三 反編譯的dts文件

  對同一個chosen節點:BSP中dts描述為stdout-path = &uart1;這樣很難想象它是怎樣把該外設定義為標準輸出的,但是如果看反編譯文件可以較好的理解,標準輸出被重定向到某個可以作為輸出的外設地址;

  四、設備樹節點添加與驗證

 ?。?)直接在dts文件中查找,是否已經存在你需要的外設節點;如果有,且該外設支持多從機或者多節點,直接在該節點下面,添加子節點,以GPIO_LED為例。

設備樹使用簡介2657.png

  圖四 GPIO_LEDS節點

  (2)假設,你需要添加一個黃色的LED,那么仿照已經存在的節點,復制一個節點在母節點下,命名為green-led,同時用GPIO3_4為該LED驅動引腳;你希望在arm板上叫他,My_Cute(這個名字不好),那么最后修改如下:

設備樹使用簡介2789.png

  圖五 增加yellow-led節點

  (3)節點添加完成,引用了GPIO3_4,所以你需要確認該MCU引腳已經配置為GPIO功能,這里直接貼出配置代碼:MX6UL_PAD_LCD_RESET__GPIO3_IO04 0x40017059

設備樹使用簡介2909.png

  圖六 引腳配置為GPIO

  該宏定義MX6UL_PAD_LCD_RESET__GPIO3_IO04在./arch/arm/boot/dts/imx6ull-pinfunc.h中;針對同一個引腳的全部復用,均定義了宏,可以直接調用;該dts并未直接包含imx6ull-pinfunc.h,在其他dtsi中已經包含該頭文件;

 ?。?)如果之前已經完全編譯過內核,可以直接編譯dtb,注意不要make menuconfig或者defconfig,否則會覆蓋zImage的配置文件.config;

  make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-  dtbs

 ?。?)編譯完成后,開發板直接進入uboot模式,tftp網絡燒寫dtb,reset重啟生效;

  run updtb

 ?。▊渥ⅲ簎pdtb為組合命令updtb=if tftp ${fdt_file}; then nand erase.part dtb; nand write ${loadaddr} dtb ${filesize}; fi;)

  (6)如果dtb按照我們理解修改是正確的,那么我們將在開發板的/sys/class/leds下面看到我們的My_Cute這個LED節點;結果如下:

設備樹使用簡介3455.png

  圖七 開發板設備截圖

  其實,可以看到/sys/class/leds下面的設備節點都是指向/devices/platfome/leds目錄的連接文件,也就是這里僅僅是這個設備的“快捷方式”,我們也可以進行文件IO操作;

 ?。?)文件IO操作:打開My_Cute節點,可以看到以下接口可以操作,但是我們在添加GPIO_LEDS并沒有添加這些屬性。Brightness, trigger—led亮度以及觸發方式比較常用,那么問題來了,為什么會有這些接口。因為它們繼承了母節點的屬性,所以我們需要找到母節點設備的定義。

設備樹使用簡介3712.png

  圖八 yellow-led的操作接口

  (8)講道理,所有的內核驅動你都可以嘗試在 ./driver/下面去找,針對led類,我們直接進入leds文件夾,發現leds的驅動leds-gpio.c在,在這里就可以理解led的接口為什么是這樣;當然優秀的驅動應該還有一份清晰的文檔,你同樣可也嘗試去源碼根目錄的. /Documentation 中查找leds-gpio的使用文檔;這里也會解釋,我為什么會去開發板的/sys/class/leds下面去查看我增加的My_Cute節點;

設備樹使用簡介3953.png

  圖九 驅動使用文檔

  (9)增加一個驅動或者一個設備節點到設備樹中,你可以先查看內核源碼的/ Documentation目錄,其中包含了幾乎所有驅動的使用說明以及設備樹屬性的解釋,同時也包括大量優秀的內核調試技巧;再去寫節點,也可以先模仿,針對不懂的地方再來看文檔,印象更為深刻。

  五、結語

  設備樹相比于傳統的配置文件,無疑是降低了Linux外設開發與使用的門檻,但是也隱藏了大量的細節,難以了解其底層的驅動原理;對于LINUX內核的了解,我所認識的還不及冰山一角,單希望對你有一點幫助。


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          玖玖玖免费嫩草在线影院一区| 欧美国产成人精品| 一区在线免费| 午夜精品国产精品大乳美女| 亚洲裸体在线观看| 欧美激情一区二区三区全黄| 亚洲人成在线影院| 欧美日本韩国一区二区三区| 久久久精彩视频| 久久精品二区亚洲w码| 国产一区二区三区四区五区美女| 国产精品久久久久aaaa樱花| 国产伦理精品不卡| 中文精品99久久国产香蕉| 欧美性事免费在线观看| 亚洲综合99| 久久久精品午夜少妇| 一区二区日韩欧美| 午夜精品一区二区三区在线播放| 99这里有精品| 欧美区亚洲区| 免费亚洲一区二区| 国产精品一区二区黑丝| 激情婷婷欧美| 国产伦精品一区二区三| 国产精品入口夜色视频大尺度| 一本色道久久综合狠狠躁篇的优点| 亚洲国产精品一区二区久| 一本大道久久精品懂色aⅴ| 亚洲一区观看| 亚洲自拍偷拍色片视频| 亚洲综合精品| 亚洲精品乱码久久久久| 久久精品国语| 极品少妇一区二区三区精品视频| 国产精品xvideos88| 久久久久国色av免费看影院| 99国产精品国产精品毛片| 另类人畜视频在线| 久久精品72免费观看| 国产精品美女久久久免费| 欧美日韩国产片| 欧美成人激情视频| 久久在线免费观看视频| 亚洲制服少妇| 久久久久国产精品厨房| 最新日韩av| 欧美插天视频在线播放| 国产日韩欧美精品| 欧美中文字幕视频在线观看| 欧美激情第4页| 免费在线日韩av| 一本久道久久久| 久久精品夜色噜噜亚洲a∨| 欧美成在线观看| 亚洲免费影视第一页| 欧美中文字幕在线视频| 欧美激情网站在线观看| 欧美激情久久久久久| 可以免费看不卡的av网站| 蜜臀av一级做a爰片久久| 国产在线日韩| 亚洲一级电影| 欧美精品高清视频| 国产在线高清精品| 亚洲福利免费| 国产伊人精品| 久久九九热免费视频| 亚洲中字在线| 欧美成人精品激情在线观看| 欧美精品日韩精品| 亚洲美女电影在线| 在线一区免费观看| 亚洲经典自拍| 欧美**人妖| 猫咪成人在线观看| 亚洲日本激情| 国产精品免费区二区三区观看| 国产午夜精品视频| 久久综合精品国产一区二区三区| 亚洲娇小video精品| 欧美精品在线观看一区二区| 欧美成人免费全部| 午夜日韩激情| 欧美激情视频一区二区三区免费| 欧美一区二区精美| 亚洲韩国一区二区三区| 久久不见久久见免费视频1| 蜜桃av噜噜一区二区三区| 亚洲日本欧美在线| 亚洲国产裸拍裸体视频在线观看乱了| 麻豆国产精品va在线观看不卡| 欧美日本一道本| 久久精品国产99国产精品澳门| 亚洲欧美电影院| 久久精品在线免费观看| 欧美日韩亚洲三区| 国产精品视频专区| 国产自产在线视频一区| 欧美精品在线视频观看| 国产精品一区二区三区成人| 性欧美1819sex性高清| 久久一区二区三区超碰国产精品| 欧美日韩国产色视频| 日韩一级精品视频在线观看| 国产精品国产成人国产三级| 亚洲一区二区在线免费观看| 国产一区二区视频在线观看| 狠狠噜噜久久| 欧美激情亚洲国产| 嫩草伊人久久精品少妇av杨幂| 国内精品久久久久久久影视麻豆| 欧美视频一区二区三区| 亚洲一区二区高清| 久久久91精品国产一区二区三区| 亚洲国产精品一区制服丝袜| 亚洲精品四区| 欧美精品福利视频| 国产精品影视天天线| 欧美激情影音先锋| 日韩一级欧洲| 国产日韩精品视频一区| 国产精品va在线| 国内久久婷婷综合| 亚洲午夜三级在线| 欧美在线观看网址综合| 欧美国产一区视频在线观看| 日韩小视频在线观看专区| 久久久噜噜噜久久中文字免| 久久久国产成人精品| 亚洲一二三四区| 久久一区二区三区四区| 在线亚洲美日韩| 亚洲视频1区| 亚洲自拍高清| 国产精品无码永久免费888| 欧美一区二区三区久久精品茉莉花| 欧美日韩ab| 欧美日本韩国| 亚洲国产日韩欧美在线99| 香蕉乱码成人久久天堂爱免费| 久久国内精品视频| 日韩一区二区福利| 欧美在线视频一区二区三区| 国产亚洲欧美色| 国产欧美精品日韩| 欧美另类变人与禽xxxxx| 欧美连裤袜在线视频| 欧美成人免费全部| 永久久久久久| 久久久久亚洲综合| 欧美电影在线观看完整版| 国内精品模特av私拍在线观看| 欧美激情综合在线| 麻豆精品在线播放| 亚洲国产精品成人综合色在线婷婷| 国外成人在线视频| 一区二区三区蜜桃网| 日韩午夜精品| 亚洲欧美精品在线| 亚洲欧美网站| 欧美国产日本韩| 国产精品欧美精品| 欧美大片免费观看| 国产午夜精品麻豆| 国产精品一区二区三区久久久| 亚洲国产二区| 国产精品国产| 欧美日韩一区二| 国产精品拍天天在线| 欧美日韩一区二区三区视频| 免费在线欧美黄色| 国产欧美短视频| 免费视频一区二区三区在线观看| 欧美精品首页| 国产精品久久久久91| 久久久人成影片一区二区三区观看| 国产欧美 在线欧美| 性色av一区二区三区在线观看| 牛夜精品久久久久久久99黑人| 亚洲欧美一区二区三区久久| 欧美精品在线免费| 欧美日韩亚洲一区在线观看| 欧美激情一区二区三区四区| 欧美一区二区成人| 最新中文字幕亚洲| 欧美69wwwcom| 亚洲日韩欧美视频| 美女999久久久精品视频| 一区二区亚洲欧洲国产日韩| 99天天综合性| 国产精品一区免费观看| 久久久久99精品国产片| 欧美成人一区二区在线| 一本久久青青| 老司机午夜精品视频| 欧美日本一区二区视频在线观看| 国产精品激情偷乱一区二区∴| 久久精品综合| 欧美性色视频在线| 久久综合电影| 久久精品国产欧美亚洲人人爽| 国产精品久久久久一区二区| 国产日韩欧美在线播放不卡| 亚洲精品乱码久久久久久久久| 日韩天堂在线视频| 香蕉视频成人在线观看| 亚洲精品国产精品国产自| 亚洲精品乱码久久久久久蜜桃麻豆| 国产精品久久久一区麻豆最新章节| 国产精品久久久久毛片大屁完整版| 国产精品伦子伦免费视频| 日韩一区二区精品视频| 欧美一区二区三区播放老司机| 国产精品观看| 国产精品久久久久久久久久久久久| 国产精品一区二区久久国产| 国产一区二区三区成人欧美日韩在线观看| 1000精品久久久久久久久| 在线欧美日韩精品| 久久免费视频这里只有精品| 亚洲三级国产| 欧美国产精品日韩| 亚洲国产精品久久91精品| 亚洲综合视频网| 国产精品美女诱惑| 欧美大成色www永久网站婷| 精品福利免费观看| 红桃视频成人| 国产欧美日韩亚洲| 欧美成年人网| 国产日韩亚洲欧美精品| 国产噜噜噜噜噜久久久久久久久| 久久亚洲风情| 国产精品夜色7777狼人| 久久久噜噜噜久久人人看| 亚洲视频在线观看一区| 精品动漫3d一区二区三区免费| 亚洲自拍偷拍视频| 欧美人与性动交cc0o| 9l视频自拍蝌蚪9l视频成人| 99精品福利视频| 久久男人av资源网站| 亚洲精品视频在线| 亚洲区中文字幕| 一区二区三区四区精品| 国产精品久线观看视频| 一区二区三区回区在观看免费视频| 亚洲午夜精品国产| 老司机午夜免费精品视频| 欧美日韩一区二区三| 在线欧美三区| 一区二区三欧美| 国产精品一区毛片| 亚洲国产一区二区视频| 欧美久久久久中文字幕| 久久福利电影| 欧美二区在线播放| 亚洲一区二区视频在线| 欧美大片在线观看一区| 亚洲免费人成在线视频观看| 亚洲三级电影全部在线观看高清| 久久午夜色播影院免费高清| aa日韩免费精品视频一| 欧美一区成人| 欧美一区免费视频| 午夜日韩激情| 欧美日韩精品福利| 伊人久久av导航| 久久久一本精品99久久精品66| 在线观看日产精品| 欧美精品一区二| 国产亚洲欧美在线| 欧美黑人一区二区三区| 美女性感视频久久久| 亚洲欧洲在线一区| av成人免费观看| 狠狠色丁香婷婷综合影院| 久久精品国产免费观看| 国产一区亚洲一区| 亚洲专区欧美专区| 久久精品国产欧美激情| 国产欧美日韩三区| 亚洲国产电影| 欧美午夜免费影院| 伊人色综合久久天天五月婷| 久久在线免费观看| 久久综合导航| 极品尤物av久久免费看| 一区二区亚洲精品| 久久成人18免费观看| 欧美四级电影网站| 欧美午夜激情在线| 女人色偷偷aa久久天堂| 免费国产自线拍一欧美视频| 经典三级久久| 欧美一区二区三区四区高清| 欧美久久九九| 欧美一区二区高清在线观看| 亚洲精品女人| 亚洲精品一区二区三区福利| 亚洲综合激情| 亚洲精品老司机| 国产精品午夜av在线| 亚洲欧美日韩国产综合| 国产精品腿扒开做爽爽爽挤奶网站| 久久久久久久久岛国免费| 欧美成人一区在线| 鲁大师影院一区二区三区| 欧美人成网站| 亚洲精品小视频在线观看| 国产精品乱人伦一区二区| 国产精品久久久久免费a∨大胸| 99精品免费网| 免费观看欧美在线视频的网站| 中文在线一区| 久久综合九色| 亚洲人体1000| 洋洋av久久久久久久一区| 亚洲精品乱码久久久久久久久| 午夜宅男久久久| 国产一区二区三区免费在线观看| 一区二区三区欧美激情| 国产精品v一区二区三区| 亚洲激情成人| 欧美xart系列高清| 国产精品久久久久一区二区| 欧美少妇一区二区|