작은항해자의 항해

bootloader(부트로더) 본문

IT 이야기/임베디드

bootloader(부트로더)

작은항해자 2014. 10. 7. 17:33

bootloader

 시스템의 하드웨어를 초기화하고 운영체제의 커널을 메모리에 올려 실행시키는 시스템 프로그램을 의미한다.

시스템의 전원을 on하는 순간 가장 먼저 실행되는 프로그램으로 일반적으로 사용하는 PC의 CMOS와 유사하다고 볼 수 있다.

부트로더는 하드웨어의 초기 설계의도대로 동작하는지 검증하는 과정의 목적을 가지고 있다.

부트로더는 시스템을 초기화 하고 임베디드 운영체제를 탑재하거나 실행하기 위해서 시스템 초기화 코드, 하드웨어 제어프로그램, 네트워크, USB 등의 프로토콜과 일부 파일 시스템을 관리한다.

임베디드 시스템의 전원을 인가할 때 실행되는 것이 부트로더이다.


 부트로더는 일반적으로 시스템 메모리의 물리 주소 0번지부터 위치하며 ROM, Flash ROM, SRAM 등 정적인 메모리에 위치한다. 부트로더는 메모리, 하드웨어 등의 초기화 및 커널과 램 디스크를 램에 적재하여 실행하는 기능을 가지고 있다. 또한 정적 메모리를 사용하고 사용자 인터페이스를 제공한다. 커맨드 모드와 포팅의 편의를 위한 디버그함수도 같이 제공하고 있다.

 부트로더는 커널 등의 프로그램 이미지를 로딩하고 실행시키는 자동 부트 기능이 있는데 자동 부트가 아닌 경우에는 사용자 입력 대기 상태로 된다.

또한 간단한 수준의 디버깅 및  IP 주소 설정 및 자동 부팅 설정 등의 보드 환경 설정과 각종 상태를 체크하는 입력 명령 처리를 하며 롬에 저장되어 있는 커널 및 램디스크 이미지를 타깃 메모리에 로딩하며 커널 프로그램의 시작번지로 점프하여 커널을 부팅한다.


 일반적으로 부트로더가 실행되는 순서는 처음에 전원이 인가되고, 부트로더의 의해서 하드웨어 초기화 작업을 한다. 하드웨어가 초기화되면 자동 부트 모드인지 선택을 하고 만약 자동 부트 모드일 경우 커널 로딩 및 스타트를 수행한다. 하지만 자동 부트 모드가 아닐 경우 명령 입력을 대기하며 커널 부팅 명령의 유무를 기다린다. 커널 부팅 명령이 이루어지면 커널 로딩 및 스타트 작업을 수행하게 된다.


Bootloader 종류


1) GRUB(Grand Unified Bootloader)

 GNU 프로젝트의 Bootloader 이다. 다양한 공개 운영 체제를 비롯하여 연쇄 로딩(chain-loading:Dos, Windosw와 같은 다른 부트로더를 로딩함으로서 지원되지 않는 운영 체제를 로딩하는 것)을 사용하는 상용 운영 체제를 load할 수 있다.


2) LILO(Linux Loader)

 Linux에서 사용되는 bootloader이다. LILO는 특정 파일 시스템에 의존하지 않고, 플로피 디스켓과 하드 디스크에서 Linux 커널 이미지를 부팅할수 있다.


3) ARMBoot

 ARM 계열 지원, 부트 디아비스를 flash ROM, bootp/dhcp/tftp, PCMCIA CF 등을 지원. 지원하는 보드가 적음


4) BLOB(Boot Loader Object)

 ARM 프로세서 기반의 LART 하드웨어를 위한 Bootloader이다. 직렬통신으로 커널 이미지와 램디스크를 다운로드 기능을 지원하나 변종이 많음.


5) PMON

 MIPS 보드를 지원하기 위해 제작된 Bootloader이다.


6) RedBoot(Red Hat Embedded Debug and Bootstrap)

 Red Hat 으로부터 기본 임베디드 시스템의 debug/bootstrap이고, debug firmware(CygMon and GDB stubs)의 대안.

임베디드 리눅스와 eCos와 같은 임베디스 OS System하의 bootstrap 환경을 지원. 네트워크 다운로딩과 디버깅 기능을 포함.

 

7) Angel and Angelboot

 Intel Assabet 보드를 지원하는 초기 Boot Loader


8) U-Boot(Universal Bootloader)

 가장 많이 사용되고 있는 bootloader 로서 PPCBoot 와 ARMBoot 프로젝트를 기반으로 개발되었다.

 다양한 ARM 프로세스 기반의 Target Board를 지원.