Tien jaar geleden zette ik mijn eerste stapjes in een voor mij compleet nieuw gebied: microprocessoren en embedded systemen. In deze afleveringen de hoogte- en dieptepunten. De aanhouder wint en onlangs wist ik een megasucces te behalen. Daarover meer in de volgende aflevering...
Henk van de Kamer
In het eerste decennium van deze eeuw woedde de zogenaamde gigahertz-race. Voor velen misschien een spannende tijd, maar eerlijk gezegd kon het mij niet boeien. In plaats daarvan richtte ik mij op netwerken en het besturingssysteem Linux, waar ik eind vorige eeuw mee in aanraking kwam.
MICROPROCESSOREN
Midden 2010 ontving ik via de toenmalige uitgever van Conrad een Infratec IP stekkerdoos PM211-MIP en een C-Control Pro mini-station. Eind september van dat jaar was duidelijk dat beide apparaten interessant waren, maar niet geschikt voor wat mij sinds de eerste Commodore 64 wél boeit: hoe en waarom werkt het. Ik bestelde daarom een serie Atmel-microprocessoren, waaronder het exemplaar van de Breaduino dat ik een paar nummers terug toonde.
Je vraagt zich waarschijnlijk af waarom ik geen Arduino bestelde? Deze kwam tenslotte in 2005 op de markt. Mogelijk dat ik deze wel heb gezien, maar mij toen niet realiseerde dat daarmee de introductie in dit voor mij nieuwe terrein een stuk gemakkelijker was geweest. Deze omissie maakte ik op 8 oktober 2012 goed door een Arduino Mega 2560 en een relaismodule in China te bestellen.
SYNOLOGY DS111
Bovenstaande bestelling werd gedaan doordat medeauteur Ronald Smit eerder dat jaar een intelligente relaismodule had gekocht. Via internet wist ik op zijn Synology DS412 in Polen een kernel-module te installeren. Daarmee kan de relaiskaart via diens usb naar seriële verbinding worden aangestuurd met een programmeertaal naar keuze. In PC-Active editie 264 gebruikten we PHP via een webpagina. In een kader legden we uit dat een Arduino met een gewone relaismodule waarschijnlijk flexibeler zou zijn.
Dankzij de Arduino-omgeving had ik het geheel al snel werkend op mijn Synology DS111 en dat verhaal is uiteindelijk in ons NAS-boek terechtgekomen. Deze ervaring maakte mij ook duidelijk dat microprocessoren weliswaar leuk zijn, maar dat een ‘normale’ processor veel meer mogelijkheden geeft. Zeker met mijn kennis van Linux en netwerken.
RASPBERRY PI
De Linux-omgeving van de Synology NAS aanpassen is weliswaar mogelijk, maar door vreemde, niet-standaard beslissingen van de fabrikant ook behoorlijk frustrerend. Op 13 maart 2014 besloot ik daarom een Raspberry Pi (1) model B aan te schaffen. Helaas heeft deze eerste versie veel problemen zoals HDMI-detectie, problemen met standaard-usb-voedingen (de officiële voeding gebruikt 5,1 V om het geheel stabiel te maken) en meer.
Een besturingssysteem heeft zijn eigen problemen, waaronder het feit dat op exacte momenten aansturen van hardware onmogelijk is. Maar zo lang precisie in microseconden niet nodig is, wint een Raspberry Pi met zijn GPIO-pinnen het absoluut van een Arduino. Zie Het Lab in PC-Active editie 293 voor een uitgebreidere uitleg.
Sitecom WLR-6000 |
SITECOM WLR-6000
Het grootste probleem met de Raspberry Pi is de niet-standaard SOC (System On a Chip) die gebruikt wordt. De processor, een van de onderdelen in de SOC, wordt bijvoorbeeld niet gebruikt voor het opstarten. Die taak neemt de videochip voor zijn rekening via een berg BLOB’s (Binary Large Object), ofwel code waarvan wij niet mogen weten wat het verder allemaal uitspookt op ons systeem. De persoon die bezig was met een opensource-implementatie, is daarmee gestopt vanwege de vreemde manier waarop de hardware in elkaar steekt.
Tijdens de experimenten met de Raspberry Pi ontdekte ik routers, NAS’sen en andere embedded systemen. Meestal hebben deze ook GPIO-pinnen, zij het niet netjes beschikbaar via een header. Maar dat mag de pret niet drukken! In de eerste categorie heb ik een Sitecom WLR6000 die ooit is gebruikt voor het testen van de IPv6-functionaliteit. Na ontvangst van een marketingafdeling zag ik op de doos dat IPv6 via een toekomstige update beschikbaar zou komen. Dat is nooit gebeurd, dus ik besloot om uit te zoeken of op deze OpenWrt geïnstalleerd kon worden. Mijn eerste experimenten trokken de aandacht van LEDE, in die tijd een afscheiding van Open-Wrt-ontwikkelaars, en in een maand tijd kon het apparaat zijn eerste IPv6-pakketjes versturen. Zie wederom Het Lab in PC-Active editie 291 voor meer achtergrond. Ik heb toen veel geleerd over hoe alle onderdelen in een embedded systeem samenwerken, maar ook veel te snel om het goed te laten bezinken. Desondanks had ik de smaak te pakken en begon ik met het aanleggen van een arsenaal aan gereedschappen om andere apparaten te “mishandelen”.
WD MY CLOUD
Na de routers ontdekte ik dat een NAS veel eenvoudiger is. De reden is dat deze een harddisk kunnen gebruiken voor het besturingssysteem. Zo’n harddisk is in een ander systeem veel gemakkelijker aan te passen dan een flashchip die op het moederbordje is gesoldeerd. Bijna geen enkele SOC kan echter direct opstarten van een Sitecom WLR-6000 M2 Ultra-bord voor een Banana Pi harddisk. Om dat voor elkaar te krijgen, wordt in de flashchip een UEFI - het nieuwere BIOS - equivalent gebruikt. Tegenwoordig is dat meestal U-Boot, maar op oudere apparaten kun je andere varianten tegenkomen.
U-Boot is zeer krachtig, maar de meeste fabrikanten willen niet dat hun hardware een langere levensduur krijgt door het vervangen van het besturingssysteem. De meest walgelijke trucs worden dan ook uitgehaald om dat te voorkomen. Voor het hoogtepunt van deze onzin, zie Het Lab in PC-Active editie 314. Dankzij een boobytrap van Western Digital ligt hier een moederbordje met een gewiste flash, omdat zij het wegschrijven van een nieuwe U-Boot-configuratie bewust hebben getorpedeerd.
Tot op heden heb ik nog geen tijd gehad om uit te zoeken hoe ik een zelf gecompileerde U-Boot kan flashen. Voornamelijk omdat U-Boot in de meeste experimenten niet aangepast hoefde te worden. U-Boot start meestal een Linux-kernel en inital ram-disk die op een aantal locaties gezocht kunnen worden. Vanaf dat punt is het een normale Linux-omgeving en daarin weet ik prima mijn weg te vinden...
M2 Ultra-bord voor een Banana Pi |
BANANA PI
In mei 2019 vroeg een klant of ik van een Banana Pi R2 een router/firewall wilde maken. Dit bordje heeft een tweetal SATA-aansluitingen en een vijftal ethernetpoorten. Deze kunnen onafhankelijk van elkaar gebruikt worden, dus zie het maar als een vijftal netwerkkaarten met even zoveel onafhankelijke netwerken. Via kunnen we dan gaan routeren, ofwel aangeven welke pakketjes doorgestuurd mogen worden naar een ander netwerk. Eén daarvan is natuurlijk het internet. Door het selectief doorlaten hebben we een echte firewall en niet de NAT die door veel fabrikanten van routers als zodanig wordt benoemd.
De SOC heeft een zogenaamde BROM (Boot ROM) en daarin zit de eerste code die door de processor wordt uitgevoerd. Deze zoekt vervolgens of gestart kan worden van een micro-sd-kaart en zo niet wordt de op het bordje gesoldeerde eMMC gebruikt. Omdat deze laatste vanuit de fabriek leeg is, moeten we zelf alles, dus ook U-Boot, installeren om uiteindelijk een Linux-distributie te starten. Kortom, de ideale omgeving om dit eindelijk eens uit te zoeken. Omdat de klant haast had, kon ik helaas niet uitgebreid experimenteren en zit het systeem minder slim in elkaar dan mij voor ogen stond.
Er zijn meer Banana Pi-varianten en een stuk goedkoper is de M2 Ultra. Let op, dit is geen M1-, M2 Berry- of M2 Zero-versie die ook bestaan! Deze hebben slechts één SATA- en netwerkaansluiting, maar dat is voor een zeer zuinige server meer dan voldoende. Het geheel heeft een andere processor in de SOC, maar wel dezelfde BROM voor de eerste fase van het opstarten. Het geheel is in september 2019 besteld, maar pas onlangs is het mij gelukt om hierop een zelf gecompileerde U-Boot en een standaard Debian Bullseye op te starten. Hoe ik dat voor elkaar heb gekregen, is het onderwerp van de volgende aflevering...