2017-09-28 89 views
0

摘要如何修改內核DTB文件

我目前的Linux內核編譯(內核模塊和DTB)與定製電路板的一些自定義的驅動程序。偶爾我會在編譯內核,並認識到在DTB文件的兼容性字符串不是什麼自定義驅動程序所期待的。現在,我可以解決這個問題的唯一辦法就是修改DTS或內核驅動程序,以便字符串匹配,然後再重新編譯內核。有沒有辦法可以編輯DTB文件來更新兼容性字符串?

失敗的嘗試

我已經能夠反編譯DTB使用命令文件回DTS文件:

dtc -I dtb -o <filename>.dts -<filename>.dtb 

但是如果我修改DTS文件,然後使用命令重新編譯:

dtc -I dts -o <filename>.dtb -<filename>.dts 

內核將不會加載重新編譯DTB文件

+1

你能顯示任何錯誤或內核日誌。 ? –

+0

您應該使用-O標誌進行編譯,-I是從設備樹blob中獲取文本中的設備樹。 – LethalProgrammer

回答

0

你爲什麼不產生新的DTB?

DTB(設備樹團塊/二進制),是表示電路板的硬件部件的硬件數據庫。

U-boot將板信息結構傳遞給內核,該內核源自U-Boot中的頭文件。

DTB是由產生二進制以適當的形式進行的U-Boot和Linux,瞭解特殊的編譯器編譯。


DTC(設備樹編譯器)它將設備樹文件轉換爲U-Boot和Linux內核可以理解的機器可讀二進制文件。

直截了當的方式來使用DTC。

$ dtc -O dtb -o arm_board.dtb -b 0 arm_board.dts 

從dtb文本中獲取設備樹。是二進制由上述命令創建

dtc -I dtb -O dts arm_board.dtb 

board.dts。 -O指定輸出格式。 -o標誌是輸出文件。 -b 0指定物理引導CPU。

然後做

$ make ARCH=arm arm_board.dtb 

另一種方法可能只是使用make dtbs這將調用DTC。 arch/arm/boot/dts/Makefile列出在編譯時生成哪個DTB應該是 這是編譯它的另一種方法。使會將在內核樹/arch/arm/boot/dts

的這個位置有一個在這個Device Tree for Dummies

+0

'make'調用肯定會起作用。不幸的是,我正在使用'yocto'構建系統,所以我需要製作一個額外的配方來公開這個調用。我認爲這是最好的選擇,因爲dtc(即使是-O)仍然不適用於我。 –