dtb to dts by dtc

xiaoxiao2021-02-28  62

1, DTC(Device tree compiler)是一个小工具,负责将DTS转换成DTB(Device tree blob)。DTB是DTS的二进制形式,供机器使用。使用中,我们首先根据硬件修改DTS文件,然后在编译的时候通过DTC工具将DTS文件转换成DTB文件,然后将DTB文件烧写到机器上(如emmc,磁盘等存储介质)。系统启动时,fastboot(或者类似的启动程序,如Uboot)在启动内核前将DTB文件读到内存中,跳转到内核执行的同时将DTB起始地址传给内核。内核通过起始地址就可以根据DTB的结构解析整个设备树。说设备树的规范可以分成两个层次,是针对DTS的,关于DTB的结构不在此范围内。DTB仅仅是为了方便机器使用而对DTS的转换而已(也可以说DTS仅是为了方便人类使用而对DTB的一种描述)。 2, 其实device tree编译之后最终是会被全部放在一个.dtb结尾的文件,下面 将dtb反编译成dts -bash-4.3# find / -name *.dtb /pns/sdm_b/lcpa.X31.ahp.dtb /pns/sdm_b/lbra.X31.dtb /pns/sdm_b/lcaa.X31.dtb /pns/sdm_b/lnia.X31.dtb /pns/sdm_b/lcpa.X31.shp.dtb /pns/sdm_a/lcaa.X32.dtb -bash-4.3# dtc -I dtb "/pns/sdm_a/lcaa.X32.dtb" > /tmp/xxx.dts -bash-4.3# cat /tmp/xxx.dts /dts-v1/; / { epapr-version = "ePAPR-1.1"; part-number = "LCAA"; version = "00000000"; revision = "0002"; fragment@0 { target = <0xdeadbeef>; __overlay__ { #address-cells = <0x1>; #size-cells = <0x0>; lcaa0_ep_0_clk@90000 { compatible = "nsn,vrha-clk-agusta"; reg = <0x90000 0x1000>; interrupts = <0x26 0x27>; interrupt-names = "sync_irq", "phaselatch_irq"; vrha_event = <0x1>; fpga-name = "augusta"; clk-version = <0x1>; 再将反汇编生成的dts文件用dtc编译为dtb: -bash-4.3# dtc -I dts -O dtb -o /tmp/xxxx.dtb /tmp/xxx.dts -bash-4.3# ls -all /tmp/xxxx.dtb -rw-r--r-- 1 root root 5159 Jan 3 20:59 /tmp/xxxx.dtb 上面Dtc编译器有几个选项和参数: -I是输入文件格式,在本文中是dts -O是目标文件格式,在本文中是dtb -o是目标文件路径 最后一个参数是输入文件路径 编译之后会在目标文件路径生成一个dtb文件,这个文件名必须按照前面uboot默认配置中的文件进行命名,本文中是devicetree.dtb 从运行中的内核生成dts: -bash-4.3# dtc -I fs -O dts -o /tmp/xxxx.dts /proc/device-tree/ -bash-4.3# ls /tmp/xxxx.dts /tmp/ xxxx.dts 3, 安装dtc: sudo apt-get install device-tree-compiler 4, http://blog.chinaaet.com/cuter521/p/5100050348
转载请注明原文地址: https://www.6miu.com/read-96589.html

最新回复(0)