Linux/Kernel Driver

Embedded Linux 부트 프로세스 이해하기

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

Embedded Linux 부트 프로세스 이해하기

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 시스템의 작동 원리를 이해하는 데 도움이 되길 바랍니다.

728x90
반응형

'Linux > Kernel Driver' 카테고리의 다른 글

Board Support Package (BSP) 이해  (0) 2025.03.12
Embedded Linux Kernel 포팅 기본  (0) 2025.03.11
Device Tree의 이해  (0) 2025.03.10
Embedded Linux Kernel 빌드 환경 구축하기  (0) 2025.03.08
Embedded Linux Kernel의 개요  (0) 2025.03.07