나는 U-Boot를 사용하여 Cubieboard 2 및 sun7i AllWinner A20 보드에서 ArchLinux ARM을 부팅합니다. 내가 가지고 있는 커널 버전은 최신 sun7i 버전이므로 3.4.103-5-ARCH
커널에 관한 한 시대에 약간 뒤떨어져 있지만 저장소에서는 최신 버전입니다.
저는 U-Boot를 배우고 있는데 그것이 사용될 수 있는지 알고 싶었습니다 zImage
. 이미 작동하는 것이 있습니다 uImage
. 다음은 작동 방식을 배우는 연습입니다.
그 이유 중 하나는시작 파일ArchLinuxARM은 a로 부팅하는 코드와 함께 제공되지만 a를 사용할 initramfs-linux.img
때만 가능합니다 zImage
(제공된 코드는 a로 initramfs에 맞지 않습니다 uImage
).
나는 uImage를 사용하여 initram을 시작하는 방법을 묻는 것이 아닙니다. 나는 그 방법을 알고 있습니다. zImage와 U-Boot를 사용하는 방법을 묻고 있습니다.
내 uImage
제목은 다음과 같습니다.
# mkimage -l uImage
Image Name: Linux-3.4.103-5-ARCH
Created: Fri Jan 16 13:34:10 2015
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 3327616 Bytes = 3249.62 kB = 3.17 MB
Load Address: 40008000
Entry Point: 40008000
다음 명령 순서를 사용하여 수동으로 시작할 수 있습니다.
mmc dev 0
load mmc 0:1 0x48000000 /boot/uImage
load mmc 0:1 0x43000000 /boot/script.bin
setenv bootargs console=${console} root=/dev/sda6 rw rootwait
setenv bootm_boot_mode sec
bootm 0x48000000
다음과 같이 uImage에서 zImage를 추출합니다.
$ tail -c+65 < uImage > zImage
확인해보니 괜찮아 보이는군요
$ file zImage
zImage: Linux kernel ARM boot executable zImage (little-endian)
그럼 시작해볼까
mmc dev 0
load mmc 0:1 0x42000000 /boot/zImage
setenv bootargs console=${console} root=/dev/sda6 rw rootwait
bootz 0x42000000
그러나 이것은 작동하지 않습니다. 내가 보는 건 "
Kernel image @ 0x42000000 [ 0x000000 - 0x32c680 ]
Starting kernel ...
script.bin
내 생각엔 내가 이전에 로드한 것과 관련이 있는 것 같아요 bootm
. 이전에 로드를 시도했는데 bootz
별 차이가 없었습니다. FDT 파일도 읽었는데 Arch Linix 커널 패키지가 이를 제공하지 않는 것 같습니다. 그래도 bootm
필요하지 않으므로 그렇지 않기를 바랍니다 bootz
(커널 이미지가 동일하다고 가정).
zimage
내 것이 괜찮은지 확인하기 위해 uImage
새 것을 만들었고 잘 시작되었습니다.
위의 명령과 주소에서 파생되었습니다.시작 파일ArchLinuxARM과 함께 제공됩니다.
내 U-boot 버전은 다음과 같습니다.
U-Boot 2015.01-1 (Jan 22 2015 - 16:37:34) Arch Linux ARM
gcc (GCC) 4.9.2 20141224 (prerelease)
GNU ld (GNU Binutils) 2.25