Faça o download do kernel + rootfs e inicialize-o com o u-boot

1

Estamos trabalhando com alguns computadores de placa única (SBC). Nós geramos imagens embutidas no linux com o Yocto (usando U-boot como bootloader), e nós o implantamos manualmente em cartões SD. Isso funciona bem por enquanto, quando estamos em fase de teste e não temos muitos SBCs. Mas depois, será definitivamente muito lento.

Temos um servidor central para a rede dos SBCs. Atualmente, este é um servidor DHCP simples, afetando os endereços IP, dependendo dos endereços MAC dos cartões. Primeiro, pensamos em criar um servidor PXE, mas parece que o carregador de ROM de boot interno de alguns SBCs (Freescale i.MX6 sabresd por exemplo) não suporta o processo de inicialização PXE.

Portanto, gostaríamos de carregar apenas o u-boot nas placas e, em seguida, usar um script (um boot.scr) para fazer o download de tudo o que é necessário (zImage, dtb e rootfs) para inicializar. Não queremos usar o NFS (nenhum thin client, queremos que todos os downloads necessários sejam feitos nos cartões). Atualmente, podemos baixar o kernel e o arquivo dtb usando isto:

U-Boot > dhcp ${image}; tftpboot ${fdt_addr} ${fdt_file} ; fdt addr ${fdt_addr} 
U-Boot > bootz ${loadaddr} - ${fdt_addr}

É claro que, como não há rootfs, a inicialização do kernel termina com um pânico no kernel. Mas não sabemos como baixar os rootfs e fazer o kernel usá-lo. Qualquer sugestão de como fazer isso é bem-vinda. Obrigado.

    
por Shan-x 10.04.2015 / 14:28

1 resposta

2

Então, descobri como fazer isso:

tftpboot 0x12000000 zImage
tftpboot ${fdt_addr} ${fdt_file}
tftpboot 0x19000000 core-image-minimal-boot.cpio.gz.u-boot
bootz 0x12000000 0x19000000 ${fdt_addr}

Para criar o .cpio.gz.u-boot , tenho que editar conf/local.conf :

IMAGE_CLASSES += "image_types_uboot"
IMAGE_FSTYPES = "cpio.gz.u-boot"
    
por 21.05.2015 / 09:06