리눅스 Booting 과정의 이해
-
Booting의 정의
커널이 메모리에 적재되고 초기화 코드가 수행되면서 하드웨어가 초기화 되고, 자료구조가 초기화 되어 사용자가 사용 가능한 환경을 조성하는 과정
-
Booting의 목적
processor 초기화
memory 점검 및 초기화
각종 하드웨어 점검 및 초기화
커널 loading
사용환경 조성
- 부팅 과정 도식도 - ppt 참조
-
ROM BIOS
- main board의 ROM 안에 내장되어 하드웨어의 Input/Output을 제어하는 프로그램, 크게 3부분으로 나눔
-
POST (Power On Self Test) 과정
- 전원 인가시 모든 부품 초기화 (기존 정보의 불확실성 -> 시스템의 오작동)
- 시스템의 이상유무 테스트
- ex) CPU, VGA, RAM
-
시스템 초기화
- ROM BIOS 내부의 인터럽트 핸들러로 인터럽트 벡터 테이블 구성
- 시스템에 장착된 장치들의 상태정보를 메모리 하위번지(0x0800~0x1000)에 기록
- 확장 BIOS와 SCSI 카드를 검색한 정보를 메모리 하위번지에 기록
-
Disk Boot
-
Boot strap 루틴이 CMOS에 저장된 boot device 순서를 참조하여 boot driver의 boot sector로 부터
나머지 boot strap code를 RAM으로 loader하고 제어를 넘김.
-
-
MBR
- 하드디스크로 부팅하기 위한 bootloader 와 파티션 분할 정보, 부팅에 사용되는 실제 파티션에 대한 정보가 저장된 곳
- 하드디스크 젤 바깥쪽에 위치한 절대 섹터 0(Cylinder 0, Head 0, Sector 1), 크기 1sector(512byte)
- boot sector 에 포함 되지만 모든 boot sector가 MBR은 아님 (boot sector는 각 파티션의 첫 번째 sector를 의미함)
-
Boot Loader의 역할
-
커널을 메모리에 적재하고 제어를 커널로 옮긴다.
- OS를 선택적 부팅
- serial을 통한 커널 다운로드 제공
- embedded system을 위한 bootloader는 BIOS 처럼 하드웨어 초기화 작업도 함
-
-
Boot Loader의 종류
-
LILO
- 전통적인 linux boot loader. assembly로 짜여져 있고 first.S 와 second.S 두 부분으로 이루어져 있다.
-
GRUB
- 기능과 유연성 면에서 LILO 보단 앞섬, 뛰어난 shell interface 제공
-
Blob
- ARM SA-11x0 architecture 에서 사용되는 대표적인 boot loader로서 라이센스 제한이 없고, serial를 통한 다운로드 지원
-
bootsector.S
- 커널에서 제공되는 boot loader로서 압축된 커널의 제일 앞 512byte 공간을 차지
- floppy로 부팅할 때 사용되어 지고, 다른 boot loader로 부팅할 때는 건너 띄는 부분이다
-
-
Blob의 분석
-
~/src/start-ld-script (entry point)
- 32bit ELF 포멧 형태의 output 명시, ARM archtecture에서 실행 됨을 명시.
- 물리 주소 0x00000000에서 수행이 시작
- text, rodata, data, got, bss 영역의 주소 맵핑 정보와 각 영역이4byte 단위로 구성됨을 명시
-
~/src/start.S
-
_start lable
- 외부에서 extern 하여 쓸수 있도록 .global로 선언
- ARM 의 각 exception 의 핸들러를 등록 시켜 놓은 테이블이 있다.
-
reset label
- 모든 인터럽트를 마스크 시킨다. ( 시스템 초기화 시 인터럽트를 받으면 안되지...)
- CPU clock speed 설정
- cpuspeed 는 사용자 정의에 따라 다른 값을 가짐
- memorysetup lable은 어렵다. (나중에)
- ledinit lable
-
-
출처 : 중현이형 노트
이 글은 스프링노트에서 작성되었습니다.
'Study' 카테고리의 다른 글
Register (0) | 2008.11.29 |
---|---|
[OS 만들기] real mode, protected mode (0) | 2008.11.27 |
Linux 명령어 (0) | 2008.11.27 |
Linux Kernel source 분석 기법 (0) | 2008.11.27 |
vim 설정 (0) | 2008.11.24 |