Veel (misschien wel alle) apparaten thuis gebruiken Linux, vaak zonder dat je het weet en zonder dat de fabrikant het zegt. Linux is verborgen. Soms herken je aan een foutmelding of opstartmelding dat er wel degelijk een Linux-variant op draait. Linux in een apparaat, veelal zonder scherm, heet embedded Linux. Een goed voorbeeld -dat we allemaal kennen- is natuurlijk Android.
Auteur: Marcel Beelen
Embedded Linux is vaak gebaseerd op een niet-Intel distro. Veel apparaten gebruiken compacte en energiezuinige ARM processoren of SOC chips. Ze sturen speciale hardware aan, zoals speciale schermen, sensoren, (stappen)motoren en meer. Het apparaat dient realtime of nagenoeg realtime in staat te zijn om te reageren op situaties. Fabrikanten kiezen er daarom vaak voor om geen standaard distro te gebruiken, maar een eigen embedded distro. Het embedded softwareproduct in het apparaat wordt dan gedistribueerd als image, dus inclusief kernel, een bootloader, networking functionaliteit en applicaties.
Je Raspberry Pi lijkt heel veel op dit concept, hoewel Raspbian in principe een desktop besturingssysteem is. Hierdoor is het niet per definitie geschikt als embedded besturingssysteem. Het grote voordeel van een desktop OS is dat je snel aan de slag kunt. Alle developerstools zijn aanwezig of gemakkelijk toe te voegen. Er is veel kennis beschikbaar en je hebt het grote voordeel dat er meteen een scherm en toetsenbord aan hangt. Echter, dit is een trage (en te zware) ontwikkelomgeving. Canonical wil met Embedded Ubuntu 2.0 een graantje meepikken in de wereld van Internet of Things en noemt precies deze voordelen.
Voor een embedded product wil je een supercompact en licht besturingssysteem. Het moet snel starten, zeer robuust zijn bij stroomuitval en snel reageren op zijn omgeving. De keuze voor het type SoC legt soms een specifieke ontwikkelomgeving voor embedded software vast. Je krijgt dan te maken met een cross-compiler, waarbij je de code voor bijvoorbeeld je ARM embedded platform bouwt op een Intel processor. Dit is wat Microsoft doet met Windows 10 IoT Core. In de Linux-wereld zou je kiezen voor Yocto, een verzameling tools gebruik makend van Openembedded. Yocto is verre van eenvoudig, maar je maakt een Linux-image voor zo’n beetje elke architectuur. Een eenvoudigere tegenpool is Buildroot. Buildroot maakt ook gebruik van cross-compilers, maar de uitkomst is een meer minimalistisch image. Het image is wat lastiger te onderhouden, omdat er geen package proces bij zit. Je zal bij een update een nieuw image moeten aanmaken. Je gebruikt hier gewoon Makefiles en Kconfig voor.
In plaats van je eigen image te bouwen en te onderhouden, zou je ook een standaard distro kunnen zoeken die iemand al ontwikkeld heeft voor embedded apparaten. De voor- en nadelen hiervan kan je zelf bedenken, dus die zullen we je besparen. Maemo is een embedded distro die redelijk gedocumenteerd is. Je ziet dat er een radio en een GPS navigatiesysteem is wat Maemo gebruikt. Meer specialistisch is OpenWRT, waarmee je images maakt voor allerlei (oudere) routers. In Linux Magazine hebben we hier al enkele malen over geschreven. Commerciëler kan het met producten, zoals Linux Carrier Grade eXpress (CGX) van MontaVista. Overigens zien we ook vaak mijn favoriete tool BusyBox in embedded systemen iets van een commandline aanbieden.
Embedded Linux is boeiende materie. De keuze voor distro’s en tools is enorm en gaat uiteraard veel verder dan in dit korte artikel wordt besproken. Voor professioneel en industrieel gebruik is Yocto aan te bevelen. Voor thuisgebruik -en ook steeds meer voor industrieel gebruik– ben je met Raspbian en je Raspberry Pi aan het goede adres.