본문 바로가기
나머지/ETC

부트로더의 필요성과 종류

by 무늬만학생 2012. 4. 9.
반응형

1. 개요

부트로더의 종류와 필요성

부트로더는 LILO와 GRUB을 제외하면 주로 임베디드에서 사용되는 부트로더를 대상으로함.



2. 부트로더란?

운영체제의 부팅에 있어서 가장 중요한 것 중에 하나로, 운영체제가 시동되기 전에 미리 실행되어 커널이 올바르게 사용되기 위해 필요한 모든 작업을 마무리 하고 최종적으로 운영체제를 시동시키기 위한 목적을 가진 프로그램을 말한다.

하드디스크의 첫 번째 부팅 섹터인 MBR(Master Boot Record)에 위치하고 있어, 시스템 부팅 시 MBR에 있는 부트로더를 읽어 들여 운영체제가 부팅이 가능하게 한다.

부팅이 완료되면 부트로더에서 해야할 작업에는 크게 세 가지가 있다.

  • 코드 / 데이터 / 스택 영역 설정 및 초기화
  • 커널 로더 및 커널의 이미지 로딩
  • 커널 로더의 실행

리눅스의 부트로더를 사용하게 되면 하드 디스크에 설치되어 있는 리눅스 뿐만 아니라 윈도우 계열의 운영체제와 함께 다중 부팅이 가능하게 한다.



3. 종류

가. LILO (Linux LOader)

LILO는 리눅스를 위한 부트로더이다. LILO는 특정한 파일 시스템에 의지하지 않으며, 최대 16개의 다른 이미지를 시동 메뉴 안에서 선택할 수 있다.

루트 장치와 같은 여러 변수는 각 커널에 독립적으로 설정이 가능하다.

LILO는 MBR이나 파티션의 시동 섹터 안에 위치한다. LILO가 시동섹터안에 존재할 경우 LILO를 불러 오기 위한 링커가 MBR에 위치해야 한다.

시스템이 시작할 때 LILO가 하드 드라이브에 접근하도록 하기 위해 바이오스 드라이버만 사용할 수 있다.

이러한 까닭에 매우 오래된 바이오스의 경우, 접근할 수 있는 영역이 처음 두 개의 하드 디스크 실린더 0부터 1023까지 한정되어 있다. 나중에 나온 바이오스들의 경우 LILO는 32비트 논리 주소 어드레싱(LBA)을 사용 바이오스가 접근하는 모든 하드 디스크의 자료를 실용적으로 접근한다.

LILO는 GRUB를 기본 부트로더로 사용하기 전까지 리눅스 배포판을 위한 기본 부트로더였으며 현재 LILO를 사용하지 않더라도 호환성을 위해 대부분의 리눅스 배포판에 기본적으로 내장하고 있다.

나. GRUB (GNU GRUB)

GNU 프로젝트의 부트로더이다.

대부분의 OS 커널을 불러올 수 있으며, 인자를 넘겨 주는 것도 가능하다.

현재 대부분의 배포판에서 부트로더로 사용되고 있다.

GRUB은 LILO와는 달리 설정 변경 후에 재설치가 필요없다. GRUB는 스테이지 단위로 부팅 과정이 구성되어 있으며 GRUB의 스테이지 1은 MBR에 존재한다. GRUB 설정 파일은 대개 스테이지 2에서 불리며 GRUB이 읽을 수 있는 파티션에 존재한다. 만약 설정 파일이 없다면 명령줄로 이동이 된다.

이들 설정 파일은 “/boot/grub”에 있으며 배포판마다 이름이 다르다.

1) GRUB의 부팅 과정

  • 바이오스가 부팅장치를 찾고 MBR을 읽어온다.
  • MBR에 GRUB 스테이지 1이 있으며, 이는 스테이지 2를 불러 온다.
  • GRUB 스테이지 2는 부트 메뉴나 명령 프롬프트를 보여준다.
  • 기본값 커널이나 사용자가 선택한 커널을 로드한다.

2) GRUB의 지원 기능

  • 동적 설정 가능. (심지어 부팅 시간에도 커널의 인자를 조정할 수 있다.)
  • 사용자 정의 부팅 가능
  • 파일 시스템 직접 접근 가능
  • 다양한 실행 파일 형식 지원
  • 비 멀티부팅 운영체제 지원
  • 사람이 읽을 수 있는 설정 파일을 제공
  • 다양한 파일 시스템 지원
  • 자동으로 압축 해제 지원
  • 디스크 없는 시스템 지원

위의 이미지는 GRUB의 설정 파일이다.

다. BLOB (Boot Loader OBject)

BLOB는 임베디드 리눅스 상에서 LILO와 같이 선택 부팅이 가능하도록 기능을 제공한다.

일반 부트로더가 MBR에서 동작하며 운영체제를 실행할 수 있는 기능을 수행한다면 BLOB는 플래시 메모리 0블록 위치에서 작동한다.

1) BLOB의 기능

  • 타겟 보드를 초기화한 후에 사용자에게 타겟 시스템의 접근 제어를 위해 미니컴을 위한 CLI를 제공 (* CLI : Command Line Interface)
  • 운영체제를 부팅하고 직렬 통신 혹은 이더넷과 같은 인터페이스를 통해서 타겟 시스템에 접근
  • 직렬 통신으로 커널 이미지와 램디스크를 다운로드
  • Flash 메모리 퓨징과 커널에 인수전달 기능 제공

라. U-BOOT

Universal Bootloader의 약자로 PPC와 ARM에 기반을 둔 임베디드용 부트로더이다. PPC, ARM, MIPS, SH, x86 등 다양한 CPU를 지원하며, 오픈소스이다.

U-BOOT의 실행 흐름은 다음과 같다.

1) 어셈블로 되어 있는 StartUp 코드를 실행한다. (cpu/pxa/start.S)

SDRAM으로 Relocation, start_armboot() 호출

2) c코드로 되어 있는 start_armboot() 실행(lib_arm/board.c)

Flash 메모리, 네트워크, Console 초기화

3) main_loop() (common/main.c)

명령어 처리

4) Linux_Booting(lib_arm/armlinux.c)

리눅스 부팅 (커널의 헤더를 읽어 압축을 풀고 리눅스로 제어권을 넘김)

마. ARMBOOT

ARMBOOT는 StrongARM을 위한 공개 소스 펌웨어로 현존하는 부트로더 중 RedBoot의 뒤를 이어 가장 강력한 기능을 제공한다. ARMBOOT는 다중형 Flash 메모리 지원, bootp/dhcp/tftp를 사용한 부트, PCMCIA CF 부트등을 지원한다. 하지만 기본적으로 보드 종류가 적다.

바. RedBoot

RedBoot는 RedHat에서 개발한 임베디드 운영체제인 eCOS 일부를 사용해 만든 프로그램이다. RedBoot는 eCOS 하드웨어 추상화 계층 위에서 동작한다. 네트워크(bootp, dhcp, tftp)와 직렬 통신을 이용한 부팅 기능을 제공하며 Command Line 인터페이스를 제공한다. RedBoot는 ARM, 파워PC는 물론 MIPS, SH, x86에 이르기까지 다양한 CPU에 따른 타겟 보드를 지원하므로 다중 플랫폼을 지원하는 부트로더 가운데 가장 강력하다고 볼 수 있다.

이 외에도 Windows OS의 NTLDR과 컴팩에서 만든 bootldr, Intel에서 만든 Angel 등이 있으며 이 외에도 다양한 부트로더가 존재한다.


출처 : http://chuudok.cafe24.com/blog/297


반응형

'나머지 > ETC' 카테고리의 다른 글

아웃룩 익스프레스6(Outlook Express)6 메시지 경로  (0) 2012.07.17
IMAP과 POP3 비교  (0) 2012.05.04
부트로더 교육  (0) 2012.04.09
리눅스 tgz파일 압축풀기  (0) 2012.04.09
make mrproper make distclean  (0) 2012.04.06