Chapter 1. Device Tree의 이해

Hyunjin Lee·2025년 7월 26일

요약

  • west build의 결과인build/zephyr/zephyr.dts 의 구조를 보며, devicetree가 어떻게 HW를 추상화 하는지 따라가봄.

1. 빌드 및 파일 생성

west build -b nrf52840dk/nrf52840 samples/basic/blinky

빌드 성공시, build/zephyr/zephyr.dts가 생성됨.

# build
west build -b nrf52840dk/nrf52840 samples/basic/blinky 

# flash 위한 환경구축은 아래 링크를 참고
# https://docs.zephyrproject.org/latest/boards/nordic/nrf52840dk/doc/index.html#flashing
nrfjprog --eraseall -f nrf52
nrfjprog --program build/zephyr/zephyr.hex -f nrf52
nrfjprog --reset -f nrf52

2. 병합된 zephyr.dts

skeleton.dtsi
   ↓
armv7-m.dtsi
   ↓
nrf52840.dtsi
   ↓
nrf52840_qiaa.dtsi
   ↓
nrf_common.dtsi + pinctrl.dtsi
   ↓
nrf52840dk_nrf52840.dts
   ↓
→ zephyr.dts (병합 결과)

2.1 #include로 병합된 상위 dts 파일 목록 (주석에 나와 있음)

  • zephyr/dts/common/skeleton.dtsi: dts의 가장 기본 요소(root node, chosen node, aliases node가 포함됨.)
zephyr/dts/common/skeleton.dtsi:9 '/'
zephyr/dts/common/skeleton.dtsi:12 '/chosen'
zephyr/dts/common/skeleton.dtsi:13 '/aliases'
  • zephyr/dts/arm/armv7-m.dtsi: armv7-m의 공통 노드를 정의. timernvic의 주소는 armv7-m 공통인듯.
zephyr/dts/arm/armv7-m.dtsi:6 '/soc'
zephyr/dts/arm/armv7-m.dtsi:13 '/soc/interrupt-controller@e000e100'
zephyr/dts/arm/armv7-m.dtsi:21 '/soc/timer@e000e010'
  • zephyr/dts/arm/nordic/nrf52840_qiaa.dtsi: nRF52840칩의 QIAA버전에만 적용되는 DT 요소를 정의

    코드의미
    QQFN 패키지 (7×7mm, 73핀)
    IIndustrial temperature range (-40°C ~ +85°C)
    ARevision (칩 내부 개선 버전)
    AMinor revision (보통 작은 버그 수정)
zephyr/dts/arm/nordic/nrf52840_qiaa.dtsi
  • zephyr/dts/arm/nordic/nrf52840.dtsi: nrf52840의 노드 정의
zephyr/dts/arm/nordic/nrf52840.dtsi:15 '/cpus'
zephyr/dts/arm/nordic/nrf52840.dtsi:19 '/cpus/cpu@0'
zephyr/dts/arm/nordic/nrf52840.dtsi:26 '/cpus/cpu@0/itm@e0000000'
zephyr/dts/arm/nordic/nrf52840.dtsi:34 '/clocks'
zephyr/dts/arm/nordic/nrf52840.dtsi:35 '/clocks/hfxo'
zephyr/dts/arm/nordic/nrf52840.dtsi:44 '/soc/ficr@10000000'
zephyr/dts/arm/nordic/nrf52840.dtsi:51 '/soc/uicr@10001000'
zephyr/dts/arm/nordic/nrf52840.dtsi:57 '/soc/memory@20000000'
zephyr/dts/arm/nordic/nrf52840.dtsi:61 '/soc/clock@40000000'
zephyr/dts/arm/nordic/nrf52840.dtsi:68 '/soc/power@40000000'
zephyr/dts/arm/nordic/nrf52840.dtsi:76 '/soc/power@40000000/gpregret1@4000051c'
zephyr/dts/arm/nordic/nrf52840.dtsi:84 '/soc/power@40000000/gpregret2@40000520'
zephyr/dts/arm/nordic/nrf52840.dtsi:92 '/soc/power@40000000/regulator@40000578'
zephyr/dts/arm/nordic/nrf52840.dtsi:100 '/soc/radio@40001000'
zephyr/dts/arm/nordic/nrf52840.dtsi:110 '/soc/radio@40001000/ieee802154'
zephyr/dts/arm/nordic/nrf52840.dtsi:118 '/soc/radio@40001000/bt_hci_controller'
zephyr/dts/arm/nordic/nrf52840.dtsi:124 '/soc/uart@40002000'
zephyr/dts/arm/nordic/nrf52840.dtsi:133 '/soc/i2c@40003000'
zephyr/dts/arm/nordic/nrf52840.dtsi:151 '/soc/spi@40003000'
zephyr/dts/arm/nordic/nrf52840.dtsi:169 '/soc/i2c@40004000'
zephyr/dts/arm/nordic/nrf52840.dtsi:187 '/soc/spi@40004000'
zephyr/dts/arm/nordic/nrf52840.dtsi:205 '/soc/nfct@40005000'
zephyr/dts/arm/nordic/nrf52840.dtsi:212 '/soc/gpiote@40006000'
zephyr/dts/arm/nordic/nrf52840.dtsi:220 '/soc/adc@40007000'
zephyr/dts/arm/nordic/nrf52840.dtsi:229 '/soc/timer@40008000'
zephyr/dts/arm/nordic/nrf52840.dtsi:239 '/soc/timer@40009000'
zephyr/dts/arm/nordic/nrf52840.dtsi:249 '/soc/timer@4000a000'
zephyr/dts/arm/nordic/nrf52840.dtsi:259 '/soc/rtc@4000b000'
zephyr/dts/arm/nordic/nrf52840.dtsi:269 '/soc/temp@4000c000'
zephyr/dts/arm/nordic/nrf52840.dtsi:276 '/soc/random@4000d000'
zephyr/dts/arm/nordic/nrf52840.dtsi:283 '/soc/ecb@4000e000'
zephyr/dts/arm/nordic/nrf52840.dtsi:290 '/soc/ccm@4000f000'
zephyr/dts/arm/nordic/nrf52840.dtsi:298 '/soc/watchdog@40010000'
zephyr/dts/arm/nordic/nrf52840.dtsi:305 '/soc/rtc@40011000'
zephyr/dts/arm/nordic/nrf52840.dtsi:315 '/soc/qdec@40012000'
zephyr/dts/arm/nordic/nrf52840.dtsi:322 '/soc/comparator@40013000'
zephyr/dts/arm/nordic/nrf52840.dtsi:333 '/soc/egu@40014000'
zephyr/dts/arm/nordic/nrf52840.dtsi:340 '/soc/egu@40015000'
zephyr/dts/arm/nordic/nrf52840.dtsi:347 '/soc/egu@40016000'
zephyr/dts/arm/nordic/nrf52840.dtsi:354 '/soc/egu@40017000'
zephyr/dts/arm/nordic/nrf52840.dtsi:361 '/soc/egu@40018000'
zephyr/dts/arm/nordic/nrf52840.dtsi:368 '/soc/egu@40019000'
zephyr/dts/arm/nordic/nrf52840.dtsi:375 '/soc/timer@4001a000'
zephyr/dts/arm/nordic/nrf52840.dtsi:385 '/soc/timer@4001b000'
zephyr/dts/arm/nordic/nrf52840.dtsi:395 '/soc/pwm@4001c000'
zephyr/dts/arm/nordic/nrf52840.dtsi:403 '/soc/pdm@4001d000'
zephyr/dts/arm/nordic/nrf52840.dtsi:410 '/soc/acl@4001e000'
zephyr/dts/arm/nordic/nrf52840.dtsi:416 '/soc/flash-controller@4001e000'
zephyr/dts/arm/nordic/nrf52840.dtsi:425 '/soc/flash-controller@4001e000/flash@0'
zephyr/dts/arm/nordic/nrf52840.dtsi:432 '/soc/ppi@4001f000'
zephyr/dts/arm/nordic/nrf52840.dtsi:438 '/soc/mwu@40020000'
zephyr/dts/arm/nordic/nrf52840.dtsi:444 '/soc/pwm@40021000'
zephyr/dts/arm/nordic/nrf52840.dtsi:452 '/soc/pwm@40022000'
zephyr/dts/arm/nordic/nrf52840.dtsi:460 '/soc/spi@40023000'
zephyr/dts/arm/nordic/nrf52840.dtsi:478 '/soc/rtc@40024000'
zephyr/dts/arm/nordic/nrf52840.dtsi:488 '/soc/i2s@40025000'
zephyr/dts/arm/nordic/nrf52840.dtsi:497 '/soc/usbd@40027000'
zephyr/dts/arm/nordic/nrf52840.dtsi:509 '/soc/uart@40028000'
zephyr/dts/arm/nordic/nrf52840.dtsi:516 '/soc/qspi@40029000'
zephyr/dts/arm/nordic/nrf52840.dtsi:526 '/soc/pwm@4002d000'
zephyr/dts/arm/nordic/nrf52840.dtsi:534 '/soc/spi@4002f000'
zephyr/dts/arm/nordic/nrf52840.dtsi:547 '/soc/gpio@50000000'
zephyr/dts/arm/nordic/nrf52840.dtsi:558 '/soc/gpio@50000300'
zephyr/dts/arm/nordic/nrf52840.dtsi:570 '/soc/crypto@5002a000'
  • zephyr/dts/vendor/nordic/nrf_common.dtsi: /pin-controller노드를 불러오는것으로 보아, nrf계열의 soc의 핀 노드는 모두 /pin-controller로 네이밍 통일되어있는듯
zephyr/dts/vendor/nordic/nrf_common.dtsi:26 '/pin-controller'
zephyr/dts/vendor/nordic/nrf_common.dtsi:34 '/entropy_bt_hci'
zephyr/dts/vendor/nordic/nrf_common.dtsi:39 '/sw-pwm'
  • zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi: nrf52840dk보드의 pin 세팅 관련 노드 정보 불러옴.
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:7 '/pin-controller/uart0_default'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:8 '/pin-controller/uart0_default/group1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:13 '/pin-controller/uart0_default/group2'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:20 '/pin-controller/uart0_sleep'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:21 '/pin-controller/uart0_sleep/group1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:30 '/pin-controller/uart1_default'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:31 '/pin-controller/uart1_default/group1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:36 '/pin-controller/uart1_default/group2'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:41 '/pin-controller/uart1_sleep'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:42 '/pin-controller/uart1_sleep/group1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:49 '/pin-controller/i2c0_default'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:50 '/pin-controller/i2c0_default/group1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:56 '/pin-controller/i2c0_sleep'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:57 '/pin-controller/i2c0_sleep/group1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:64 '/pin-controller/i2c1_default'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:65 '/pin-controller/i2c1_default/group1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:71 '/pin-controller/i2c1_sleep'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:72 '/pin-controller/i2c1_sleep/group1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:79 '/pin-controller/pwm0_default'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:80 '/pin-controller/pwm0_default/group1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:86 '/pin-controller/pwm0_sleep'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:87 '/pin-controller/pwm0_sleep/group1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:93 '/pin-controller/spi0_default'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:94 '/pin-controller/spi0_default/group1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:101 '/pin-controller/spi0_sleep'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:102 '/pin-controller/spi0_sleep/group1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:110 '/pin-controller/spi1_default'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:111 '/pin-controller/spi1_default/group1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:118 '/pin-controller/spi1_sleep'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:119 '/pin-controller/spi1_sleep/group1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:127 '/pin-controller/spi2_default'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:128 '/pin-controller/spi2_default/group1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:135 '/pin-controller/spi2_sleep'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:136 '/pin-controller/spi2_sleep/group1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:144 '/pin-controller/qspi_default'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:145 '/pin-controller/qspi_default/group1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:156 '/pin-controller/qspi_sleep'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:157 '/pin-controller/qspi_sleep/group1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:166 '/pin-controller/qspi_sleep/group2'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:173 '/pin-controller/spi3_default'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:174 '/pin-controller/spi3_default/group1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:181 '/pin-controller/spi3_sleep'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840-pinctrl.dtsi:182 '/pin-controller/spi3_sleep/group1'
  • zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts: nrf52840dk의 보드에 존재하는 요소 추상화 위한(LED, 버튼 등)노드 불러옴
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:27 '/leds'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:30 '/leds/led_0'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:35 '/leds/led_1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:40 '/leds/led_2'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:45 '/leds/led_3'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:51 '/pwmleds'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:54 '/pwmleds/pwm_led_0'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:59 '/buttons'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:62 '/buttons/button_0'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:68 '/buttons/button_1'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:74 '/buttons/button_2'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:80 '/buttons/button_3'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:87 '/connector'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:116 '/analog-connector'
zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:255 '/soc/qspi@40029000/mx25r6435f@0'

2.2 chosen 섹션

  • chosen: Zephyr의 커널이나 드라이버가 필수로 참조해야 하는 하드웨어 리소스나 설정 값을 Device Tree(DTS) 상에서 명시적으로 지정해주는 영역.
chosen {
	zephyr,bt-hci = &bt_hci_controller;          /* in zephyr/dts/arm/nordic/nrf52840.dtsi:10 */
	zephyr,entropy = &rng;                       /* in zephyr/dts/arm/nordic/nrf52840.dtsi:11 */
	zephyr,flash-controller = &flash_controller; /* in zephyr/dts/arm/nordic/nrf52840.dtsi:12 */
	zephyr,sram = &sram0;                        /* in zephyr/dts/vendor/nordic/nrf52840_partition.dtsi:9 */
	zephyr,flash = &flash0;                      /* in zephyr/dts/vendor/nordic/nrf52840_partition.dtsi:10 */
	zephyr,code-partition = &slot0_partition;    /* in zephyr/dts/vendor/nordic/nrf52840_partition.dtsi:11 */
	zephyr,console = &uart0;                     /* in zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:18 */
	zephyr,shell-uart = &uart0;                  /* in zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:19 */
	zephyr,uart-mcumgr = &uart0;                 /* in zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:20 */
	zephyr,bt-mon-uart = &uart0;                 /* in zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:21 */
	zephyr,bt-c2h-uart = &uart0;                 /* in zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:22 */
	zephyr,ieee802154 = &ieee802154;             /* in zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:23 */
	zephyr,boot-mode = &boot_mode0;              /* in zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts:24 */
};
  • zephyr,bt-hci: &bt_hci_controller를 사용(from. nrf52840.dtsi)
    - Zephyr에서 Bluetooth 호스트와 컨트롤러 간 HCI (Host Controller Interface) 통신을 담당하는 드라이버 서브시스템.
    - Host: BLE 프로토콜 스택의 상위 계층(GAP, GATT, ATT)을 처리
    - Controller: 하드웨어와 가까운 계층(LL, PHY, RF)을 처리
    - HCI: 이 둘 간의 통신 인터페이스
  • zephyr,entropy: &rng를 사용(fromnrf52840.dtsi)
    - Zephyr의 entropy는 보안용 키, UUID, BLE 주소 등 난수(random number)가 필요한 곳에서 하드웨어 RNG를 통해 무작위 값을 얻기 위해 사용됨.
  • zephyr,flash, zephyr,flash-controller: from nrf52840.dtsi
    - SoC내부 플래시메모리를 Zephyr가 인식 / 제어하기 위함.
  • zephyr,sram: sram0 from nrf52840_partition.dtsi
    - Zephyr에서 SoC의 내부 RAM 영역을 인식하고 메모리 맵에 포함시키기 위해 사용하는 Device Tree 노드 식별자
  • zephyr,console: uart0 from nrf52840dk_nrf52840.dts.
    - print / log 출력 위한 기본 디바이스를 정의함
    - uart로 사용할 핀은 결국 해당 보드의 구성에 달려있기때문에, 보드의 dts에서 정해짐
  • zephyr,shell-uart: uart0 from nrf52840dk_nrf52840.dts
    - Zephyr Shell 인터페이스용 UART. help, kerner 등의 shell 명령어 사용 가능해짐.
    - CONFIG_SHELL=y 필요.
    - shell에서 help 명령어 예시
  • zephyr,uart-mcumgr: uart0 from nrf52840dk_nrf52840.dts
    - mcumgr: MCU Manager
    - mcumgr를 통한 OTA 업데이트, 이미지 업로드, 설정 등을 UART로 할 때 사용
    - CONFIG_MCUMGR_SMP_UART=y 필요.
  • zephyr,bt-mon-uart: uart0 from nrf52840dk_nrf52840.dtsi
    - btmon: Bluetooth Monitor
    - Bluetooth HCI 트래픽을 모니터링 도구로 넘기기 위한 UART
    - 예: btmon 같은 툴로 BLE 통신 내용 분석할 때 사용
    - H:4 HCI 프로토콜 기반
  • zephyr,ieee802154: &ieee802154 from nrf52840dk_nrf52840.dts
    - Zephyr에서 IEEE 802.15.4 무선 드라이버에 사용할 컨트롤러 디바이스를 지정하는 속성임.
    - ieee802154는 해당 무선 기능을 수행하는 SoC 내부 또는 외부 무선 소자를 정의하고, Zephyr가 이를 무선 스택에 바인딩할 수 있도록 설정하는 장치 노드임.
    - 어떤 하드웨어를 쓸 건지 (compatible), 어떤 방식으로 연결됐는지 (reg, spi, irq) 등을 정의함.
  • zephyr,boot-mode: &boot_mode0 from nrf52840dk_nrf52840.dts
    - 보드 수준에서 MCU가 어떤 부팅 환경을 갖도록 구성되었는지 Zephyr에 힌트를 주기 위함. 일부 보드(DK 등)에서는 부트핀, 점퍼, 디버깅 연결 여부 등 고려해서 DTS에 명시해 두는 경우 있음.
    - 즉, boot_mode0가 무슨 장치를 의미한다기 보단, 실행 정책에 가까움.

2.3 /soc/아래의 구조

nrf52840dk/nrf52840 의 on-chip supported feature가 존재함

  • nvic: interrupt-controller@e000e100
  • systick: timer@e000e010
  • ficr: ficr@10000000 (Factory Information Configuration Registers)
  • uicr: uicr@10001000(User Information Configuration Registers)
  • sram0: memory@20000000
  • clock: clock@40000000
    ...

2.4 / 루트노드 아래의 구조

  • /chosen: Zephyr의 커널이나 드라이버가 필수로 참조해야 하는 하드웨어 리소스나 설정 값을 Device Tree(DTS) 상에서 명시적으로 지정해주는 영역.
  • /aliases: 보드간 코드 재사용성을 높이기위해, 많은 타겟 보드가 공통으로 사용하는 구성요소들을 aliase로 접근할 수 있게 함.(디버깅용 LED / 스위치, mcuboot 등)
/aliases {
  led0 = &led_0;
  sw0 = &button_0;
};	
  • /soc: 타겟 보드의 on-chip feature에 해당하는 노드를 포함
  • /pinctrl: 타겟 보드의 각 핀의 역할을 정의하기 위한 노드를 포함(spi0 miso/mosi pin은 PTB1/PTB2.. 등)
  • /cpus: 해당 SoC의 core정보를 정의.
  • /clocks: 해당 SoC의 clock정보를 정의.
  • /leds, /pwmleds, /buttons: 생략
  • arduino_header: 아두이노 보드처럼 생긴 핀 배열(헤더)를 제공한다는 의미. 하드웨어 핀 배열이 Arduino Uno와 호환된다는 뜻.

2.5 model, compatible

  • model = "Nordic nRF52840 DK NRF52840": 사람(개발자)가 읽기 위한 보드의 설명.
  • compatible = "nordic,nrf52840-dk-nrf52840": Zephyr가 내부적으로 드라이버 매칭 및 조건분기를 위해 기계가 읽는 식별자.
profile
real-time system과 physical AI에 관심이 많습니다.

0개의 댓글