Estou usando o U-Boot em uma placa Cubboardboard 2, sun7i AllWinner A20 para inicializar o ArchLinux ARM. A versão do kernel que eu tenho é a mais recente do sun7i, que é 3.4.103-5-ARCH
, em termos de kernel, está um pouco atrasada, mas é a mais recente dos repositórios.
Estou aprendendo sobre o U-Boot e gostaria de ver se consigo inicializar usando zImage
. Eu já tenho um uImage
que funciona. Este é um exercício para entender seu funcionamento.
Um motivo para isso é que o boot.txt fornecido com ArchLinuxARM contém código para inicializar com um initramfs-linux.img
, mas somente se um zImage
for usado (o código enviado não atende a um initramfs com uImage
).
Eu não estou perguntando como inicializar um initrams com uimage - eu sei como fazer isso. Eu estou perguntando como usar um zImage com U-Boot.
Meu uImage
tem esse cabeçalho:
# 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
Eu posso inicializá-lo manualmente com a seguinte sequência de comandos:
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
Eu extraio o zImage da uImage assim:
$ tail -c+65 < uImage > zImage
Eu vejo que está tudo bem
$ file zImage
zImage: Linux kernel ARM boot executable zImage (little-endian)
Eu então tento inicializar
mmc dev 0
load mmc 0:1 0x42000000 /boot/zImage
setenv bootargs console=${console} root=/dev/sda6 rw rootwait
bootz 0x42000000
Mas isso não funciona. Tudo que vejo é "
Kernel image @ 0x42000000 [ 0x000000 - 0x32c680 ]
Starting kernel ...
Eu presumo que tenha algo a ver com o script.bin
que carrego antes de bootm
. Se tentou carregá-lo antes de bootz
, mas não fez diferença. Eu também leio sobre um arquivo FDT, mas não acho que o pacote do kernel Arch Linix forneça um. No entanto, bootm
não precisou de um, então eu esperaria que bootz
também não (dado que a imagem do kernel é a mesma).
Para ter certeza de que meu zimage
foi ok, criei um novo uImage
e ele foi inicializado corretamente.
Eu deduzi os comandos e endereços acima do boot.txt enviado com o ArchLinuxARM.
Minha versão de inicialização é:
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
Tags linux linux-kernel u-boot