Study

리눅스 부팅과정

슈라。 2008. 11. 27. 13:52

 리눅스 Booting 과정의 이해

  • Booting의 정의

    커널이 메모리에 적재되고 초기화 코드가  수행되면서 하드웨어가 초기화 되고, 자료구조가 초기화 되어 사용자가 사용 가능한 환경을 조성하는 과정

  • Booting의 목적

    processor 초기화

    memory 점검 및 초기화

    각종 하드웨어 점검 및 초기화

    커널 loading

    사용환경 조성

  • 부팅 과정 도식도 - ppt 참조
  • ROM BIOS

    • main board의 ROM 안에 내장되어 하드웨어의 Input/Output을 제어하는 프로그램, 크게 3부분으로 나눔
    1. POST (Power On Self Test) 과정

      1. 전원 인가시 모든 부품 초기화 (기존 정보의 불확실성 -> 시스템의 오작동)
      2. 시스템의 이상유무 테스트
      3. ex) CPU, VGA, RAM
    2. 시스템 초기화

      1. ROM BIOS 내부의 인터럽트 핸들러로 인터럽트 벡터 테이블 구성
      2. 시스템에 장착된 장치들의 상태정보를 메모리 하위번지(0x0800~0x1000)에 기록
      3. 확장 BIOS와 SCSI 카드를 검색한 정보를 메모리 하위번지에 기록
    3. Disk Boot

      1. 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