1.設備樹
設備樹是 Linux 開發人員必備的知識,因為現在的 Linux 系統(包括 Android )中,ARM 相關驅動都採用了設備樹方式進行描述。
設備樹(DeviceTree),這個從分開就是設備和樹,描述設備樹的文件叫 DTS(DeviceTreeSource),這個 DTS 文件樹型結構描述板級設備,比如 CPU 數量、內存基地址、I2C、I2S、SPI、等接口上掛載了哪些設備。
2. DTS、DTB和DTC
設備樹文件擴展名為.dts,但是我們在編譯 Linux 的時候卻一直在使用.dtb文件,那 DTS 文件和 DTB 文件有何關係呢?DTS 是設備樹源碼文件,DTB 是將 DTS 編譯以後得到的二進制文件。那麼將.dts 編譯為.dtb 需要什麼工具呢?需要用到 DTC 工具
2.1 編譯 DTS 文件
使用 dtc 工具將 dts 文件編譯生成 dtb 文件的命令如下:
./dtc -I ( 大寫i ) dts -O dtb -o test.dtb test.dts |
2.2 反編譯 DTB 文件
使用 tdc 工具將 dtb 文件反編譯成 dts文件的命令如下:
./dtc -I ( 大寫i ) -dtb -O dts -o test.dts test.dtb |
由 dtc 轉換成的 dts 是一個完整的 device tree,包括 “include ”xxx.dtsi“ 中的內容也一起在反編譯出來的 dts 中了,即所有的內容都在一個 dts 文件中。
3. 基於芯馳 X9HP 反編譯 DTB 文件
3.1 查找 dtc 工具
一般在編譯 dtb 的編譯系統中都存在 dtc 文件,由於 linux 文件較少,這裡在 linux 代碼裡面使用如下命令查找 dtc 工具。
Find ./ -name “dtc“ |
如圖是在芯馳 PTG4.1 基線代碼中在 yocto 目錄中查找 dtc 。
經過測試如下路徑下的 dtc 是可用文件:
./build-x9hp_ms_cluster/tmp/deploy/images/x9hp_ms_cluster/dtc |
./build-x9hp_ms_cluster/tmp/sysroots-components/x86_64/dtc-native/usr/bin/dtc |
將其拷貝到 docker 掛載的服務器目錄下,方便編譯 dtb 文件,如下截圖,退出 docker 後在服務器我的家目錄下可以看到拷貝過來的 dtc 文件。
3.2 獲取要反編譯的 DTB 文件
最簡單的辦法就是找到打包好的 pac 包,並將其加載到 SDToolsBox –> SDFactoryTools 中。
點擊齒輪按鈕進入 Setting ,找到 EMMC1_DTB, 雙擊文件路徑。
拷貝路徑後粘貼到文件瀏覽器中找到該 dtb 文件。
使用sftp 工具上傳 dtb 文件到服務器中 dtc 工具的同目錄下。
3.3 使用 DTC 工具反編譯 DTB 文件
使用如下命令反編譯 dtb 文件,如下兩條命令任一都可。
./dtc -I ( 大寫 i ) dtb -O dts -o test.dts dtb.bin ./dtc -I ( 大寫 i ) dtb -O dts dtb.bin > ./1.dts |
反編譯成功後 log 如下。
使用vim 編輯器可以打開查看 dts 文件。
4. 總結
因為dts 文件層層嵌套,最後使用了哪一份配置需要反覆確認對比,調試時使用反編譯正常的 dtb 配置,再反編譯客戶的 dtb 文件,將其對比可以快速確定客戶與正確(能正常運行的/ demo板配置 )配置之間差異點。
參考資料
[1] https://www.shuzhiduo.com/A/kPzOQBva5x/
歡迎在博文下方留言評論,我們會及時回復您的問題。如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com
作者:Stark / 劉沛
評論