그라운드 임베디드 유튜브 구독

노트 / 임베디드 리눅스

디바이스 트리: 보드 구성을 커널에 알리기

어떤 장치가 어떤 주소와 핀에 붙어 있는지 적은 파일. 같은 커널이 여러 보드에서 돌 수 있는 이유.

GROUND EMBEDDED · 정리 노트임베디드 리눅스 04디바이스 트리 1&i2c1 { 2 status = "okay"; 3 clock-frequency = <400000>; 4 tmp102@48 {

왜 필요한가

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)이 빠지면 컨트롤러는 켜졌는데 신호가 핀으로 안 나옵니다