다음 과정은 bootloader와 Kernel을 결합하여 부팅을 진행할 것이다.
우선 Bootloader의 경로로 들어가서 include/configs/versatile.h 파일을 열어보자
CONFIG__BOOTARGS 파라미터를 통해서 시스템의 플래쉬나 하드디스크에 rfs를 저장하기 위해 가상의 메모리를 생성해준다.
--> 128M의 가상 하드디스크 생성
그 이후 common/image.c 파일에서 if 조건문에 define(CONFIG_VERSATILE) 조건을 추가한다.
$ make all ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
이후 다음 명령어로 u-boot를 다시 빌드한다.
$ dd if=/dev/zero of=flash.bin bs=1 count=5M
$ dd if=u-boot.bin of=flash.bin conv=notrunc bs=1
$ mkimage -A arm -C none -O linux -T kernel -d /home/lee/Desktop/linux-4.1.6/arch/arm/boot/zImage -a 0x10000 -e 0x10000 zImage.uimg
$ dd if=zImage.uimg of=flash.bin conv=notrunc bs=1 seek=2M
-->
1. 5M의 크기를 가진 flash.bin 파일을 생성 (0으로 채워진 파일)
2. u-boot.bin 파일을 flash.bin파일로 복사한다.
3.mkimage 명령어를 사용하여 zImage에서 uImage를 생성한다. (zImage.uImage)
4. flash.bin 파일의 0x200000 offset에 zImage.uimage를 생성하여 flash.bin의 구조를 u-boot + uImage의 구조로 생성한다.
$ qemu-system-arm -M versatilepb -m 128M -kernel flash.bin -nographic
다음 명령어로 bootloader + Kernel를 부팅하면 정상적으로 부팅이 되는것을 볼 수 있다.
이때 부트로더 쉘 창에서 bootm 0x210000을 입력해야지 kernel이 load가 되어 부팅이 된다.
(kernel의 offset 위치가 0x200000이고 kernel의 시작 주소가 0x010000이므로)
'ARM아키텍쳐' 카테고리의 다른 글
[ARM] iptime 펌웨어 분석 (1) | 2023.01.25 |
---|---|
[ARM] Bootloader + Kernel + RFS (0) | 2023.01.24 |
[ARM] Kernel 설치 (0) | 2023.01.24 |
[ARM] Boot Loader 설치 (0) | 2023.01.11 |
[ARM] Cross-Compiler 설치 (0) | 2023.01.11 |