device tree

디버깅 방법

jsh91 2023. 5. 12. 09:33

1. device tree를 컴파일한 bcm2710-rpi-3-b.dtb를 hexdump를 사용하여 아스키코드로 확인 가능하다

hexdump bcm2710-rpi-3-b.dtb -C

00000000  d0 0d fe ed 00 00 80 ab  00 00 00 48 00 00 73 d4  |...........H..s.|
00000010  00 00 00 28 00 00 00 11  00 00 00 10 00 00 00 00  |...(............|
00000020  00 00 0c d7 00 00 73 8c  00 00 00 00 00 00 00 00  |......s.........|
00000030  00 00 00 00 00 00 10 00  00 00 00 00 00 00 00 00  |................|
00000040  00 00 00 00 00 00 00 00  00 00 00 01 00 00 00 00  |................|
00000050  00 00 00 03 00 00 00 23  00 00 00 00 72 61 73 70  |.......#....rasp|
00000060  62 65 72 72 79 70 69 2c  33 2d 6d 6f 64 65 6c 2d  |berrypi,3-model-|
00000070  62 00 62 72 63 6d 2c 62  63 6d 32 38 33 37 00 00  |b.brcm,bcm2837..|
00000080  00 00 00 03 00 00 00 17  00 00 00 0b 52 61 73 70  |............Rasp|

 

2. decompile을 사용하여 확인 가능하다.

dtc -I dtb -O dts {DTB_FILE.dtb} -o {OUT_PATH}

/memreserve/    0x0000000000000000 0x0000000000001000;
/ {
        compatible = "raspberrypi,3-model-b\0brcm,bcm2837";
        model = "Raspberry Pi 3 Model B";
        #address-cells = <0x01>;
        #size-cells = <0x01>;
        interrupt-parent = <0x01>;

        aliases {
                serial0 = "/soc/serial@7e215040";
                serial1 = "/soc/serial@7e201000";
                aux = "/soc/aux@7e215000";
                sound = "/soc/sound";
                soc = "/soc";
                dma = "/soc/dma@7e007000";
...
...
...

 

3. target board에서 dtb를 알아내는 방법

fdtdump -s /sys/firmware/fdt

fdt: found fdt at offset 0
/dts-v1/;
// magic:               0xd00dfeed
// totalsize:           0x8628 (34344)
// off_dt_struct:       0x48
// off_dt_strings:      0x787c
// off_mem_rsvmap:      0x28
// version:             17
// last_comp_version:   16
// boot_cpuid_phys:     0x0
// size_dt_strings:     0xdac
// size_dt_struct:      0x7834

/memreserve/ 0 0x1000;
/ {
    memreserve = <0x3b400000 0x04c00000>;
    serial-number = "00000000a0be4b55";
    compatible = "raspberrypi,3-model-b", "brcm,bcm2837";
    model = "Raspberry Pi 3 Model B Rev 1.2";
    #address-cells = <0x00000001>;
    #size-cells = <0x00000001>;
    interrupt-parent = <0x00000001>;
    system {
        linux,serial = <0x00000000 0xa0be4b55>;
        linux,revision = <0x00a22082>;
    };
    axi {
        vc_mem {
            reg = <0x3ec00000 0x40000000 0xc0000000>;
        };
    };
    aliases {
        display0 = "/chosen/framebuffer@3eaa9000";