Alpine Linux opstarten op de Raspberry Pi Compute Module
In ons project voor een klant gebruiken we de Raspberry Pi rekenmodule, samen met een aangepaste rekenmodule draagkaart (genaamd de PCCB - Pi Control Carrier Board) die RS485, CAN, RS232, LAN, USB en een step-down voor ingangsspanningen van 6 - 24 V levert. (Als u geïnteresseerd bent in aangepaste hardware en Raspberry Pi embedded ontwikkeling, neem contact op. Het eerste gesprek met ons zal voor u gratis zijn, en kan waardevolle inzichten en ideeën opleveren).
Als besturingssysteem hebben we gekozen voor Alpine Linux. Door zijn alleen-lezen, RAM resident karakter, is het perfect geschikt voor een embedded, duurzame oplossing die het Flash-geheugen niet te veel wil belasten.
De PCCB biedt de mogelijkheid om van SD kaart te booten (met de compute module lite), en om van de ingebouwde eMMC Flash te booten op de "normale" compute modules.
Het booten vanaf SD kaart werkt zonder problemen, maar toen we probeerden te booten vanaf eMMC Flash, liepen we aanvankelijk tegen problemen aan.
Zoals u wellicht weet, bevindt Alpine Linux zich (standaard) volledig op de FAT-partitie van de SD-kaart.
Het probleem: scherm blijft zwart, ACT LED knippert 7 keer
Met de aanpak om simpelweg de gebruikte bestanden op de SD-kaart naar de eMMC te kopiëren (met behulp van de Raspberry Pi boot tool rpiboot op Windows, om de rekenmodules eMMC te mounten) startte de rekenmodule niet op.
Er verschijnt een zwart scherm en de ACT-LED knippert zeven keer, met een pauze, en vervolgens weer zeven keer.
Raadplegen deze pagina op elinux.orgkunnen we zien dat kernel.img niet gevonden werd. De Raspberry Pi boot loader kan de kernel niet vinden, en kan hem daarom niet opstarten.
Het scherm blijft zwart omdat splash screens normaal uitgeschakeld zijn in de config.txt verscheept met Alpine Linux (disable_splash=1), anders zou je een regenboogscherm krijgen.
De oplossing: verplaats de kernel en initramfs naar de hoofdmap
Blijkbaar zijn er verschillen in het vermogen van de Raspberry Pi boot loader keten om toegang te krijgen tot bestanden in submappen voor de eMMC flash en de SD kaart.
De oplossing is dus om de kernel te verplaatsen naar de toplevel / "root" map op de eMMC Flash FAT partitie. (Op Alpine Linux, staat de kernel normaal in de opstarten subdirectory):
Bewerken config.txt om te zeggen:
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
[alle]
usercfg.txt opnemen
Verplaats de kernel en de initramfs naar de bovenste map op de eMMC Flash:
Opmerking: we hebben een aangepaste versie van de initramfs gemaakt, om sleutels toe te voegen voor onze aangepaste package(s) die zich in de subfolder pi3g bevinden.
Het is niet nodig om het loop bestandssysteem (modloop-rpi2), de System.map-rpi2 of config-rpi2 te verplaatsen, u zou zelfs enkele bijkomende configuraties moeten wijzigen om dat te kunnen doen.
Na het toepassen van deze veranderingen, zal Alpine Linux opstarten op de computermodule.
Wij helpen u graag bij het bouwen van embedded oplossingen bovenop de Raspberry Pi - hardware en software. Neem contact met ons op.