부트로더는 OS가 시동되기 이전에 미리 실행되면서 kernel이 올바르게 시동되기 위해 필요한 모든 관련 작업을 마무리 하고 최종적으로 OS를 시동시키기 위한 목적을 가진 프로그램을 말한다.
즉, 메모리 / 하드웨어(네트워크, 프로세스 속도, 인터럽트), 코드&데이터&스택 영역 설정 및 초기화 / 커널 로더 로딩 / 커널 이미지 로딩 / 커널 로더를 실행해 커널 이미지를 메모리에 올리기를 수행한다.
다시 말해, 임베디드 리눅스 시스템에서 부트로더는 시스템을 기본 수준(basic level)으로 초기화하고 커널을 로드하는 두 가지 주요 작업을 수행한다고 할 수 있다.
전원을 켜거나 리셋한 뒤 부트로더 코드의 첫 줄이 실행될 때, 시스템은 초기 상태에 있다. DRAM 제어기는 시작하지 않았기에 메모리에는 접근할 수 없다. 마찬가지로, 다른 인터페이스도 구성되지 않았기 때문에 NAND 플래시 제어기, MMC 제어기 등을 통해 접근하는 저장소도 사용할 수 없다. 흔히 처음에 동작하는 자원은 하나의 CPU 코어와 약간의 온칩 정적 메모리, 부트 롬이다.
시스템 bootstrap은 몇 단계의 코드로 이루어지고, 각각은 시스템의 더 많은 부분을 작동시키며, 마지막 동작으로 커널을 램에 로드하고 그를 위한 실행 환경을 만든다. 부트로더와 커널 사이의 인터페이스는 아키텍처별로 다르지만, 두가지 공통된 일을 한다.
- 부트로더는 HW 구성정보를 담고 있는 구조체의 포인터를 전달한다.
- 커널 명령줄(kernel command line)의 포인터를 전달한다.
부트로더의 종류는 LILO, GRUB, BLOB, ARMBOOT, RedBoot, U-Boot 등이 있다.
'Embedded Systems > 리눅스' 카테고리의 다른 글
| [Linux] 디바이스 드라이버란 무엇일까? (0) | 2025.10.27 |
|---|---|
| [Linux] 리눅스의 프로그래밍 도구 (GCC, make, gdb 유틸리티) (0) | 2025.10.27 |
| [linux] gcc를 이용한 소스 코드 빌드 과정 (0) | 2025.10.21 |
| /bin/bash^M: bad interpreter: No such file or directory 오류 (0) | 2022.06.09 |
| [WSL] Conda: "command not found" 에러 (우분투 환경) (0) | 2022.03.16 |