실제 커널을 담고 있는 것 은 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) 레지스터의 값을 프로그램카운터에 넘겨주고 운명한다.
'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
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.
,