zImage 可以与 U-Boot 和 ArchLinuxARM 一起使用吗?

zImage 可以与 U-Boot 和 ArchLinuxARM 一起使用吗?

我在 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

相关内容