Embedded System/Linux Kernel & Device Drivers

리눅스 부팅 프로세스 가이드: U-Boot, 커널, Rootfs의 관계

임베디드 친구 2025. 3. 9. 09:06
반응형

Embedded Linux를 사용하는 시스템에서 부팅 프로세스를 이해하는 것은 시스템의 안정성과 성능을 최적화하는 데 매우 중요합니다. 이번 포스팅에서는 U-Boot, Bootloader, Kernel, Rootfs 간의 관계와 부팅 과정을 Rockchip RK3399 시스템을 기준으로 분석하겠습니다.


Embedded Linux 부트 프로세스란?

Embedded Linux 부트 프로세스는 전원이 켜진 후 시스템이 운영체제를 로드하고 실행하기까지의 과정을 말합니다. 이 과정은 아래와 같은 주요 단계로 나뉩니다:

  1. Boot ROM: 초기 하드웨어 초기화 및 부트로더 로드.
  2. Bootloader (U-Boot): 커널과 Rootfs 로드.
  3. Linux Kernel: 운영체제 커널 실행.
  4. Root Filesystem (Rootfs): 사용자 공간에서 필요한 파일 및 애플리케이션 로드.

U-Boot, Bootloader, Kernel, Rootfs 간의 관계

1. Boot ROM

Boot ROM은 SoC(System on Chip)에 내장된 코드로, 시스템의 첫 번째 부팅 단계를 담당합니다. 이는 다음 단계를 수행합니다:

  • 부트 소스 (eMMC, SD 카드, SPI Flash 등) 선택.
  • Bootloader 로드 및 실행.

Rockchip RK3399에서는 Boot ROM이 첫 번째로 실행되어 U-Boot를 로드합니다.

2. U-Boot (Bootloader)

U-Boot는 Embedded Linux에서 가장 널리 사용되는 Bootloader입니다. 주요 역할은:

  • 하드웨어 초기화.
  • 커널 로드.
  • 디바이스 트리(Device Tree) 전달.
  • Rootfs 마운트.
# U-Boot 명령 예제
=> printenv    # 환경 변수 확인
=> setenv bootargs "console=ttyFIQ0 root=/dev/mmcblk0p1 rw rootwait"
=> bootm 0x00200000

3. Linux Kernel

커널은 운영체제의 핵심으로 하드웨어와 소프트웨어 간의 인터페이스를 제공합니다. U-Boot에서 전달된 커널 이미지(zImage 또는 Image)와 디바이스 트리를 기반으로 실행됩니다.

4. Root Filesystem (Rootfs)

Rootfs는 사용자 공간 애플리케이션 및 라이브러리를 포함하는 파일 시스템입니다. 커널이 초기화된 후 Rootfs를 마운트하여 최종 사용자 환경을 구성합니다.


부팅 과정 분석 (Rockchip RK3399 기준)

Rockchip RK3399의 부팅 과정을 단계별로 분석해 보겠습니다.

1. Boot ROM 단계

  • 부트 소스(eMMC, SPI Flash)를 스캔.
  • U-Boot의 1차 Bootloader(SPL) 로드.

2. U-Boot 단계

1차 부트로더 (SPL)

  • 최소한의 하드웨어 초기화 수행.
  • 2차 부트로더 로드.

2차 부트로더

  • 전체 하드웨어 초기화.
  • 커널 이미지와 디바이스 트리 로드.
  • Rootfs 경로 설정.
# SPL 로그 예제
U-Boot SPL 2023.01 (Jan 16 2025 - 15:00:00)
Trying to boot from MMC1
# U-Boot 로그 예제
U-Boot 2023.01 (Jan 16 2025 - 15:00:00 +0800)
CPU: rk3399
DRAM: 4 GiB
Loading kernel from 0x00200000...
Booting kernel at 0x00208000 with device tree at 0x01f00000...

3. 커널 단계

  • 디바이스 트리 파싱.
  • 메모리 및 디바이스 초기화.
  • Rootfs 마운트 요청.
# 커널 로그 예제
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 5.15.0 (user@buildserver) (gcc version 9.3.0)
[    0.000000] Initializing cgroup subsys memory
[    1.000000] VFS: Mounted root (ext4 filesystem) on device 179:1.

4. Rootfs 단계

  • init 프로세스 실행.
  • 사용자 애플리케이션 로드.
# Rootfs에서 init 프로세스 로그 예제
[    2.000000] init: Starting system initialization
[    2.100000] init: Loading user applications...
[    2.500000] systemd[1]: Started target Basic System.

결론

Embedded Linux 부트 프로세스는 Boot ROM, U-Boot, Linux Kernel, Rootfs의 단계로 이루어져 있으며, 각 단계는 시스템 부팅을 위해 필수적인 역할을 수행합니다. 이번 포스팅에서 Rockchip RK3399 기준으로 부트 프로세스를 설명했으며, 이를 통해 Embedded Linux 시스템의 작동 원리를 이해하는 데 도움이 되길 바랍니다.

반응형