리눅스 시스템 구조와 부트 과정 이해(5) - 디바이스 트리

2025. 5. 4. 19:19·Linux/Embedded Linux (Rpi)
728x90

앞선 게시글의 내용을 정리하자면 아래와 같다.

① [전원 인가]
    ↓
② [ROM 코드 실행 (SoC 내부 Bootloader)]
    - SD 카드 또는 USB 부팅 장치 탐색
    - start.elf, config.txt, kernel.img 등의 존재 확인

③ [GPU 펌웨어 실행: start.elf]
    - VideoCore(GPU)에서 실행됨
    - config.txt 읽고 파싱
    - overlays (.dtbo) 병합
    - kernel 이미지 + 디바이스 트리(.dtb) 로드

④ [커널 실행 (ARM CPU 시작)]
    - .dtb 기반 하드웨어 정보 구성
    - 필요한 드라이버 초기화 (UART, I2C, SPI 등)

⑤ [루트 파일 시스템 마운트]
    - cmdline.txt에 지정된 root 파티션 마운트
    - init 프로세스 실행

⑥ [유저 공간 진입]
    - systemd, shell, 데스크탑 환경 또는 서비스 시작

이 흐름에 따라 부트로더가 실행되면서 디바이스 트리를 기반으로 실제 사용되는 하드웨어핀의 드라이버를 초기화, 해당 하드웨어 핀에 매핑된 기능을 지정한다.


즉, 디바이스 트리(Device Tree)란 커널이 하드웨어 정보를 사전에 알 수 없기 때문에, 부팅 시 .dtb 파일을 통해
"어떤 핀을 어떤 장치로 사용할지" 정보를 알려주는 방식이라고 생각하면 된다.

  • 예: GPIO14 → UART Tx / GPIO2 → I2C SDA 등
  • 최종적으로 커널에 전달되는 디바이스 트리(.dtb)는 config.txt와 .dtbo 오버레이 설정을 반영한 결과물이다
  • 커널은 이를 기반으로 핀/장치를 초기화하고 해당 드라이버를 로딩함

/boot 폴더를 살펴보면, dtb 파일이 있으며 그 안에 있는 overlay 폴더에는 dtbo 파일들이 있는 것을 확인할 수 있다. 이 파일들은 다음 과정을 통해 실행된다.

  1. 기본 디바이스 트리 (.dtb)
    * /boot/firmware/에 위치
    * 부트로더(start.elf)가 보드 모델에 따라 자동 선택
    * 보드가 Raspberry Pi 4이면 bcm2711-rpi-4-b.dtb 사용
    * 보드가 Raspberry Pi 5이면 bcm2712-rpi-5-b.dtb 사용
    * 커널에 전달되어 기본적인 하드웨어 초기화 정보 제공

  2. 오버레이 (.dtbo)
    * /boot/firmware/overlays/에 위치
    *  uart1.dtbo, spi1-1cs.dtbo, i2c-gpio.dtbo 등
    *  사용자가 config.txt에 명시하면 부팅 시 dtb와 병합됨.
    *  부트로더(start.elf)는 기본 .dtb를 읽고 지정된 .dtbo 파일들을 병합(merge) 최종적으로 완성된 디바이스 트리를 커널에 전달한다.

 

 

리눅스 시스템 구조와 부트 과정 이해(1) - dmesg, 부트로더

Raspberry Pi 4 의 부팅 로그 화면이다. (dmesg) 명령어를 통해 확인할 수 있으며, 리눅스 커널이 부팅되는 과정에서 출력하는 메시지를 보여준다. 시스템 하드웨어 초기화 및 커널 기능 활성화 상태

salmon1113.tistory.com

위 게시글에서 config.txt 파일 내용에 하기 내용을 추가하여 UART를 활성화 시켰는데,

enable_uart=1
dtoverlay=disable-bt

dtoverlay=disable-bt 설정은 disable-bt.dtbo를 기본 .dtb에 병합하여, Bluetooth 모듈 사용을 비활성화하고, 해당 모듈이 점유하던 UART0 (ttyAMA0) 핀(GPIO14/15)을 일반 UART 통신용으로 다시 사용할 수 있도록 디바이스 트리에 명시하는 역할을 한다.

728x90

'Linux > Embedded Linux (Rpi)' 카테고리의 다른 글

센서 제어 및 인터페이스 (1) - 라즈베리파이 4 vs 라즈베리파이5  (0) 2025.05.04
리눅스 시스템 구조와 부트 과정 이해(4) - Bootloader  (0) 2025.05.03
리눅스 시스템 구조와 부트 과정 이해(3) - 시스템 콜  (0) 2025.05.03
리눅스 시스템 구조와 부트 과정 이해(2) - 임베디드 리눅스에서의 UART  (0) 2025.05.03
리눅스 시스템 구조와 부트 과정 이해(1) - dmesg, 부트로더  (0) 2025.04.20
'Linux/Embedded Linux (Rpi)' 카테고리의 다른 글
  • 센서 제어 및 인터페이스 (1) - 라즈베리파이 4 vs 라즈베리파이5
  • 리눅스 시스템 구조와 부트 과정 이해(4) - Bootloader
  • 리눅스 시스템 구조와 부트 과정 이해(3) - 시스템 콜
  • 리눅스 시스템 구조와 부트 과정 이해(2) - 임베디드 리눅스에서의 UART
Dinoj
Dinoj
  • Dinoj
    AlOG
    Dinoj
  • 전체
    오늘
    어제
    • 분류 전체보기 (201)
      • PCB 이론 (13)
        • PI (2)
        • SI (11)
      • 회로 이론 (63)
        • 기타 학습 (20)
        • UVM (Universal Verification.. (12)
        • AI HARDWARE (12)
        • COMPUTER VISION (18)
        • Python (Pytorch) (1)
      • PROJECTS (29)
        • AI 가속기 (10)
        • 영상 처리 (3)
        • UVM (Universal Verification.. (2)
        • CPU 설계 (5)
        • CMOS VLSI (2)
        • Verilog (2)
        • Firmware (2)
        • C 언어 (2)
        • 기타 프로젝트 (1)
      • Linux (20)
        • Embedded Linux (Rpi) (7)
        • Petalinux (7)
        • Linux 기초 (6)
      • AMBA BUS (16)
        • AXI BUS (5)
        • APB BUS (2)
        • Vitis (8)
      • AI SOC COURSE (53)
        • 영상 처리 (5)
        • SYSTEM VERILOG (CPU 설계) (20)
        • VERILOG 기초 (5)
        • CMOS VLSI (7)
        • FIRMWARE (9)
        • C PROGRAMMING (1)
        • Python (Keras) (6)
      • 코딩 지식 (5)
        • SYSTEM VERILOG (3)
        • TCL (2)
      • TISTORY (1)
  • 블로그 메뉴

    • 홈
    • 글쓰기
    • 관리
    • Info
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
Dinoj
리눅스 시스템 구조와 부트 과정 이해(5) - 디바이스 트리
상단으로

티스토리툴바