7. Device Tree Bindings
Device Tree Bindings는 한마디로 "디바이스 트리가 지켜야 할 약속(규격서)"입니다.
DTS가 하드웨어의 배치도라면, Bindings는 그 배치도에 들어갈 항목들이 올바르게 적혔는지 검사하는 데이터 명세서(Schema)와 같습니다. C언어에 비유하자면 함수 선언부(Header)나 API 문서 같은 역할을 하죠.
7.1 왜 Binding이 필요한가?
하드웨어 제조사마다 자기들 마음대로 프로퍼티 이름을 정하면(예: 누구는 reg-shift, 누구는 offset), 커널 드라이버는 혼란에 빠집니다.
- 표준화: 특정 하드웨어 IP에 필요한 프로퍼티 이름과 값의 형식을 통일합니다.
- 검증: 부팅도 하기 전에 dtc나 스키마 검사 도구를 통해 DTS에 오타가 있는지, 필수 항목이 빠졌는지 잡아낼 수 있습니다.
- 문서화: 드라이버 개발자가 하드웨어 노드를 어떻게 작성해야 하는지 알려주는 가이드라인이 됩니다.
7.2 YAML 스키마 구조 분석
리눅스 커널(v5.2+)은 YAML 형식을 사용합니다. 제공해주신 예시의 핵심 내용을 짚어볼까요?
① compatible (가장 중요)
드라이버를 찾는 "키"입니다.
- enum 또는 const: 허용되는 문자열 목록을 정의합니다.
- items: 우선순위를 정할 수 있습니다. (예: 특정 SoC 전용 이름 뒤에 범용 IP 이름을 붙이는 관습)
② properties
각 노드가 가질 수 있는 필드를 정의합니다.
- Type 검사: reg는 주소 형태여야 하고, clocks는 phandle 형태여야 함을 명시합니다.
- 제약 조건: maxItems: 1 등을 통해 개수를 제한하거나, enum: [0, 2] 등을 통해 허용되는 값의 범위를 지정합니다.
③ required
이 리스트에 포함된 프로퍼티가 DTS 노드에 없다면 검사 시 에러를 뱉습니다. "이건 없으면 하드웨어 작동 안 함!"이라는 뜻입니다.
7.3 검증 도구 활용법
단순히 파일만 만드는 게 아니라, 커널 빌드 시스템에서 실제로 검증을 수행합니다.
| 명령어 | 설명 |
| make dt_binding_check | 작성한 YAML 파일 자체가 문법에 맞고 유효한지 검사합니다. |
| make dtbs_check | 작성된 실제 DTS 파일들이 YAML 바인딩 규격을 잘 지켰는지 대조합니다. |
7.4 compatible 문자열 작성 관습
보통 "제조사,모델-버전" 형식을 따릅니다.
- snps,dw-apb-uart: Synopsys(제조사)의 DesignWare APB UART(IP 명칭).
- 이름이 구체적일수록 좋습니다. 만약 하드웨어 버그가 있다면 특정 compatible 문자열을 보고 드라이버에서 "아, 이 버전은 이 코드로 우회(Workaround)해야지"라고 판단하기 때문입니다.
정리하자면...
Device Tree Bindings는 하드웨어와 소프트웨어 사이의 "계약서"입니다. 이 계약서(YAML)가 엄격할수록 하드웨어 설정 오류로 인해 커널이 패닉에 빠지는 불상사를 미연에 방지할 수 있습니다.

참고: https://www.minzkn.com/linuxkernel/pages/device-tree.html#dt-device-node
'Embedded : : Linux > : : Device Tree' 카테고리의 다른 글
| [Device Tree] 9. 커널 OF(Open Firmware) API (0) | 2026.03.04 |
|---|---|
| [Device Tree] 8. DTS 컴파일과 디컴파일 (0) | 2026.03.04 |
| [Device Tree] 6. Device Tree Overlay (DTBO) (0) | 2026.03.04 |
| [Device Tree] 5. .dtsi 인클루드 구조와 오버라이드 (0) | 2026.03.04 |
| [Device Tree] 4. 표준 프로퍼티 레퍼런스 (0) | 2026.03.04 |