본문 바로가기

ARM아키텍쳐

[ARM] Kernel 설치

$ 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등과 같은 파일들이 있는것을 볼 수 있다.

출처::https://www.hackerschool.org/HardwareHacking/%EA%B3%B5%EC%9C%A0%EA%B8%B0%20%ED%95%B4%ED%82%B9%20-%20ARM%20exploitation.pdf

먼저 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