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영역이 필요하다.
|
▶여기에 커널의 압축을 풀고 |
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
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.