Avviare Alpine Linux sul modulo di calcolo Raspberry Pi

Nel nostro progetto per un cliente stiamo usando il Raspberry Pi Compute Module, insieme a una scheda di supporto del modulo di calcolo personalizzata (chiamata PCCB - Pi Control Carrier Board) che fornisce RS485, CAN, RS232, LAN, USB e uno step-down per tensioni di ingresso di 6 - 24 V. (Se siete interessati a hardware personalizzato e Sviluppo embedded di Raspberry Pi, contattaci. La conversazione iniziale con noi sarà gratuita per voi, e potrebbe fornire intuizioni e idee preziose).

Come sistema operativo abbiamo deciso di usare Linux alpino. A causa della sua natura di sola lettura, residente in RAM, è una misura perfetta per una soluzione incorporata e di lunga durata che vuole andarci piano con la memoria Flash.

Il PCCB offre la possibilità di avviare da scheda SD (con il modulo di calcolo lite), e di avviare dalla eMMC Flash integrata sui moduli di calcolo "normali".

Mentre l'avvio da scheda SD funziona senza problemi, quando si cerca di avviare da eMMC Flash, abbiamo inizialmente incontrato dei problemi.

Come forse sapete, Alpine Linux (per default) risiede interamente sulla partizione FAT della scheda SD.

immagine

Il problema: lo schermo rimane nero, il LED ACT lampeggia 7 volte

Con l'approccio di copiare semplicemente i file usati sulla scheda SD sulla eMMC (usando lo strumento di avvio Raspberry Pi rpiboot su Windows, per montare i moduli di calcolo eMMC) il modulo di calcolo non si è avviato.

Viene visualizzata una schermata nera e il LED ACT lampeggia sette volte, con una pausa, poi lampeggia di nuovo sette volte.

Consulenza questa pagina su elinux.orgpossiamo vedere che kernel.img non è stato trovato. Il boot loader del Raspberry Pi non è in grado di localizzare il kernel, e quindi non è in grado di avviarlo.

Lo schermo rimane nero perché gli splash screen sono normalmente disabilitati nel config.txt fornito con Alpine Linux (disable_splash=1), altrimenti si otterrebbe una schermata arcobaleno.

La soluzione: spostare il kernel e initramfs nella cartella principale

Apparentemente ci sono differenze nella capacità della catena del boot loader di Raspberry Pi di accedere ai file nelle sottocartelle della flash eMMC e della scheda SD.

La soluzione è quindi quella di spostare il kernel nella cartella toplevel / "root" sulla partizione eMMC Flash FAT. (Su Alpine Linux, il kernel è normalmente nella cartella boot sottodirectory):

Modifica config.txt per dire:

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
[tutti]
includere usercfg.txt

Spostate il kernel e l'initramfs nella cartella superiore della eMMC Flash:

immagine

Nota: abbiamo creato una versione personalizzata di initramfs, per aggiungere le chiavi per i nostri pacchetti personalizzati che si trovano nella sottocartella pi3g.

Non c'è bisogno di spostare il filesystem del loop (modloop-rpi2), il System.map-rpi2 o il config-rpi2, anzi dovresti cambiare qualche configurazione aggiuntiva per poterlo fare.

Dopo aver applicato queste modifiche, Alpine Linux si avvierà sul modulo di calcolo.

Siamo felici di assistervi nella costruzione di soluzioni embedded su Raspberry Pi - hardware e software. Si prega di mettersi in contatto con noi.