디바이스 트리: 보드 구성을 커널에 알리기
어떤 장치가 어떤 주소와 핀에 붙어 있는지 적은 파일. 같은 커널이 여러 보드에서 돌 수 있는 이유.
왜 필요한가
MCU 펌웨어는 보드마다 코드에 핀 번호를 적었습니다. 리눅스는 같은 커널 바이너리를 여러 보드에 쓰기 위해 보드 구성을 데이터 파일로 분리합니다. 이것이 디바이스 트리(.dts → 컴파일 → .dtb)입니다.
예: I2C에 온도 센서 추가
&i2c1 {
status = "okay";
clock-frequency = <400000>;
tmp102@48 {
compatible = "ti,tmp102";
reg = <0x48>;
};
};
compatible: 이 문자열과 맞는 드라이버를 커널이 찾아 연결reg: 주소 (I2C 주소, 메모리 맵 주소)status = "okay": 기본은 꺼져 있는 컨트롤러를 켬
오버레이
라즈베리 파이 같은 보드는 기본 .dtb 위에 오버레이(.dtbo)를 얹어 확장 보드 구성을 추가합니다. config.txt의 dtoverlay= 한 줄이 그것입니다.
확인
- 부팅 후
/proc/device-tree/에서 실제로 적용된 트리 확인 dmesg | grep tmp102로 드라이버가 붙었는지 확인- 핀 기능 선택(pinctrl)이 빠지면 컨트롤러는 켜졌는데 신호가 핀으로 안 나옵니다