Inicializando o Alpine Linux no módulo de cálculo Raspberry Pi

Em nosso projeto para um cliente estamos usando o módulo de cálculo Raspberry Pi Compute Module, juntamente com uma placa portadora de módulo de cálculo personalizada (chamada PCCB - Pi Control Carrier Board) que fornece RS485, CAN, RS232, LAN, USB e um step-down para tensões de entrada de 6 - 24 V. (Se você estiver interessado em hardware personalizado e Raspberry Pi desenvolvimento incorporado, por favor entre em contato. A conversa inicial conosco será gratuita para você, e poderá fornecer idéias e insights valiosos).

Como sistema operacional, decidimos usar Linux alpino. Devido à sua natureza residente em RAM, só de leitura, é um ajuste perfeito para uma solução embutida e duradoura que quer ir fácil na memória Flash.

O PCCB oferece a possibilidade de arrancar a partir do cartão SD (com o módulo de computação lite), e de arrancar a partir do eMMC Flash incorporado nos módulos de computação "normal".

Enquanto a inicialização a partir do cartão SD funciona sem problemas, quando tentamos inicializar a partir do eMMC Flash, inicialmente nos deparamos com problemas.

Como você deve saber, o Alpine Linux (por padrão) reside inteiramente na partição FAT do cartão SD.

imagem

O problema: a tela fica preta, o LED ACT pisca 7 vezes

Com a aproximação de simplesmente copiar os arquivos usados no cartão SD para o eMMC (usando a ferramenta de inicialização Raspberry Pi rpiboot no Windows, para montar os módulos de computação eMMC) o módulo de computação não inicializou.

Ele exibe uma tela preta, e o LED ACT pisca sete vezes, com uma pausa, então ele pisca novamente sete vezes.

Consultoria esta página em elinux.orgpodemos ver que o kernel.img não foi encontrado. O gestor de arranque Raspberry Pi não é capaz de localizar o kernel, e por isso não é capaz de o arrancar.

A tela fica preta porque as telas de respingo são normalmente desativadas no config.txt enviado com o Alpine Linux (disable_splash=1), caso contrário terias uma tela de arco-íris.

A solução: mover o kernel e o initramfs para a pasta principal

Aparentemente existem diferenças na capacidade da corrente do carregador de inicialização Raspberry Pi para acessar arquivos em subpastas para o flash do eMMC e o cartão SD.

A solução, portanto, é mover o kernel para a pasta toplevel / "root" na partição eMMC Flash FAT. (No Alpine Linux, o kernel está normalmente na pasta porta-bagagens subdirectório):

Editar config.txt ...para dizer:

disable_splash=1
boot_delay=0
gpu_mem=64
[pi2]
kernel=vmlinuz-rpi2
initramfs initramfs-rpi2-pi3g
[pi3]
kernel=vmlinuz-rpi2
initramfs initramfs-rpi2-pi3g
[pi3+]
kernel=vmlinuz-rpi2
initramfs initramfs-rpi2-pi3g
[todos]
incluir usercfg.txt

Mova o kernel e o initramfs para a pasta superior no Flash do eMMC:

imagem

Nota: criámos uma versão personalizada do initramfs, para adicionar chaves para o(s) nosso(s) pacote(s) personalizado(s) que estão localizados na subpasta pi3g.

Não há necessidade de mover o sistema de arquivos de loop (modloop-rpi2), o System.map-rpi2 ou config-rpi2, de fato você teria que mudar alguma configuração adicional para poder fazer isso.

Após aplicar estas alterações, o Alpine Linux iniciará no módulo de computação.

Estamos felizes em ajudá-lo a construir soluções incorporadas em cima do Raspberry Pi - hardware e software. Por favor, entre em contato conosco.