Embedded System/Bootloader & System Startup

U-Boot 부팅 시퀀스 완벽 분석: 다단계 부팅 구조와 로그 해석

임베디드 친구 2025. 12. 4. 22:26
반응형

임베디드 리눅스 시스템을 개발하다 보면 반드시 마주하게 되는 과정이 바로 부팅 시퀀스 분석입니다. 하드웨어에 전원이 인가되는 순간부터 운영체제가 구동되기까지, U-Boot는 시스템의 상태를 초기화하고 안정적인 환경을 조성하는 핵심 가교 역할을 합니다. 특히 Rockchip RK3399와 같이 복잡한 고성능 SoC 환경에서는 부팅 과정을 다단계 구조로 분리하여 처리합니다. 이번 글에서는 U-Boot의 내부 동작 원리와 코드 흐름, 그리고 실무에서 부팅 로그를 통해 시스템 문제를 진단하는 방법을 정리해 보겠습니다.

Generated by Gemini AI.

핵심 요약

  • U-Boot는 하드웨어 초기화와 운영체제 로딩을 담당하며, RK3399는 ROM, SPL/TPL, U-Boot, Kernel의 다단계 부팅 구조를 가집니다.
  • 부팅 흐름은 board_init_f의 초기 설정과 board_init_r의 드라이버 로드 및 커널 실행 단계로 나뉩니다.
  • 부팅 로그의 출력 지점을 파악하는 것만으로도 시스템 결함의 원인과 해결 방향을 빠르게 특정할 수 있습니다.

1. RK3399 부팅 시퀀스

RK3399와 같은 고성능 SoC는 효율적인 메모리 관리와 하드웨어 초기화를 위해 다단계 부팅 구조를 사용합니다.

단계 명칭 주요 역할 특징
1st ROM 부트 디바이스 검색 및 SPL 로드 SoC 내부 고정 코드 (수정 불가)
2nd SPL/TPL DRAM 초기화 및 PMIC 전원 설정 SRAM 환경에서 동작
3rd U-Boot 주변 장치 로드 및 환경 변수 처리 DRAM 상에서 동작
4th Kernel 리눅스 OS 구동 및 rootfs 마운트 시스템 제어권 이관

2. U-Boot 코드 흐름 분석

U-Boot 내부의 흐름을 이해하면 포팅 시 발생하는 오류를 논리적으로 추적할 수 있습니다.

  • 진입점 (start.S): arch/arm/cpu/armv8/start.S에서 시작합니다. CPU의 Exception Level 설정, MMU 비활성화, 스택 포인터 초기화를 수행합니다.
  • 초기화 함수 (Front vs Rear):
    • board_init_f (Front): DRAM 준비 전 초기화 단계입니다. UART, 타이머 등 최소한의 필수 자원을 세팅합니다.
    • board_init_r (Rear): DRAM 준비 후 시스템이 재배치(Relocation)된 이후입니다. MMC, USB, 네트워크 등 모든 주변 장치 드라이버가 로드됩니다.

3. 부팅 로그 추적 가이드

실제 보드에서 출력되는 로그는 시스템의 상태를 대변합니다. 각 구간별 의미를 파악하는 것이 중요합니다.

로그 구간 단계 상태 및 확인 사항
TPL/SPL 2nd Stage DRAM 트레이닝 성공 여부 및 전압 상태 확인
U-Boot 콘솔 3rd Stage 주변 장치(eMMC, LAN) 초기화 성공 여부
Hit any key 대기 단계 자동 부팅 중단 및 수동 커널 파라미터 수정 가능
Starting kernel 4th Stage 커널 이미지 압축 해제 및 DTB 로딩 성공 여부

4. 개발을 위한 팁

  • 로그 출력 포인트 활용: UART 로그가 어디서 멈추는지 확인하십시오. TPL에서 멈춘다면 DRAM 물리적 결함이나 클럭 설정을, U-Boot 본체에서 멈춘다면 환경 변수나 부팅 경로를 의심해야 합니다.
  • 보드별 핀 설정 확인: board_init_f 단계에서 UART 출력이 나오지 않는다면 핀먹스(Pinmux) 설정이 올바르게 되었는지 보드 회로도와 비교하십시오.

5. 흔히 하는 실수

  • DRAM 초기화 오류: TPL 로그가 나타나지 않거나 트레이닝에서 계속 실패한다면 메모리 파라미터가 보드의 실제 물리적 사양과 맞지 않을 확률이 매우 높습니다.
  • 부트 파라미터 오타: bootargs에 적힌 파티션 경로나 콘솔 설정이 실제 디바이스 환경과 다르면 커널 부팅 직후 화면이 멈추거나 커널 패닉이 발생합니다.

결론

U-Boot는 단순히 운영체제를 실행하는 통로가 아니라 하드웨어의 생명력을 불어넣는 첫 번째 운영자입니다. RK3399와 같은 복잡한 시스템에서는 각 부팅 단계를 분리하여 이해하는 것이 무엇보다 중요합니다. 부팅 과정에서 문제가 발생했을 때 당황하지 말고, 위에서 정리한 단계별 흐름과 로그를 역추적해 보십시오. 시스템의 구조를 명확히 파악하고 있다면 문제 해결은 생각보다 훨씬 빠르게 이루어질 것입니다.

반응형