U-boot: número mágico ruim

1

Eu estou usando o Arduino Yun e quero montar o rootfs sobre o NFS.

Eu baixei fontes openwrt, construí o projeto e depois copiei os rootfs gerados de build_dir/target-mips_34kc_musl-1.1.15/root-ar71xx sob /home/user/srv/nfs/root-ar71xx

no prompt do uboot, a linha de comando que eu usei é:

setenv bootargs root=/dev/nfs rw nfsroot=192.168.1.1:/home/user/srv/nfs/root-ar71xx ip=192.168.1.2:192.168.1.1:192.168.1.1:255.255.255.0::off; bootm
Variáveis do ambiente do

uboot:

ar7240> printenv
bootcmd=bootm 0x9fea0000
bootdelay=4
baudrate=115200
ethaddr=0xb4:0x21:0x8a:0x00:0x00:0x10
ipaddr=192.168.1.2
serverip=192.168.1.1 
stdin=serial
stdout=serial
stderr=serial
ethact=eth0
bootargs=root=/dev/nfs rw nfsroot=192.168.1.1:/home/user/srv/nfs/root-ar71xx     
ip=192.168.1.2:192.168.1.1:192.168.1.1:255.255.255.0::off

Environment size: 319/65532 bytes

Mas eu tenho:

## Booting image at 81000000 ...
Bad Magic Number

Eu li em este link , que há um tipo de encapsulamento para o kernel, a fim de ser "conhecido" pelo U-Boot. É a mesma coisa para os rootfs

Eu tenho outra pergunta, mas não está muito relacionada ao tópico: Depois de construir o projeto eu tenho vários binários (24) sob bin/ar71xx/ :

openwrt-ar71xx-generic-wzr-hp-ag300h-squashfs-tftp.bin 
openwrt-ar71xx-generic-tl-mr11u-v1-squashfs-sysupgrade.bin
openwrt-ar71xx-generic-wzr-hp-g300nh2-squashfs-factory.bin
...

Espero apenas uma imagem do kernel que todas essas imagens devem fazer?

Obrigado antecipadamente.

EDITAR :

Altero a linha cmd para:

setenv bootargs root=/dev/nfs rw nfsroot=192.168.1.1:/home/bou6/srv /nfs/root-ar71xx ip=192.168.1.2:192.168.1.1:192.168.1.1:255.255.255.0::off;  bootm 0x9fea0000

e eu não tenho mais Bad Magic Number , mas ainda questiona:

1- Como podemos saber o endereço de carga do kernel

2- Eu notei que mesmo que o cabo ethernet não seja ramificado, o kernel continua a usar o sistema de arquivos padrão piscando no Yun, existe um método para desativar isso.

    
por Mouin 23.11.2016 / 21:38

1 resposta

0

Não é suficiente apenas definir bootargs e, em seguida, chamar bootm ... você precisa carregar uma imagem do kernel de algum lugar - então a resposta para a pergunta 1 é "escolha qualquer endereço que desejar", desde que seja na RAM e há espaço suficiente para caber na imagem do kernel que você irá carregar nela ".

Para carregar a imagem do kernel, configure um servidor tftp e use o comando tftpboot u-boot. por exemplo,

tftpboot <address> openwrt-ar71xx-generic-wzr-hp-ag300h-squashfs-tftp.bin

(Eu estou supondo que este é o arquivo que contém a imagem do kernel, mas provavelmente não) - então você pode usar o comando bootm , por exemplo.

bootm <address>

Você pode encontrar algumas pistas aqui .

Como um aparte, a linha de comando do kernel ip=... tem este formato:

ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>

Por isso, sinto que deve haver dois dois pontos antes de off , por exemplo,

ip=192.168.1.2:192.168.1.1:192.168.1.1:255.255.255.0:::off

mas eu posso estar errado sobre isso.

Na questão 2, eu esperaria que a inicialização falhasse e o u-boot voltasse ao prompt - não continue e use o sistema de arquivos em flash.

E, finalmente, você precisa listar todos os 24 nomes de arquivos de bin/ar71xx para que possamos determinar qual deles é a imagem do kernel (meu palpite acima não parece certo).

    
por 25.11.2016 / 15:09