부트로더 분석

Linux/Boot 2009. 6. 5. 05:11

arch/arm/boot/compressed/Head.S  ---> 처음 실행되어 압축 풀어주는 역할

 

arch/arm/kernel/Head.S  ---> 가상 주소를 쓸수 있게 하고, start_kernel 로 제어권을 넘긴다.

 

start_kernel 에서는 로그인까지 담당

 

 

커널이 압축이 되는것은 makefile을 쫓아가면 알 수 있다. (커널 스스로 압축을 풀 수 있는 코드를 붙인다.)

 

플래시에 올라간 압축된 커널 이미지는 다시 램으로 옮겨지고 부트로더 에서 커널 압축을 풀어준다

 

vmlinux(start_kernel 부터의 커널은 여기 다있다.) head.S추가  - 가상주소를 쓸 수 있게 하고(MMU)

 

vmlinuxlds.in  ---> 컴파일 ---> vmlinux.lds (링커 스크립트)  오브젝트 파일을 합칠때 필요한 파일

 

head.o, misc.o, piggy.o를 합치면.---> 2차 vmlinux

(piggy.o는 실제 커널 소스 , head.o는 압축을 풀수있는 소스)

 

그걸 다시 obj copy 하게 되면 zImage 생성 !!

 

misc.c 안에 있는 c로 된소스  decompress_kernel()  그 안에 g_unzip() 요게 압축 풀어주는 역할

c소스가 실행 되려면 스택영역 BSS영역이 필요하다.

      

relocationcode

▶여기에 커널의 압축을 풀고

 h   

 i   

 p   

 s t a c k

 4K

 piggy.o        실제 커널

 misc.o         실제 커널 zImage

 head.o (relocation code 를 갖고있다.)  실제 커널

0xA000 8000

 

0xA000 0000

4k떨어진 곳에 스택 64k떨어진 곳에 힙! 그 이후에다 커널 압축을 푼다.

relocation code :재배치 코드  ▶압축푼 커널을 다시 제 위치로



[출처] 부트로더 분석|작성자 바다사랑


'Linux > Boot' 카테고리의 다른 글

여담...  (0) 2009.06.05
두번째head.S /arch/arm/kernel/head.S 분석 .  (0) 2009.06.05
/kernel/head.S  (0) 2009.06.05
head.S  (0) 2009.06.05
head.S  (0) 2009.06.05

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,