Embedded Linux 부트 프로세스 이해하기
Embedded Linux를 사용하는 시스템에서 부팅 프로세스를 이해하는 것은 시스템의 안정성과 성능을 최적화하는 데 매우 중요합니다. 이번 포스팅에서는 U-Boot, Bootloader, Kernel, Rootfs 간의 관계와 부팅 과정을 Rockchip RK3399 시스템을 기준으로 분석하겠습니다.
Embedded Linux 부트 프로세스란?
Embedded Linux 부트 프로세스는 전원이 켜진 후 시스템이 운영체제를 로드하고 실행하기까지의 과정을 말합니다. 이 과정은 아래와 같은 주요 단계로 나뉩니다:
- Boot ROM: 초기 하드웨어 초기화 및 부트로더 로드.
- Bootloader (U-Boot): 커널과 Rootfs 로드.
- Linux Kernel: 운영체제 커널 실행.
- 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 시스템의 작동 원리를 이해하는 데 도움이 되길 바랍니다.
'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 |