DTB – 구조

 

DTB(Device Tree Blob) 구조

  • FDT(Flattened Device Tree)로도 불린다.
  • 4바이트 단위로 정렬되어 저장된다.
  • 저장되는 포맷은 빅엔디안 구조를 사용한다.
    • cpu는 DTB를 읽어 cpu 엔디안에 맞춰 엔디안 변환을 하여 사용해야 한다.
    • 처음 4바이트에는 DTB magic 넘버인 0xd00dfeed 값이 들어있다.
      • 이 값을 읽어서 엔디안 변환이 필요함을 알아낼 수도 있다.
  • DTB는 커널에서 읽어들인 후 꼭 필요한 속성 값을 먼저(early) 참고하여 사용한다. 그런 후 slab 메모리 관리자가 초기화된 후 object 형태로 변환(unflatten 과정)하여 사용한다.

dtb1

DTB 덤프 분석

dtb2

 

현재 사용중인 DTB 확인

DTB(FDT)

  • hexdump /sys/firmware/fdt -C

 

OF(노드들)

  • 커널에서 사용 중인 디바이스 트리 노드
    • unflatten되어 하이라키 구조로 표현된 디바이스 트리 노드 object
$ ls /sys/firmware/devicetree/base -la
total 0
-r--r--r--  1 root root  4 Jun 25 13:57 #address-cells
-r--r--r--  1 root root  4 Jun 25 13:57 #size-cells
drwxr-xr-x 52 root root  0 Jun 25 13:58 .
drwxr-xr-x  3 root root  0 Jun 25 13:47 ..
drwxr-xr-x  2 root root  0 Jun 25 13:57 apb-pclk
drwxr-xr-x  2 root root  0 Jun 25 13:57 chosen
-r--r--r--  1 root root 17 Jun 25 13:57 compatible
drwxr-xr-x  4 root root  0 Jun 25 13:57 cpus
drwxr-xr-x  2 root root  0 Jun 25 13:57 flash@0
drwxr-xr-x  2 root root  0 Jun 25 13:57 foo4
drwxr-xr-x  2 root root  0 Jun 25 13:57 fw-cfg@9020000
drwxr-xr-x  2 root root  0 Jun 25 13:57 gpio
drwxr-xr-x  3 root root  0 Jun 25 13:57 gpio-keys
drwxr-xr-x  3 root root  0 Jun 25 13:57 intc
-r--r--r--  1 root root  4 Jun 25 13:57 interrupt-parent
drwxr-xr-x  2 root root  0 Jun 25 13:57 memory
-r--r--r--  1 root root  1 Jun 25 13:57 name
drwxr-xr-x  2 root root  0 Jun 25 13:57 pcie@10000000
drwxr-xr-x  2 root root  0 Jun 25 13:57 pl011@9000000
drwxr-xr-x  2 root root  0 Jun 25 13:57 pl031@9010000
drwxr-xr-x  2 root root  0 Jun 25 13:57 pl061@9030000
drwxr-xr-x  2 root root  0 Jun 25 13:57 platform@c000000
drwxr-xr-x  2 root root  0 Jun 25 13:57 pmu
drwxr-xr-x  2 root root  0 Jun 25 13:57 psci
drwxr-xr-x  2 root root  0 Jun 25 13:57 timer
drwxr-xr-x  2 root root  0 Jun 25 13:57 virtio_mmio@a000000
drwxr-xr-x  2 root root  0 Jun 25 13:57 virtio_mmio@a000200
...
drwxr-xr-x  2 root root  0 Jun 25 13:57 virtio_mmio@a003e00

 

하이라키 구조로 표현된 디렉토리들

$ tree /sys/firmware/devicetree
/sys/firmware/devicetree
└── base
    ├── #address-cells
    ├── #size-cells
    ├── apb-pclk
    │   ├── #clock-cells
    │   ├── clock-frequency
    │   ├── clock-output-names
    │   ├── compatible
    │   ├── name
    │   └── phandle
    ├── chosen
    │   ├── bootargs
    │   ├── name
    │   └── stdout-path
    ├── compatible
    ├── cpus
    │   ├── #address-cells
    │   ├── #size-cells
    │   ├── cpu@0
    │   │   ├── compatible
    │   │   ├── device_type
    │   │   ├── enable-method
    │   │   ├── name
    │   │   └── reg
    │   ├── cpu@1
    │   │   ├── compatible
    │   │   ├── device_type
    │   │   ├── enable-method
    │   │   ├── name
    │   │   └── reg
    │   └── name
    ├── flash@0
    │   ├── bank-width
    │   ├── compatible
    │   ├── name
...

 

 

참고

2 thoughts to “DTB – 구조”

  1. 안녕하세요. 디바이스 트리에 대한 개념이 서지 않아 많이 고생하고 있습니다.
    정말 친절한 이곳 사이트 덕분에 많이 알아갑니다.
    너무 고맙습니다. 항상 건강하세요.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다