head.S

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

실제 커널을 담고 있는 것 은 pyggi.o 이다. 이것은 1차 vmlinux에서 압축된 상태이다.

 

커널의 텍스트 어드레스 (시작주소) 0xA000 / 8000

   
   
 decompress_kernel (1.)여기에 압축된 커널을 풀고나서
 heap  
 stack  
 piggy.o  
 0xA000 / 8000 (2.)여기로 재배치(relocation)한다.
   
 0xA000 / 0000  

decompressed_kernel 을 이용하여 압축풀린곳의 위치가 (1.)자리

이것을 정말 동작할 위치인 0xA000 / 0000 의 자리에 옮겨와야 한다.

그러므로 압축된 거널안에 잇었던 relocation code를  (1.)

의 위치에 옮기 고  478라인의 reloc_start로 br

이때 r5번은 압축풀린 커널의 시작 주소를 가지고 있고 r8은 압축풀린 커널의 마지막 주소를

그리고 r1번은 커널이 실제 동작할 위치인 (2.) 의 주소를 가지고 있다.

 

arch/arm/boot/compressed/head.S 의 할 일은 거의 끝나가고....

 

arch/arm/kernel/head.S 의 할 일(페이지 테이블 만들기, 가상주소와 물리주소의 변환)

시작

 

세개의 레지스터를 두번째 head.S에 넘겨주게 되는데 r7(아키텍쳐 아이디) 

r0 (;;잊어버렷다)     r4(a000/8000) 레지스터의 값을 프로그램카운터에 넘겨주고 운명한다.


[출처] head.S|작성자 바다사랑

'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
부트로더 분석  (0) 2009.06.05

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

,