본문 바로가기
경제

임베디드기사 실기 20부작 3편 Bootloader와 Linux 부팅 과정

by 프레스러쉬 2026. 9. 14.

임베디드기사 실기 20부작 3편
Bootloader와 Linux 부팅 과정

지난 2편에서는 전원 인가 직후 가장 먼저 실행되는 Startup Code와 Reset Handler를 살펴보았습니다. 이번 3편에서는 그 다음 단계인 Bootloader가 무엇을 하는지, 그리고 Linux Kernel이 어떻게 실행 단계까지 넘어가는지를 하나의 흐름으로 정리합니다.

임베디드 시스템의 부팅은 단순히 전원을 켜고 OS가 뜨는 과정이 아닙니다. CPU가 Reset Vector에서 시작하여 최소 실행환경을 만들고, DRAM을 사용할 수 있도록 준비하고, 저장장치에 있는 Kernel Image를 RAM으로 옮긴 뒤, 필요한 부팅 정보를 전달하고, 마지막으로 Kernel Entry Point로 제어권을 넘기는 연속된 단계입니다.

1. Bootloader란 무엇인가?

Bootloader는 시스템 전원이 켜진 뒤 운영체제가 본격적으로 실행되기 전에 동작하는 프로그램입니다. 폴더의 학습자료에서는 Bootloader의 핵심 역할을 RAM 초기화, 하드웨어 기본 설정, Kernel Image 로드, 부팅 파라미터 전달, Kernel Entry Point로의 Jump로 정리하고 있습니다.

대표적인 임베디드 Linux Bootloader로는 U-Boot가 있습니다. Bootloader는 단순히 파일 하나를 실행시키는 프로그램이 아니라, 아직 OS가 없는 상태에서 시스템을 OS가 실행 가능한 상태로 만들어주는 '중간 관리자'라고 이해하면 쉽습니다.

2. Startup Code와 Bootloader의 차이

Startup Code는 Reset 직후 실행되는 가장 초기 단계의 코드입니다. Stack Pointer 설정, CPU Mode, Clock, 기본 Memory 영역, .data와 .bss 초기화와 같은 최소 실행환경 준비가 핵심입니다.

반면 Bootloader는 이보다 한 단계 더 높은 수준에서 외부 DRAM, Flash, eMMC, SD Card, Network와 같은 자원을 사용하고, Kernel Image를 찾아 RAM으로 옮긴 뒤 운영체제에게 제어권을 넘기는 역할을 수행합니다.

구분 Startup Code Bootloader
실행 시점 Reset 직후 초기 실행환경 준비 후
주요 역할 Stack, Clock, .data/.bss, 최소 HW 초기화 DRAM, 저장장치, Kernel Image, Bootargs/DTB
최종 목적 main() 또는 다음 단계 진입 Kernel Entry Point로 Jump
3. Bootloader의 전체 부팅 흐름
Power On / Reset ↓ Reset Vector ↓ Startup Code ↓ Clock / Stack / Basic HW Init ↓ DRAM Controller Init ↓ Bootloader 실행 ↓ Flash / eMMC / SD / Network 접근 ↓ Kernel Image + DTB 로드 ↓ Bootargs 전달 ↓ Kernel Entry Point Jump ↓ Linux Kernel 실행 ↓ Root File System Mount ↓ init / user space

시험에서는 이 흐름 전체를 요구하기보다 일부 단계를 빈칸으로 제시하거나, '메모리 초기화와 Kernel Image 복사를 수행하는 구성요소는 무엇인가?'와 같은 단답형으로 묻는 경우를 생각해 볼 수 있습니다.

4. 왜 DRAM 초기화가 먼저 필요한가?

Bootloader가 Kernel Image를 RAM에 복사하려면 먼저 RAM 자체가 정상적으로 동작해야 합니다. 특히 외부 DDR/SDRAM은 전원만 들어왔다고 바로 사용할 수 있는 것이 아닙니다. Memory Controller에 Timing, Bus Width, Refresh와 같은 설정이 준비되어야 합니다.

이 과정이 실패하면 Bootloader는 Kernel Image를 적재할 공간을 확보하지 못하거나, 복사한 데이터가 깨질 수 있습니다. 따라서 실제 임베디드 장비에서 부팅이 매우 초기에 멈춘다면 Clock과 DRAM 초기화 문제를 우선 의심할 수 있습니다.

5. Kernel Image는 어디에서 오는가?

Kernel Image는 보통 Flash, eMMC, SD Card와 같은 비휘발성 저장장치에 저장됩니다. 시스템 구성에 따라 Network Boot를 사용하면 TFTP와 같은 네트워크 방식으로 받아올 수도 있습니다.

Bootloader는 이 이미지를 찾아 RAM의 지정 위치로 복사합니다. 학습자료에서는 zImage, uImage, vmlinux와 같은 이름을 예로 들고 있습니다. 실제 시험에서는 이러한 파일 이름 자체보다는 '저장장치의 Kernel Image를 RAM으로 옮기는 역할'을 Bootloader와 연결해 기억하는 것이 중요합니다.

6. DTB와 Bootargs는 왜 필요한가?

Kernel은 실행만 된다고 시스템의 모든 하드웨어 구성을 자동으로 알 수 있는 것은 아닙니다. Bootloader는 Kernel이 어떤 Console을 사용할지, Root File System이 어디 있는지, 어떤 부팅 옵션을 사용할지 등의 정보를 Bootargs 형태로 전달할 수 있습니다.

또한 Device Tree를 사용하는 시스템에서는 DTB(Device Tree Blob)를 통해 CPU, Memory, UART, I2C, SPI, GPIO 등 하드웨어 구성을 Kernel에 전달합니다.

시험 답안에서는 너무 길게 쓰기보다 다음 문장처럼 정리하면 좋습니다.

암기 문장
Bootloader는 Kernel Image를 RAM에 적재하고, Bootargs 및 DTB와 같은 부팅 정보를 전달한 뒤 Kernel Entry Point로 제어권을 넘긴다.
7. Kernel Entry Point로 Jump한다는 의미

Bootloader의 마지막 핵심 동작은 Program Counter가 Kernel 시작 주소를 가리키도록 제어권을 넘기는 것입니다. 이 시점부터 Bootloader가 시스템의 주도권을 갖는 것이 아니라 Linux Kernel이 CPU를 제어하게 됩니다.

이후 Kernel은 내부 초기화를 수행하고, Memory 관리, Scheduler, Device Driver, File System, Network와 같은 운영체제의 주요 기능을 활성화합니다.

8. Linux Kernel 이후에는 무엇이 실행되는가?

Kernel이 기본 초기화를 마치면 Root File System을 Mount하고 사용자 공간의 초기 프로세스를 실행합니다. 전통적인 SysV 환경에서는 init/etc/inittab이 중요한 역할을 합니다.

실기 공부에서는 최신 Linux만 기억하기보다 기출 복원자료의 표현도 함께 외우는 것이 좋습니다. 예를 들어 'runlevel을 설정하는 파일'이라는 질문에서는 /etc/inittab이 답이 될 수 있습니다.

9. 부팅 장애를 어떻게 분석할까?

부팅 장애는 어느 단계까지 정상적으로 진행됐는지를 확인하는 것이 핵심입니다.

① Reset Vector 진입 여부
② Startup Code 실행 여부
③ Clock/DRAM 초기화 여부
④ Bootloader Console 출력 여부
⑤ Kernel Image 로드 성공 여부
⑥ DTB/Bootargs 설정 여부
⑦ Kernel Log 출력 여부
⑧ Root File System Mount 여부

이 순서는 단순 암기가 아니라 장애 대응 문제에서도 그대로 활용할 수 있습니다. '부팅이 안 된다'는 현상을 하나로 보지 말고 Boot Sequence를 기준으로 구간을 나누어 원인을 좁히는 것입니다.

10. 실기시험 예상문제

문제 1. 메모리 초기화와 Kernel Image 복사를 수행하고 운영체제에 제어권을 넘기는 구성요소는 무엇인가?

정답: Bootloader

문제 2. Bootloader의 주요 역할을 4가지 쓰시오.

모범답안: DRAM 및 기본 하드웨어를 초기화하고, 저장장치에서 Kernel Image를 RAM에 적재하며, Bootargs/DTB를 설정한 후 Kernel Entry Point로 제어권을 넘긴다.

문제 3. Startup Code와 Bootloader의 차이를 설명하시오.

모범답안: Startup Code는 Reset 직후 Stack, Clock, .data/.bss와 같은 최소 실행환경을 준비한다. Bootloader는 이후 DRAM과 저장장치를 초기화하고 Kernel Image를 RAM에 로드한다. 마지막으로 Bootloader는 필요한 부팅 정보를 Kernel에 전달하고 Kernel Entry Point로 Jump한다.

11. 시험 직전 초압축 암기
Startup Code = Reset 직후 최소 실행환경 준비
Bootloader = DRAM 준비 + Kernel Image 로드 + Bootargs/DTB 전달 + Kernel Jump
Kernel = Process/Memory/File System/Network/Driver 관리
/etc/inittab = 전통 SysV runlevel 설정
12. 책으로 묶을 때 기억해야 할 한 문장

임베디드 시스템의 부팅은 '전원이 켜진다'가 아니라, Reset에서 시작해 실행환경을 만들고, OS 이미지를 찾아 메모리에 적재한 뒤, Kernel에 제어권을 넘기는 단계적인 초기화 과정입니다.

이 전체 흐름을 머릿속에 그림처럼 그릴 수 있으면 Startup Code, Bootloader, Kernel, Root File System, init 관련 문제를 각각 따로 외우지 않아도 하나의 구조로 연결해서 이해할 수 있습니다.

다음 연재 예고

4편 - Linux Kernel은 무엇을 관리하는가?
Process, Memory, File System, Network, Device Driver를 중심으로 Kernel의 역할과 실기시험에 자주 등장하는 핵심 용어를 정리합니다.


태그
#임베디드기사 #임베디드기사실기 #임베디드시스템 #Bootloader #부트로더 #LinuxBoot #리눅스부팅 #StartupCode #ResetVector #UBoot #LinuxKernel #DeviceTree #DTB #Bootargs #KernelImage #RootFileSystem #임베디드리눅스 #자격증공부 #기사실기 #기술블로그