2010년 4월 8일 목요일

Boot Loader

Boot Loader
- Boot Code와 Startup Code를 합쳐서 Boot Loader라 칭하며
- "crt0.s" 라는 assembly file 이 Startup Code이며 Boot Code 또한 여기에 같이 담겨있다.

Booting Procedure
- Boot Code를 통한 Hardware setting
- Startup Code 실행
- main()함수로 분기하여 program 실행

Boot Code & Startup Code
PC에서 program의 시작점은 어디인가? main()??
main()도 함수인데 누군가에 의해 호출되야 작동이 되지 않겠는가라는 의문.
또한 C program에서 사용하는 stack이나 heap, static memory등은 누가 만들어 주는가?
이러한 과정 즉,
전원이 들어오고 HW 초기화,
C program이 작동되기 위한 준비과정을 해주는 코드가 바로 Boot Code와 Startup Code이다.

 1. Boot Code
1)Entry Point 지정:
  - entry point는 프로그램의 시작을 알리는 역할을 한다. 즉, 가장 먼저 시작되는 포인트를 정함.
2)Exception Vector 설정(예외처리벡터)
  - ARM의 경우, 예외 처리벡터는 보통 ROM의 시작주소인 0x0번지에 위치한다.
  - 예외 처리 벡터는 예외가 발생했을 때, 예외를 처리하는 코드들이 있는 테이블이다.
  - 각 예외에 할당한 메모리는 4byte이므로 명령어 하나로 예외처리를 해야함.
  - 그래서 벡터에는 실제 핸들러가 있는 위치로 분기하는 분기명령으로 이루어져 있음.
  3)System clock 설정: system에서 사용되는 clock을 설정한다.
4)Memory 초기화: system에서 사용되는 ROM이나 RAM등의 메모리에 필요한 설정을 해주는 과정
 2. Startup Code
1)Interrupt Disable
2)RW_DATA ROM에서 RAM으로 복사
3)ZI 영역 Clear
4)Mode별 Stack생성
5)Heap생성
6)Interrupt Enable
7)main()호출

댓글 없음:

댓글 쓰기