① 請教linux啟動過程中dtb的作用
dtb文件作用的描述是,使用dtb可以減少linux內核版本的數量。同一份linux 內核代碼可以在多個板卡上運行,每個板卡可以使用自己的dtb文件。
1,在linux內核啟動過程中會解析dtb文件,根據dtb文件中設備列表進行加註各個外設的驅動模塊。
2,PC機在啟動時會自動掃描外設,而在嵌入式中,linux內核啟動過程中只是解析dtb文件,從而載入對應的模塊。
3,編譯linux內核時必須選擇某外設模塊,並且dtb中包括該外設的信息。在linux內核啟動過程中才能自動載入該模塊。
要使用dtb,需要uboot啟動內核時,在bootm命令中指定dtb的位置,格式為:
bootm uImage_addr ramdisk_addr dtb_addr
如果沒有ramdisk,就需要寫成bootm uImage_addr - dtb_addr,用「-」表示沒有ramdisk
② 編譯linux內核設備樹文件使用什麼命令
Linux源碼的arch/powerpc/boot/dts/目錄下存放了很多dts文件,可以作為參考文件。另外dtc編譯器在內核源碼2.6.25版本之後已經被包含進去。在2.6.26版本之後,生成blob的簡單規則已經加入makefile,如下命令:
$ make ARCH=powerpc canyonlands.dtb
也可以根據自己的硬體修改好dts文件後,用下面類似命令生成dtb文件。
$ dtc -f -I dts -O dtb -R 8 -S 0x3000 test.dts > mpc836x_mds.dtb
$ mkimage -A ppc -O Linux -T flat_dt -C none -a 0x300000 -e 0 -d mpc836x_mds.dtb mpc836x_mds.dtu
③ dtb是什麼文件怎麼打開
dtb是可以減少linux內核版本的數量的文件。同一份linux 內核代碼可以在多個板卡上運行,每個板卡可以使用自己的dtb文件。
1,在linux內核啟動過程中會解析dtb文件,根據dtb文件中設備列表進行加註各個外設的驅動模塊。
2,PC機在啟動時會自動掃描外設,而在嵌入式中,linux內核啟動過程中只是解析dtb文件,從而載入對應的模塊。
3,編譯linux內核時必須選擇某外設模塊,並且dtb中包括該外設的信息。在linux內核啟動過程中才能自動載入該模塊。
④ iMX6ull SD卡系統和Nandflash系統
系統源碼和編譯方法,[參見連接] ( https://community.nxp.com/docs/DOC-334274 )其中dtb文件針對LCD或HDMI修改的內容對iSpeaker無影響,不用去修改。我們會使用另外的dtb文件。
燒寫SD方式也不採用這個文檔中的方法,直接在linux命令行下如下操作:
Nandflash使用zImage,dtb文件和SD卡中使用的完全一致。Uboot文件SD中使用的不能用於Nandflash,源碼另見。
燒寫Nandflash需要用SD卡系統盤啟動,SD卡系統中需要已安裝mtd-utils工具。系統啟動後能正常看到mtd0~mtd4分區。按照下面步驟操作:
$ flash_erase /dev/mtd0 0 0
$ flash_erase /dev/mtd1 0 0
$ flash_erase /dev/mtd2 0 0
$ kobs-ng init -x u-boot.imx --search_exponent=1 -v
$ flash_erase /dev/mtd3 0 0
$ nandwrite -p /dev/mtd3 zImage
$ nandwrite -p /dev/mtd3 -s 0x7e0000 imx.dtb
$ ubiformat /dev/mtd4 -f ubi.img
其中使用ubi.img文件,在linux主機下製作方法如下:
使用的根文件系統和SD卡中的根文件系統一樣,假設SD卡已插入linux主機usb介面,並將第二個分區掛載與/mnt下,首先在linux主機工作目錄下建立文本文件ubifs.cfg,內容如下:
[ubifs]
mode=ubi
image=ubifs.img
vol_id=0
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
然後執行如下命令:
$ mkfs.ubifs -x zlib -m 2048 -e 124KiB -c 3965 -r /mnt ubifs.img
$ ubinize -o ubi.img -m 2048 -p 128KiB -s 2048 -O 2048 ubifs.cfg
⑤ 如何將dtb反編譯成dts
由於device tree會將一個node的信息分布在各個文件里,查看起來很不方便,比如如下例子,ldb在三個文件中都有配置:
imx6qdl-sabresd.dtsi:
&ldb {
status = "okay";
.......
};
imx6qdl.dtsi:
ldb: ldb@020e0008 {
#address-cells = <1>;
#size-cells = <0>;
......
};
imx6q.dtsi:
&ldb {
compatible = "fsl,imx6q-ldb", "fsl,imx53-ldb";
.......
}
其實device tree編譯之後最終是會被全部放在一個.dtb結尾的文件,
比如這里是imx6q-sabresd-ldo.dtb,用如下命令就可以看到整個ldb node的內容,而且也可以作為編譯之後的檢查。
[kris@ecovacs:~/kernel_imx/scripts/dtc]$
./dtc -I dtb -O dts ../../arch/arm/boot/dts/imx6q-sabresd-ldo.dtb > ~/f.dts
⑥ dtb是什麼文件怎麼打開
dtb是可以減少linux內核版本數量的文件,打開方式如下:
1、首先,網路搜索框中輸入UltraEdit,然後單擊網路一下,如下圖所示,然後進入下一步。
⑦ 所有dtb對應什麼晶元
設備樹的源文件為.dts和.dtsi文件,經過設備樹專用的編譯器編譯後生成一個二進制的DTB(Device tree Blob)文件。在系統啟動時,DTB文件由bootloader載入進內存,此時,內存中的DTB成為FDT(Flat Device Tree)。Bootloader啟動kernel時,將FDT的地址傳給Kernel,在Kernel啟動的匯編階段,將FDT地址保存在「x5」寄存器中,並定義8位元組變數「__fdt_pointer」,用來表示該地址,以供Kernel的C代碼使用