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 파일들이 있는 것을 확인할 수 있다. 이 파일들은 다음 과정을 통해 실행된다.
- 기본 디바이스 트리 (.dtb)
* /boot/firmware/에 위치
* 부트로더(start.elf)가 보드 모델에 따라 자동 선택
* 보드가 Raspberry Pi 4이면 bcm2711-rpi-4-b.dtb 사용
* 보드가 Raspberry Pi 5이면 bcm2712-rpi-5-b.dtb 사용
* 커널에 전달되어 기본적인 하드웨어 초기화 정보 제공 - 오버레이 (.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 |