ARM Linux 設備樹(1)

設備樹的起源

在過去的arm linux中,arch/arm/plat-xxx中mach-xxx中充滿大量垃圾代碼,多是描述板級細節的信息,在linus 一聲怒喝之後,設備樹衍生而出。

設備樹的組成和結構

  • 描述設備硬件信息的文本
  • 編譯該文本的工具
  • bootloader需要支持將編譯後的設備樹傳遞給linux內核

DTS文件

  • ASCII文本格式的設備樹描述
  • 一般一個。dts文件對應一個ARM設備
  • 通常放在arch/arm/boot/dts目錄中
  • 現大部分主控芯片都支持設備樹
  • 內核爲了簡化,對於設備共同的部分提煉爲。dtsi文件(類似c的頭文件)
  • 文件。dts的基本元素爲節點和屬性

DTC

  • dtc是將dts編譯爲dtb的工具
  • 源碼位於scripts/dtc目錄中,在內核使能了設備樹的情況下,編譯內核時主機工具dtc會被編譯出來
  • scripts/dtc/Makefile中的hostprogs-y:=dtc
  • dtc也可以在ubuntu中單獨安裝

    sudo apt-get install device-tree-compiler
    
  • 在arch/arm/boot/dts/Makefile中描述了當某個soc被選中後,哪些dtb文件會被編譯出來
  • dtc除了可以編譯dts文件生成dtb文件,還可以反彙編dtb文件爲dts文件:

    dtc -I dtb -O dts -o xxx.dts xxxx.dtb
    

dtb

  • 編譯後生成的二進制格式的設備樹文件
  • 由linux內核解析
  • 內核也支持dtb和zImage綁定在一起做成一個映像文件,內核編譯時使能CONFIG_ARM_APPENDED_DTB這個選項,以支持

binding

  • 內核documentation/device/bindings目錄下txt文件描述節點和屬性具體如何來表述硬件信息。
  • 主要內容包括:
    • 關於該模塊的最基本的描述
    • 必需屬性的描述
    • 可選屬性的描述
    • 一個實例
  • scripts/checkpatch.pl會運行一個檢查,對有人在設備樹中添加了compatible字符串,二沒添加相應的文檔進行解釋,會報出警告

bootloader

uboot設備從1.1.3開始支持設備樹,爲了使能設備樹,需要在編譯uboot的時候在config文件中加入:

#define CONFIG_OF_LIBFDT

- 可從nand、sd或tftp將dtb讀入內存
- 可在uboot中運行fdt addr 命令設置dtb的位置如:

uboot》 fdt addr 0x71000000

- * 對於arm來講,可以通過bootz kernel_addr initrd_address dtb_address 的命令來啓動內核,既dtb_address作爲bootz或bootm的最後一次參數,第一個參數爲內核映像的地址,第二個爲rootfs的地址 若不存在iniitrd,可以用-代替。(三者順序不能亂)*

根節點兼容性

  • 根節點/的兼容屬性compatible= ”“,定義了整個系統(設備級別)的名稱,組織形式爲,
  • linux內黑通過根節點的兼容屬性可判斷它啓動的是什麼設備。在真實項目中,這個頂層設備的兼容屬性一般包括兩個或兩個以上的兼容性字符串,首個兼容字符串是板子級別的名字,後面一個兼容性是芯片級別的名字。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章