LINUX-BYGGEKLODSER TIL EMBEDDED UDVIKLING

– med Yocto kan du bygge din egen Linux distribution

Af Karsten Langer Eriksen, TechPeople

Yocto er et paraplyprojekt under the Linux Foundation, etableret i 2010 og med stærkt stigende udbredelse i embedded udviklingsmiljøer.

Når det handler om embedded løsninger er Yocto et koncept der er værd at kigge nærmere på. Yocto tilbyder Linux-byggeklodser, der letter udviklingsprocessen, automatisk holder styr på licenser og meget mere. TechPeoples Karsten Langer Eriksen præsenterer i denne artikel tankerne bag Yocto og forklarer, hvorfor stadig flere udviklere anvender systemet.

MCU’erne er efterhånden blevet så kraftige og billige, at selv helt små apparater kan have fordel af at benytte Linux. Derfor bliver Linux et stadig mere udbredt operativsystem til embedded systemer.

Når først man som udvikler har valgt Linux som operativsystem er et af de næste skridt at vælge, hvilken distribution der skal benyttes. Her kan man gå forskellige veje: Kernen kan hentes direkte fra kernel.org, og derefter kan man bygge sit system med f.eks Buildroot. En række chip-producenter tilbyder BSP’er til netop deres MCU’er, men ulempen ved at vælge disse er, at ens produkt bliver meget producent-afhængigt.

Yocto gør det nemmere

Her kan Yocto Linux være en mulighed.

Yocto er et paraplyprojekt under the Linux Foundation, etableret i 2010 og med stærkt stigende udbredelse i embedded udviklingsmiljøer. Blandt deltagerne i Yocto projektet er LG Electronics, Juniper Networks, Timesys, Texas Instruments, Intel, Dell, FreeScale og Enea A/B.

På bagrund af en række afprøvede teknologier som BitBake og OpenEmbedded tilbyder Yocto en metode til at bygge en customiseret Linux-distribution. Ovenpå selve Linux kernen kan man med Yocto konfigurere og bygge rodfilesystem, udvikle applikationer, styre licenser og meget andet. Yocto supporterer i dag ARM, MIPS, PPC og x86 arkitektur.

Yocto indeholder i sig selv ingen kode, men er bygget op af en række layers og recipes. En recipe er en metode, der definerer en komponent med information om, hvor source-koden kan hentes, hvordan komponenten skal konfigureres og bygges og hvortil den skal installeres.

Layers er en samling af recipes, så som distro, BSP eller software layers. F.eks vil meta-Atmel layer indeholde en række recipes til at bygge en Linux distribution til en Atmel processor. Ønsker man selv at ændre eller tilføje funktionalitet til en recipe, er dette ret enkelt at håndtere. Man kan enten lave en ny recipe, som arver fra en eksisterende recipe, eller man kan tilføje til en eksisterende.

Yocto bygger sin komponenter i pakker og supporterer i dag pakkeformaterne opkg og rpm. Disse pakker kan også bruges til at opgradere eksisterende systemer.

Se intro-videoen om Yocto

Toolkit, hardware og licenser

Yocto tilbyder et udviklingsmiljø til applikationer (ADT) med croos-compile toolchain, så der kan udvikles applikationer på en x86 maskine. ADT integrerer med eclipse og tilbyder tools til debug og profiling. Yocto har support for QEMU, så applikationer kan emuleres og testes på en x86 maskine.

Yoctos status som generisk, producent-uafhængigt værktøj betyder, at det er enkelt at have support for flere hardware platforme. De enkelte platforme vil have hvert sit BSP lag og Yocto kan konfigureres til at bygge flere images, hvor kun BSP laget er forskellige. En række chip- og hardware producenter tilbyder BSP lag, så deres MCU moduler og udviklingsboards nemt kan integreres.

Et projekt bygges ved, at man har en image recipe, som indeholder en bekrivelse af den funktionalitet (recipe) der skal inkluderes.

Det kan være en stor udfordring at styre licenser i projekter, som benytter open source komponenter. Og ikke mindst kan det blive dyrt, hvis relevante licenser ikke overholdes korrekt.

Her kan Yocto hjælpe med at bygge en liste af byggede komponenter og hvilke licenser disse benytter. Yocto kan endda sættes op til at fejle, hvis man forsøger at inkludere en pakke med en licenstype man ikke ønsker.

Kom godt i gang

Det er forholdsvis nemt at komme i gang med Yocto. Der findes en meget information og dokumentation på siden https://www.yoctoproject.org/ . Siden indeholder også en quickstart, så man kan komme hurtigt i gang. Følges guiden kan man i løbet af nogle timer have downloaded de nødvendige recipes og være i gang med at bygge sin egen første Yocto Linux distribution.

Hjemmesiden indeholder ligeledes en mængde information omkring hvordan man bygger sin egen applikation og hvordan man tilpasser Yocto til de specifikke behov man har.

Der er utroligt mange håndtag man kan skrue på, når man gerne vil konfigurere sit Yocto projekt. Men de mange muligheder betyder desværre også, at man efter en hurtig start med at bygge sin første Linux kan komme i vanskeligheder. Der kommer en stejl læringskurve før man helt forstår, hvad der sker inde bag byggesystemet. Man kan bruge lang tid på at finde ud af, præcis hvor ens kode bliver bygget eller hvilke parametre der skal bruges for at opnå en bestemt ændring.

Men der findes en stribe guides og manualer som beskriver hvordan man kommer i gang, hvordan man installerer SDK og hvordan et nyt BSP-layer oprettes. Desuden er der en stor guide blot kaldet mega-manual.

Skulle man have brug for hjælp er der også omkring Yocto er aktivt community, hvor der er hjælp at hente på flere forskellige fora og mailinglister.

Vores egne erfaringer

Vi har hos TechPeople konkret deltaget i et projekt hos en kunde, som skulle udvikle en ny generation af sin kommunikationsenhed. Firmaets gamle gateway var ved at være end of life og derfor udviklede vi internt en ny gateway. Man ønskede bl.a. at bringe den eksisterende applikationskode til at køre på den nye gateway, samt på andre platforme.

Efter en grundig evaluering blev Yocto valgt. Yocto havde på forhånd support for den nye arm processor som den nye gateway blev leveret med. Yocto supporterede endvidere en lang række andre processor-familier. Gennem Yocto fik vi en metode til at bruge gennemprøvede teknologier som BitBake og OpenEmbedded. Med Yocto kunne vi også nemt compilere og teste vore applikationer på en x86 inden vores ny hardware var klar.

Vi brugte en del tid på at få lavet recepies til at bygge images til vores nye hardware. I første omgang var ønsket at kunne bygge et image, som kunne køre på en emulator på en PC og senere på vores nye hardware.

Vi byggede en recipe, som kunne bygge vores applikation og vi lavede et image recepi, som definerede hvad vores images skulle indeholde. Gennem arvning mellem recepies blev det nemt ud fra et basis image at lave forskellige images som f.eks. debug-image og release-image. Yocto gav os en enkel måde at inkludere mange pakker. Er der brug for ssh support i et image, findes der allerede en ssh recipe. (Der findes egentlig to, da både openssh og dropbear er supported).

Refaktorering nødvendig

Under processen måtte vi flere gange refaktorere vores Yocto setup, så recepies blev omskrevet. Nogle måtte flyttes til andre layers og vi endte til sidst med at kunne bygge en total pakke med en bootloader, en Linux kerne og et rootfilsystem.

Da vi senere modtog et evalueringsmodul med en helt anden processor-type, som blev leveret med en Yocto-pakke, kunne vi på få uger integrere dette i vores eget Yocto-miljø, så vi også på denne platform kunne køre vores applikation. Vi kunne nu ved blot at ændre en MACHINE variabel bygge en komplet pakke til vores to hardware platforme samt et image, som kunne køres i en emulator på en PC. Under denne proces måtte vi igen refaktorere, men mener nu at vi har en bygge-platform hvor vi enkelt kan bygge pakker til eventuelle nye hardware platforme.

Vi har også erfaret, at selvom vi er blevet i stand til at bygge fulde image-pakker med en enkel kommando og klargøre en bygge maskine med et enkelt script, er der mange ting som ligger gemt nede i de enkelte lag. Det har bl.a. givet udfordringer, når nye udviklere kom på projektet.

Nyttige Links:

https://www.yoctoproject.org

Artikler omkring Yocto:

http://www.rtcmagazine.com/articles/view/103625

https://www.ibm.com/developerworks/library/l-yocto-linux/

Se en intro-video om Yocto her:

https://www.youtube.com/watch?v=zNLYanJAQ3s