De Arduino en Raspberry Pi hebben mijn wereld op zijn kop gezet. Eindelijk weer computers waarmee ik kan experimenteren en uitzoeken hoe ik deze volledig naar mijn wensen kan aanpassen. Beide zijn ondertussen ingehaald door veel betere, maar minder bekende exemplaren.
Henk van de Kamer
Op 24 juni jongstleden werd de Raspberry Pi 4 gelanceerd (www.raspberrypi.org/blog/raspberry-pi-4-on-sale-now-from-35/). Leuk. Lauwe reactie? Tja, ik loop niet echt warm voor deze nieuwe versie. Begrijp me niet verkeerd, de Raspberry Pi was en is een belangrijke ontwikkeling, die in ieder geval mijn wereld op zijn kop heeft gezet. Dat gezegd hebbend: de nieuwe mogelijkheden zijn weliswaar een verbetering, maar komen voor mij veel te laat.
Raspberry Pi 4 model B
De Raspberry Pi heeft vanaf het begin te maken met problematische ontwerpbeslissingen. Zo ontdekte ik al snel op de Raspberry Pi (1) model B dat voedingsproblemen de sd-kaart beschadigden, met als gevolg dat het systeem niet stabiel te krijgen was. De ontwikkelaars meenden dat voedingen superstabiel waren, maar de praktijk is anders. Mogelijk heb je twintig euro of meer over voor een usb-voeding van Apple, maar dan ben je echt een uitzondering. Het probleem met instabiele voedingen werd grotendeels opgelost in de Raspberry Pi (1) model B+.
Het andere grote probleem was het delen van de ethernet- en usb-verbinding naar de processor. Daardoor was gigabit ethernet én USB 3.0 niet mogelijk. De Raspberry Pi 3 model B+ had nog steeds deze koppeling en dat was de reden dat de aanwezige gigagbit ethernet niet boven de 300 Mbit/s uit kwam. In de Raspberry Pi 4 model B hebben usb en ethernet nu elk hun eigen directe verbinding met de processor, waardoor USB 3.0 en gigabit ethernet tegelijk mogelijk zijn.
Daarmee komt het gebruiken van de Raspberry Pi als NAS eindelijk binnen handbereik. Een moderne SATA harddisk kan zo’n 200 MiB/s aan data lezen of schrijven. Dat is grofweg 2 Gbit/s en dat is geen probleem voor SATA revision 2 of hoger en USB 3.0 of hoger. Hier vormt het gigabitnetwerk nog steeds de bottleneck, maar dan wel tien keer beter dan de 100 Mbit/s in bijna alle voorgaande modellen. Voor thuisgebruikers is de Raspberry Pi 4 model B een optie om eens te experimenteren met het zelf bouwen van een NAS.
SD-kaart
Een ander probleem is het booten vanaf een sd-kaart. Deze kaarten zijn oorspronkelijk gemaakt voor camera’s en hebben dus niet de beste wear leveling. Flashgeheugen kan niet onbeperkt herschreven worden. Ofwel de controller – inderdaad, je sd-kaart of usb-stick bevat een processor – moet zorgen dat deze grens niet gemakkelijk bereikt wordt. Voor camera’s wordt het flashgeheugen tijdens het fotograferen gelijkmatig vanaf begin tot einde gevuld, waarna de foto’s worden overgezet op een gewone harddisk en gewist van het flashgeheugen. Dit proces zorgt voor een redelijk gelijkmatig gebruik van het complete flashgeheugen en daardoor kan de controller een stuk simpeler.
Op een traditionele harddisk gebeurt het schrijven van bijvoorbeeld een swapfile altijd dezelfde plek op de harddisk. Daarop geen probleem, maar flashgeheugen zal op die plek dan al snel kapot zijn, terwijl de rest nog werkt. Ofwel, de controller moet zorgen dat de swapfile steeds op een andere plek staat. Om die reden moet je sd-kaartjes kopen die geschikt zijn voor gebruik in embedded apparaten zoals de Raspberry Pi. De controller is zich dan bewust van de problemen die een modern besturingssysteem opwerpt.
Booten
Zoals gezegd heb ik vanaf de Raspberry Pi (1) model B+ geen serieuze problemen met sd-kaartjes ondervonden (www.hetlab.tk/raspberry-pi/raspberry-pi-booten-zonder-microsd-kaart). Het systeem is nog steeds gevoelig voor kleine spanningsvariaties, maar crasht meestal niet. In plaats daarvan staan de logs vol met waarschuwingen als:
Aug 4 14:21:03 raspberrypi kernel: [30.470847] Under-voltage detected! (0x00050005)
Aug 4 14:21:03 raspberrypi kernel: [30.730893] Voltage normalised (0x00000000)
Mogelijk dat een betere voeding helpt, maar dat heb ik er niet voor over. Het probleem ontstaat namelijk als de processor het even erg druk heeft en dat is bij mij niet vaak het geval. Na een crash kon het journaal van het bestandssysteem tot op heden de schade herstellen.
Een andere oplossing is een usb-stick gebruiken. De controllers hierin zijn een stuk beter in de wear leveling. In de oude Raspberry Pi-modellen kan dit door te booten vanaf een sd-kaart en dan vrijwel meteen over te schakelen naar de bestanden op de usb-stick. In de Raspberry Pi 3 model B en hoger kan een bit in de OTP – One-Time Programmable – worden omgezet. Vanaf dat moment kan er alleen nog maar vanaf usb gestart worden. Deze operatie is niet om te draaien, vandaar dat ik het nooit heb uitgeprobeerd.
In feite is de Raspberry Pi schizofreen. Normaal gesproken wordt eerst de gewone CPU gestart en die is dan verantwoordelijk voor het opstarten van de rest, waaronder de GPU. In de Raspberry Pi is dat omgedraaid. Omdat de GPU op dit moment een zwarte doos is, hebben we geen mogelijkheden om iets als U-Boot te starten en zo veel meer opties te bieden. Er waren pogingen om de zwarte doos wat transparanter te maken, maar eerlijk gezegd houd ik de ontwikkelingen rondom de Raspberry Pi niet meer bij. Het systeem heeft veel te veel mankementen om als serieuze server te gebruiken.
Banana Pi R2
Je vraagt je wellicht af waarom ik gezien die conclusie zoveel aandacht aan de Raspberry Pi besteed. Heel simpel, voor een klant kreeg ik voordat de Raspberry Pi 4 uitkwam, een Banana Pi R2 (www.banana-pi.org/r2.html) in handen. Er is intussen een hele serie fruit-Pi’s in omloop. Dit bordje is niet goedkoop, maar dat kan ook niet gezien de specificaties. Zo heeft het een gigabit-switch met vijf – vier LAN en één WAN – gigabit ethernet-aansluitingen en wifi zoals je van een router gewend bent. Exact dat moet het ook worden. Verder bluetooth, infrarood, twee USB 3.0-, een HDMI- en twee SATA aansluitingen. Tot slot een mini PCIe – bijvoorbeeld voor SSD –, micro-sd-slot en 8 GiB eMMC. En dan ben ik vast nog wat los grut vergeten.
Net zoals de Raspberry Pi beginnen we met het maken van een micro-sd-kaart. Hiermee is het programma nand-sata-install te gebruiken om bijvoorbeeld het eMMC-geheugen in te richten. Dat is groot genoeg voor een op Debian gebaseerde server. Het eMMC is vanuit de fabriek leeg, maar in de SoC – System on Chip – wordt naar U-Boot gezocht op dit eMMC of op een micro-sd-kaart. Ik heb daarom de U-Boot-omgeving op het eMMC gezet en dat is vervolgens zo in te richten dat het daar vanaf kan starten of van micro-sd-kaart, usb, SATA of NVMe – de mini PCIe – zoals je in figuur 1 zelf kunt zien.
Opensource
Bovenstaande klinkt allemaal geweldig, maar de praktijk is een stuk ruiger dan je Raspberry Pi-ervaring. Het grootste probleem in mijn ogen is dat Banana Pi-maker Sinovoip niet goed begrijpt wat opensource is. Ja, alle broncode is aanwezig, maar het is een gigantische zooi. Neem bijvoorbeeld de wifi. Die draait op een voor Android gemaakte driver. Nu heeft Android ook een Linux-kernel, maar Google heeft daar het nodige aan gesleuteld. Ofwel, het is een enorme hack om de driver onder Debian aan de praat te krijgen, waarna het niet stabiel is. Iets soortgelijks geldt voor de HDMI-aansluiting. Gelukkig heb ik beide niet nodig.
Een veel groter probleem is de switch. Deze is in routers gebruikelijk en ook die draaien meestal onder Linux. Een switch is echter niet iets wat je standaard in computers aantreft. Om die te gebruiken is in de kernel DSA – Distributed Switch Architecture – aanwezig en die gebruiken is de taak van het netwerkbeheer-programma. Daar zijn welgeteld drie mogelijkheden voor: ip-commando’s, systemd-network en NetworkManager (www.hetlab.tk/embedded/welke-netwerkbeheerder). De laatste is standaard in Armbian – een op Debian gebaseerde distributie speciaal voor ARM processoren – en kan niet overweg met de switch. Ook het “virus” Systemd snapt het niet. Nadat ik beide uitschakelde en ze had verboden om nog iets met het netwerk te doen, kon ik met de oude vertrouwde commando’s aan de slag en heb ik nu een router met harddisk.
Tot slot
De Banana Pi R2 moet helaas eerdaags weer naar de klant. Maar ik heb gezien dat dit het ideale systeem is om te ontdekken hoe embedded computers opstarten. Met name het zelf kunnen compileren van U-Boot is interessant. Om die reden heb ik voor mijzelf een Banana Pi M2 Ultra aangeschaft.