Hva er OpenEmbedded og hvordan det forvandler innebygd Linux-utvikling

  • OpenEmbedded lar deg lage fullstendig tilpassede og reproduserbare Linux-systemer for innebygd maskinvare.
  • Yocto-prosjektet bruker OpenEmbedded som kjernen i byggesystemet sitt, noe som forenkler samarbeid og vedlikehold.
  • OpenEmbeddeds lagdelte og oppskriftsmodell gir unik fleksibilitet og skalerbarhet i innebygd utvikling.
  • Et aktivt fellesskap og bedriftsstøtte sikrer langsiktige oppdateringer, dokumentasjon og kompatibilitet.

OpenEmbedded

Har du noen gang lurt på hvordan Linux-systemene vi finner på så mange hverdagsenheter er laget? Fra rutere, TV-er og smarttelefoner til industrisystemer og smartbiler: alle kjører vanligvis på en innebygd Linux-distribusjon som er spesielt skreddersydd for deres behov. Bak denne tilpasningsprosessen ligger prosjekter som OpenEmbedded og Yocto-prosjektet, autentiske nøkkelbrikker i verdenen av innebygd programvare.

I denne artikkelen lærer du i dybden hva OpenEmbedded er, hvordan det er relatert til Yocto-prosjektet, og hvorfor det er så viktig i utviklingen av smarte elektroniske enheter. Vi vil også gå gjennom kjernekomponentene, fordelene, nøkkelkonseptene og hvordan det har revolusjonert utviklingen av tilpassede Linux-systemer for spesifikk maskinvare.

Hva er OpenEmbedded?

OpenEmbedded er et rammeverk for byggeautomatisering og krysskompileringsmiljø som brukes til å lage Linux-distribusjoner for innebygde enheter. Det ble formelt opprettet i 2003 av OpenEmbedded-fellesskapet. Hovedmålet med dette miljøet er forenkle hele oppgaven med å bygge Linux-operativsystembilder skreddersydd til de spesifikke behovene til maskinvaren som skal brukes.

Dette kompileringssystemet er avhengig av filer som heter oppskrifter (oppskrifter), administrert gjennom verktøyet BitBakeDisse oppskriftene spesifiserer Hvordan hver programvarepakke er kompilert, dens avhengigheter, hvilken kode som skal lastes ned og hvordan den skal integreres i det endelige bildet.

OpenEmbedded lar deg generere binærfiler for en rekke arkitekturer og pakke den resulterende programvaren i de mest kjente formatene (ipk, deb, rpm), samt produsere oppstartsbilder klare til bruk på målkortet. Dette gjør det til det anbefalte byggesystemet for Yocto-prosjektet, som det samarbeider tett med.

Hvordan er OpenEmbedded og Yocto-prosjektet relatert?

Yocto-prosjektet er et samarbeidende åpen kildekode-initiativ drevet av Linux Foundation siden 2010, med mål om å legge til rette for opprettelsen av tilpassede og optimaliserte Linux-operativsystemer for innebygde og IoT-enheter. Selv om mange tenker på Yocto som en Linux-distribusjon, er det faktisk et sett med verktøy som lar deg bygge disse distribusjonene fra bunnen av, fullstendig tilpasset.

Samarbeidet mellom de to prosjektene gjenspeiles i at Yocto Project bruker OpenEmbedded som byggemotorKjernedelene i OpenEmbedded-byggesystemet (BitBake og OpenEmbedded-Core) vedlikeholdes i fellesskap av begge prosjektene. I tillegg tilbyr Yocto en referanseimplementering kalt Poky, som inkluderer OpenEmbedded-byggesystemet sammen med et sett med oppskrifter og lag som er klare til å tilpasses.

Når et selskap eller en utvikler ønsker å lage en spesifikk Linux-distribusjon for produktet sitt, Yocto og OpenEmbedded tilbyr verktøyene, arbeidsflyten og fleksibiliteten som trengs for å skape noe unikt, reproduserbart og vedlikeholdbart..

Nøkkelkomponenter: BitBake, Poky, lag og oppskrifter

For å forstå hvordan OpenEmbedded (og dermed Yocto) faktisk fungerer, er det viktig å kjenne til hovedelementene:

  • BitBake: Det er byggemotoren som tolker oppskrifter, løser avhengigheter og utfører oppgaver for å generere det endelige bildet. Den fungerer på samme måte som andre automatiseringsverktøy som Make, men er rettet mot innebygde systemer og tilbyr enestående fleksibilitet.
  • Instruksjoner: Dette er referansedistribusjonen levert av Yocto. Det er ikke et endelig produksjonssystem, men snarere et utgangspunkt (et fungerende eksempel) som kan justeres og utvides ved å legge til nye lag og oppskrifter.
  • OpenEmbedded-Core (OE-Core): Den representerer kjernen av validerte metadata og oppskrifter, felles for flere systemer og avledede distribusjoner. Den tilbyr en grunnleggende samling av delte definisjoner, klasser og konfigurasjoner.
  • Oppskrifter: Hver oppskrift beskriver hvordan man bygger en pakke eller komponent: hvor man laster den ned, hvordan man kompilerer den, hvilke oppdateringer som skal brukes og hvordan man installerer den.
  • Lag: De er samlinger av relaterte oppskrifter eller metadata. Takket være lagmodell, er det mulig å isolere informasjon (for eksempel ett lag for det grafiske brukergrensesnittet, et annet for drivere, et annet for applikasjoner osv.), noe som letter gjenbruk og tilpasning.

Lagmodellen: samarbeid og tilpasning på høyeste nivå

En av de store prestasjonene til OpenEmbedded og Yocto er deres lagbasert utviklingsmodellDette systemet tillater:

  • Samarbeid enkelt, ettersom flere team kan jobbe på uavhengige lag (drivere, mellomvare, applikasjoner osv.) og kombinere dem i henhold til prosjektets behov.
  • Tilpasse hele systemet ved å isolere logikken til hvert delsystem. For eksempel finner vi ofte et spesifikt lag for distribusjonskonfigurasjon (distrolag), andre for støtte for spesifikke kort (BSP-lag), og tilleggslag for applikasjoner, grafiske grensesnitt, mellomvare osv.
  • Unngå konflikter og forenkle vedlikehold: Lag kan overskrive eller supplere instruksjoner fra lavere lag, noe som resulterer i mye mer effektiv administrasjon.

Takket være denne tilnærmingen kan utviklere gjenbruke lag opprettet av fellesskapet eller tilpasse dem for å passe behovene til hvert produkt.

Hva brukes OpenEmbedded/Yocto til? Bruk i den virkelige verden

Både OpenEmbedded og Yocto Project brukes i et stort utvalg av felt og produkter., for eksempel:

  • Industriell robotikk
  • Bilindustrien (infotainment, kontrollenheter, ADAS-systemer osv.)
  • Medisinsk utstyr
  • Smarte apparater
  • IoT-gatewayer
  • Forbrukerelektronikk (TV-er, rutere, dekodere osv.)
  • Telekommunikasjonsutstyr
  • Adgangskontrollsystemer og avansert hjemmeautomatisering

Selskaper som Intel, ARM, NXP, Seeed Studio, iWave Systems og mange flere samarbeider aktivt om utvikling og vedlikehold av OpenEmbedded og Yocto. Økosystemet er så bredt og godt dokumentert at det i dag finnes titalls millioner enheter som kjører distribusjoner generert med disse verktøyene.

Hva er de viktigste fordelene med OpenEmbedded?

OpenEmbedded og integrasjonen med Yocto-prosjektet tilbyr en rekke kraftige fordeler for utvikling av innebygde systemer:

  • Ekstrem tilpasning: Det er mulig å generere Linux-distribusjoner perfekt tilpasset ønsket maskinvare og funksjonalitet, eliminere unødvendige komponenter og optimalisere ressurser.
  • Fleksibilitet på tvers av plattformer: De støtter flere CPU-arkitekturer (ARM, x86/x64, PowerPC, MIPS…) og tillater at den samme arbeidsflyten tilpasses forskjellige enheter.
  • Reproduserbarhet og versjonskontroll: Hele byggeprosessen er versjonsbar og reproduserbar. Det sikrer at hele utviklingsteamet bygger det samme imaget, noe som gir sikkerhet og legger til rette for kontinuerlig integrasjon (CI/CD).
  • Aktiv støtte til lokalsamfunn og næringsliv: Verktøyene har et svært aktivt globalt fellesskap, samt støtte fra store selskaper. Det finnes LTS-avdelinger med langsiktig støtte, hyppige oppdateringer og konstant utvikling.
  • Administrasjon av tilpassede lisenser: Systemet forenkler administrasjon, revisjon og dokumentasjon av lisensene som brukes i hvert bilde eller hver pakke, og muliggjør opprettelse av tilpassede manifester.

Til syvende og sist er OpenEmbedded en av de kraftigste og mest skalerbare løsningene for innebygde prosjekter av alle størrelser.

Tilleggskomponenter og støtteverktøy

I tillegg til kjerneelementene nevnt ovenfor, integrerer eller tillater både Yocto og OpenEmbedded tillegg av:

  • brødrister: Nettgrensesnitt for BitBake og OpenEmbedded, ideelt for konfigurasjon, oppstart av bygg og visning av statistikk.
  • AVLINGER: Docker containerbasert rammeverk, som muliggjør kryssutvikling på forskjellige operativsystemer (Windows, Linux, Mac OS).
  • Utvidbar SDK (eSDK): Det lar deg utvikle tilpassede applikasjoner og teste dem på selve målmaskinvaren, noe som forenkler integrering med det genererte bildet.
  • QEMU-støtte: Det er mulig å emulere målarkitekturer uten behov for fysisk maskinvare takket være QEMU.
  • Validerings- og testverktøy: Integrering av automatiserte tester, regresjoner og integritetskontroller for hver versjon.
eos 2024
Relatert artikkel:
Embedded Open Source Summit 2024 (EOSS 2024): Hva skal du se i denne nye utgaven av arrangementet?

Den grunnleggende arbeidsflyten ved bruk av OpenEmbedded og Yocto

Den typiske prosessen for å lage et tilpasset Linux-bilde ved hjelp av disse verktøyene kan oppsummeres som følger:

  1. Definer arkitekturen, retningslinjene og konfigurasjonene i prosjektfilene.
  2. Last ned kildekoden og de nødvendige ressursene (tarballs, git-repositorier osv.).
  3. Bruk oppdateringer og prosesskilder i et isolert miljø.
  4. Kompiler programvaren og pakk binærfilene i det valgte formatet (deb, rpm, ipk).
  5. Kjør kvalitetskontroller (tilregresjonstester) og generere rapporter.
  6. Opprett rotfilsystemet og oppstartsavbildningene å laste inn på målenheten.

Takket være systemets store fleksibilitet og lagorganiseringen, Du kan gjenbruke store deler av arbeidet ditt til andre prosjekter, enkelt oppdatere bilder eller innlemme nye funksjoner uten å måtte bygge opp hele systemet fra bunnen av..

Ordliste over vanlige konsepter

  • Oppskrifter: De definerer hvordan en gitt programvare kompileres og pakkes. De lagres i lag og kan arve eller overskrive informasjon fra tidligere oppskrifter.
  • Lag: De grupperer relaterte oppskrifter, klasser og konfigurasjoner. De er hierarkiske og legger til rette for modularitet.
  • Metadata: Filer som beskriver oppskrifter, konfigurasjoner og all informasjon som trengs for å bygge imaget. De inkluderer instruksjoner om hvilke versjoner som skal brukes, hvilke oppdateringer som skal installeres, avhengigheter og så videre.
  • Instruksjoner: Referansedistribusjon inkludert i Yocto, ideelt for å ha et funksjonelt utgangspunkt.
  • BitBake: Hovedverktøy for byggeprosessen. Behandler oppskrifter og utfører hele arbeidsflyten.
  • BSP (Styrestøttepakke): Et sett med programvare og oppskrifter spesifikke for et bestemt kort eller en arkitektur.

Hvordan komme i gang med OpenEmbedded og Yocto?

Det første trinnet er å ha en Linux-PC, tilstrekkelig lagringskapasitet (mer enn 80 GB ledig) og flere CPU-kjerner. Ubuntu eller Debian anbefales for kompatibilitet, men andre distribusjoner støttes også. Du kan også kjøre det i en virtuell maskin eller med WSL på Windows, men ytelsen vil være lavere.

Det vanlige er å laste ned referansen Stikke, klon de nødvendige lagene (for eksempel meta-raspberry hvis du vil jobbe med en Raspberry Pi), legg til eller endre de aktuelle oppskriftene, og start kompileringen med BitBake. Når bildet er generert, brennes det til målenhetens lagring eller kort, og etter at datamaskinen er startet opp, har vi vår tilpassede distribusjon klar.

Noen utfordringer og hensyn

Selv om fordelene er enorme, må man ta i betraktning at læringskurven kan være bratt hvis du ikke har noen forkunnskaper om Linux, skripting, Bash eller krysskompilering. I tillegg er byggeprosessen ressurskrevende (RAM, CPU, disk) og kan ta lang tid.

Men når man først forstår det grunnleggende, Mulighetene for tilpasning og optimalisering er enorme, kan du automatisere bildeintegrasjon og oppdateringer, revidere lisensbruk, opprette binære pakkefeeder og sikre ekte skalerbarhet på tvers av utviklingsteam.

I dag representerer både OpenEmbedded og Yocto-prosjektet grunnlaget som de fleste moderne innebygde Linux-systemer er bygget på. De gjør det mulig å transformere et sett med maskinvare- og programvarekrav til et fullstendig tilpasset, optimalisert og bruksklart operativsystem for enhver elektronisk enhet, fra en liten sensor til et industrielt kraftverk eller et tilkoblet kjøretøy.