dtb文件的反编译

在调试设备的驱动时,有时写好了dts(i)文件,编译之后发现没有起作用或发生了莫名其妙的问题,原因可能还是dts没有写对。出错的原因往往是由于dts会include很多个dtsi文件,且往往是最后一个定义才会生效。

做如下实验:

&i2c2 {
        status = "okay";
};
&i2c2 {
        status = "lgliu";
};

其中的第二个status老刘是故意写成了okey。这段代码编译之后,生成的i2c2的状态实际被设置为了"lgliu"(假定这个代码是最后一个配置i2c2的代码)。这时候,借助dts的反编译功能,就会发现这个问题了。

编译与反编译代码在kernel/scripts/dtc/目录下:

反编译dtb:

$ kernel/scripts/dtc/dtc -I dtb -O dts  source.dtb  -o dest.dtsi
i2c@2005a000 {
                compatible = "rockchip,rk30-i2c";
                reg = <0x2005a000 0x1000>;
                interrupts = <0x0 0x1a 0x4>;
                #address-cells = <0x1>;
                #size-cells = <0x0>;
                pinctrl-names = "default", "gpio";
                pinctrl-0 = <0x7b 0x7c>;
                pinctrl-1 = <0x7d>;
                gpios = <0x6d 0x14 0x1 0x6d 0x15 0x1>;
                clocks = <0x4d 0x6>;
                rockchip,check-idle = <0x1>;
                status = "lgliu";
                ts@55 {
                        compatible = "goodix,gt8xx";
                        reg = <0x55>;
                        touch-gpio = <0x77 0x8 0x8>;
                        reset-gpio = <0x6d 0x11 0x1>;
                        max-x = <0x500>;
                        max-y = <0x320>;
                };
        };

看这个i2c被合并后的信息,status为最后一次设置i2c2的状态值。

另外,由于dts会将相同的节点进行合并,通过反编译,也可以查看所有挂在某一总线的设备!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

1,112 views 暂无评论