我在 Cubieboard 2、sun7i AllWinner A20 板上使用 U-Boot 来启动 ArchLinux ARM。我拥有的内核版本是 sun7i 最新版本,因此3.4.103-5-ARCH
,就内核而言,它有点落后于时代,但它是存储库中最新的。
我正在学习 U-Boot,想看看是否可以使用zImage
.我已经有一个uImage
可以工作的了。这是一个了解其操作的练习。
这样做的原因之一是启动文件ArchLinuxARM 附带的包含使用 a 启动的代码initramfs-linux.img
,但仅当zImage
使用 a 时(附带的代码不适合带有 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