聊聊Linux 運行時設備樹
在根文件系統中查看設備樹,是一種不錯的調試手段。因為很多時候會出現你修改了 dts 文件,并且也編譯了新的 dtb,但是下載到板子上的還是以前的 dtb,因此查看板子中真實生效的設備樹配置信息是很重要的。
1、設備樹原始 dtb 格式
在如下目錄,fdt 就是我們的 設備樹*.dtb文件
/sys/firmware/fdt //原始dtb文件
執行以下指令可看
hexdump -C /sys/firmware/fdt
這個命令打開后是十六進制模式,如圖:
這樣是很難看到真實配置的,可以把 fdt 弄出來,放到 ubuntu 中,使用 Linux 源碼自帶的 DTC 工具反編譯,查看真實的配置。反編譯命令為
/script/dtc/dtc -I dtb -O dts -o xxx.dts xxx.dtb
DTS 是設備樹源碼文件,DTB 是將 DTS 編譯以后得到的二進制文件。將 .c 文件編譯為 .o 需要用到 gcc 編譯器,那么將.dts 編譯為.dtb 需要什么工具呢?需要用到 DTC 工具!反編譯也是這個工具,反編譯后可以看到方便查看的設備樹,字符串會恢復,數字會變成十六進制格式。
在 u-boot 啟動內核時,會將 dtb 文件的內存地址傳遞給內核,并將其所占內存保留;因此,我們在內核啟動后,訪問該內存,獲得原始的 dtb。
2、設備樹目錄結構 dtb 格式
/sys/firmware/devicetree
以目錄結構程現的 dtb 文件, 根節點對應 base 目錄, 每一個節點對應一個目錄, 每一個屬性對應一個文件:
在這里你就可以看到你配置的設備樹節點信息,字符串使用 cat,數字使用 xxd 、hexdump 命令:
3、內核中現存的所有 platform_device
/sys/devices/platform
系統中所有的 platform_device, 有來自設備樹的, 也有來有 .c 文件中注冊的。
對于來自設備樹的 platform_device,可以進入 /sys/devices/platform/<設備名>/of_node 查看它的設備樹屬性。
對于有 of_node 屬性的 platform_device,證明其來源于 dtb。
note:/proc/device-tree 是鏈接文件, 指向 /sys/firmware/devicetree/base
以上是 Linux 原生的節點,可以供我們使用。如果你用的芯片是某個廠家,這個廠家客制化的時候會增加一些調試節點,你可以很方便的在 IC 廠商增加的調試節點中查看設備樹信息。
重要補充:
Linux 常用的文件系統有三個:procfs、sysfs、debugfs
procfs:該文件系統主要用來反饋內核的信息,包括系統中所有的中斷、進程信息都可以在這里查看。掛載在 /proc/...
sysfs:該文件系統主要是和驅動強相關,會反饋所有的驅動信息,以目錄形式顯示。掛載在 /sys/...
debugfs:該文件系統掛載在 /sys/kernel/debug/... ,主要用來 debug。