$ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.1.6.tar.xz
$ tar -xvf linux-4.1.6.tar.xz
다음 명령어로 Kernel 설치 및 압축 파일 해제
$ apt-get install lib32ncurses5 lib32ncurses5 bc
$ cd linux-4.1.6
$ make ARCH=arm versatile_defconfig
$ make ARCH=arm menuconfig
다음 명령어로 필요한 패키지 다운로드 및 커널 컴파일 진행
마지막 명령어인 make ARCH=arm menuconfig를 입력하면
사진과 같은 창이 뜬다
여기서 Kernel Feature --> Use the ARM EABI 부분이 [*]가 되어있어야한다
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- all
마지막으로 다음 명령어로 Kernel을 빌드하면 아래와 같이 arch/arm/boot 경로에 zImage가 생성된다
zImage는 vmlinux인 커널 이미지의 특정 섹션들을 제거한 후 생성되는 이미지다.
arch/arm/boot/compressed 경로에 들어가보면
다음 파일들처럼 misc, head, piggy등과 같은 파일들이 있는것을 볼 수 있다.
먼저 vmlinux에서 instruction set만을 추출하여 gzip으로 압축을 진행한 파일이 piggy.gz파일이 된다.
압축이 진행된 piggy.gz 파일을 Head.s가 로드를 진행하고 piggy.o 파일을 만든다.
근데 여기서 piggy.o 파일은 압축파일이기 때문에 압축 해제를 진행하는 파일이 misc.o 파일이 된다.
따라서 최종적으로 head.o 파일과 misc.o 파일을 piggy.o 파일 앞부분에 합쳐 놓은것이 zImage가 되는 것이다.
vmlinux의 section 정보들을 확인해보면 해당 section들에서 결국에 zImage는 .text 부터 .pad section만 남게 된다.
vmlinux의 text section과 pad section들의 데이터를 확인해보자
다음 데이터들은 text와 pad section의 데이터들이고 동일하게 zImage에도 존재하는지 확인해보자
text section은 동일하게 남아있는것을 확인할 수 있다.
pad section도 확인해보면 offset이 vmlinux와 살짝 차이가 나는것을 볼수 있다.
vmlinux의 pad 정보를 offset을 맞춰서 보면 (0x20ab3c --> 0x20ab40)
zImage의 tail 부분과 동일한 데이터를 가진것을 볼 수 있다.
최종적으로 qemu로 커널 부팅을 해보자(arch/arm/boot 경로에서 진행)
커널 부팅이 되면 성공이다.
하지만 다음과 같이 Kernel Panic이란 메시지가 출력된다.
이는 파일시스템이 없기 때문에 발생하는 에러다.
해당 과정은 다음 링크에서 참조했다.
참고:http://www.iamroot.org/xe/index.php?mid=Kernel&document_srl=24595
'ARM아키텍쳐' 카테고리의 다른 글
[ARM] Bootloader + Kernel + RFS (0) | 2023.01.24 |
---|---|
[ARM] Bootloader + Kerenl 부팅 (0) | 2023.01.24 |
[ARM] Boot Loader 설치 (0) | 2023.01.11 |
[ARM] Cross-Compiler 설치 (0) | 2023.01.11 |
[ARM] roplevel2 (0) | 2020.06.26 |