Què és OpenEmbedded i com transforma el desenvolupament de Linux embegut

  • OpenEmbedded permet crear sistemes Linux totalment personalitzats i reproduïbles per a maquinari embegut.
  • El Projecte Yocto utilitza OpenEmbedded com a nucli del sistema de compilació, facilitant la col·laboració i el manteniment.
  • El model de capes i receptes d'OpenEmbedded aporta flexibilitat i escalabilitat úniques al desenvolupament embegut.
  • La comunitat activa i el suport empresarial garanteixen actualitzacions, documentació i compatibilitat a llarg termini.

OpenEmbedded

Alguna vegada t'has preguntat com es creen els sistemes Linux que trobem a tants dispositius del dia a dia? Des de routers, televisors i smartphones, fins a sistemes industrials o cotxes intel·ligents: tots ells solen funcionar gràcies a una distribució de Linux embegut especialment adaptada a les seves necessitats. Darrere d'aquest procés d'adaptació s'amaguen projectes com OpenEmbedded i Projecte Yocto, autèntiques peces clau en el món del programari embegut.

En aquest article descobriràs en profunditat què és OpenEmbedded, com es relaciona amb Yocto Project i per què són tan rellevants en el desenvolupament de dispositius electrònics intel·ligents. A més, us guiarem a través dels seus components fonamentals, els seus avantatges, els seus conceptes més importants i com ha revolucionat el desenvolupament de sistemes Linux personalitzats per a maquinari específic.

Què és OpenEmbedded?

OpenEmbedded és un framework d'automatització de compilació i entorn de compilació creuada (cross-compiling) utilitzat per crear distribucions Linux per a dispositius encastats. Va sorgir formalment el 2003 de la mà de la comunitat OpenEmbedded. La gran missió daquest entorn és simplificar tota la tasca de construir imatges de sistema operatiu Linux ajustades a les necessitats més concretes del maquinari que s'utilitzarà.

Aquest sistema de compilació es recolza en fitxers anomenats receptes (recips), gestionades a través de l'eina bitbake. Aquestes receptes especifiquen com es compila cada paquet programari, les seves dependències, quin codi descarregar i com integrar-lo a la imatge final.

OpenEmbedded permet generar binaris per a multitud d'arquitectures i empaquetar el programari resultant en els formats més reconeguts (ipk, deb, rpm), així com produir imatges d'arrencada llistes per utilitzar a la placa de destinació. Això ho converteix en el sistema de compilació recomanat pel Projecte Yocto, amb el qual col·labora molt estretament.

Com es relacionen OpenEmbedded i Yocto Project?

El Projecte Yocto és una iniciativa col·laborativa de codi obert impulsada per la Linux Foundation des del 2010, l'objectiu del qual és facilitar la creació de sistemes operatius Linux personalitzats i optimitzats per a dispositius embeguts i IoT. Tot i que molts pensen que Yocto és una distribució Linux, en realitat és un conjunt d'eines que permeten construir aquestes distribucions des de zero, completament a mida.

La col·laboració entre tots dos projectes queda reflectida en què Yocto Project utilitza OpenEmbedded com a motor de compilació. Les parts principals del sistema de construcció d'OpenEmbedded (BitBake i OpenEmbedded-Core) són mantingudes en conjunt per tots dos projectes. A més, Yocto proporciona una implementació de referència anomenada Poky, que inclou el sistema de compilació d'OpenEmbedded juntament amb un conjunt de receptes i capes llestes per ser personalitzades.

Així, quan una empresa o desenvolupador vol crear una distribució Linux específica per al vostre producte, Yocto i OpenEmbedded proporcionen les eines, el flux de treball i la flexibilitat necessaris per crear alguna cosa única, reproduïble i mantenible.

Components clau: BitBake, Poky, capes i receptes

Per entendre com funciona realment OpenEmbedded (i, per extensió, Yocto), és essencial conèixer-ne els principals elements:

  • BitBake: És el motor de compilació que interpreta les receptes, resol dependències i executa les tasques per generar la imatge final. Funciona de manera similar a altres eines d'automatització com Make, però orientada al món dels sistemes encastats i amb una flexibilitat excel·lent.
  • Poke: És la distribució de referència proporcionada per Yocto. No és un sistema final per a producció, sinó un punt de partida (exemple funcional), que es pot ajustar i ampliar afegint-hi noves capes i receptes.
  • OpenEmbedded-Core (OE-Core): Representa el nucli de metadades i receptes validades, comú a múltiples sistemes i distribucions derivades. Aporta una col·lecció fonamental de definicions, classes i configuracions compartides.
  • Receptes (recips): Cada recepta descriu com es construeix un paquet o component: des d'on descarregar-lo, com compilar-lo, quins pegats aplicar i com instal·lar-lo.
  • Capes (layers): Són col·leccions de receptes o metadades relacionades. Gràcies al model de capes, és possible aïllar la informació (per exemple, una capa per a la GUI, una altra per a drivers, una altra per a aplicacions, etc.), facilitant la reutilització i personalització.

El model de capes: col·laboració i personalització al màxim nivell

Un dels grans èxits d'OpenEmbedded i Yocto és el seu model de desenvolupament basat en capes. Aquest sistema permet:

  • col·laborar fàcilment, ja que múltiples equips poden treballar en capes independents (drivers, middleware, aplicacions, etc.) i combinar-se segons les necessitats del projecte.
  • Personalitzar tot el sistema aïllant la lògica de cada subsistema. Per exemple, solem trobar una capa específica per a la configuració de la distribució (distro layer), altres per a suport de plaques concretes (BSP layers), i capes addicionals per a aplicacions, interfícies gràfiques, middleware, etc.
  • Evitar conflictes i simplificar el manteniment: les capes poden sobreescriure o complementar les instruccions de capes inferiors, fet que es tradueix en una gestió molt més eficient.

Gràcies a aquest enfocament, els desenvolupadors poden reutilitzar capes creades per la comunitat o personalitzar-les per adaptar-les a les exigències de cada producte.

Per què es fa servir OpenEmbedded/Yocto? Usos reals

Tant OpenEmbedded com Yocto Project s'utilitzen en una gran varietat de camps i productes, Com per exemple:

  • Robòtica industrial
  • Automoció (infotainment, centraletes, sistemes ADAS…)
  • Dispositius mèdics
  • Electrodomèstics intel·ligents
  • Gateways d'IoT
  • Electrònica de consum (televisors, routers, set-top boxes…)
  • Equips de telecomunicacions
  • Sistemes de control d'accés i domòtica avançada

Empreses com Intel, ARM, NXP, Seeed Studio, iWave Systems i moltes més col·laboren activament en el desenvolupament i manteniment d'OpenEmbedded i Yocto. L'ecosistema és tan ampli i ben documentat que avui dia hi ha desenes de milions de dispositius executant distribucions generades amb aquestes eines.

Quins són els principals avantatges d'OpenEmbedded?

OpenEmbedded i la seva integració amb el Projecte Yocto ofereixen una sèrie d'avantatges realment potents per al desenvolupament embegut:

  • Personalització extrema: És possible generar distribucions Linux perfectament ajustades al maquinari i la funcionalitat desitjada, eliminant components innecessaris i optimitzant recursos.
  • Flexibilitat multiplataforma: Suporten múltiples arquitectures de CPU (ARM, x86/x64, PowerPC, MIPS…) i permet adaptar el mateix flux de treball a diferents dispositius.
  • Reproduïbilitat i control de versions: Tot el procés de creació és versionable i reproduïble. Es pot garantir que tot l'equip de desenvolupament generi la mateixa imatge, cosa que aporta seguretat i facilita la integració contínua (CI/CD).
  • Comunitat activa i suport empresarial: Les eines tenen una comunitat global molt activa, així com el suport de grans companyies. Hi ha branques LTS amb suport prolongat, actualitzacions freqüents i constant evolució.
  • Gestió de llicències a mida: El sistema facilita la gestió, auditoria i documentació de les llicències utilitzades a cada imatge o paquet, permetent la creació de manifestos personalitzats.

En definitiva, OpenEmbedded és una de les solucions més potents i escalables per a projectes encastats de qualsevol mida.

Components addicionals i eines de suport

A més dels elements fonamentals esmentats, tant Yocto com OpenEmbedded integren o permeten afegir:

  • Toaster: Interfície web per a BitBake i OpenEmbedded, ideal per configurar, llançar compilacions i visualitzar estadístiques.
  • CROPS: Framework basat en contenidors Docker, que facilita el desenvolupament creuat en diferents sistemes operatius (Windows, Linux, Mac OS).
  • Extensible SDK (eSDK): Permet desenvolupar aplicacions personalitzades i provar-les al mateix maquinari objectiu, facilitant la integració amb la imatge generada.
  • Suport QEMU: És possible emular arquitectures destí sense necessitat de disposar del maquinari físic gràcies a QEMU.
  • Eines de validació i testing: Integració de tests automàtics, regressions i controls d integritat per a cada build.
eoss 2024
Article relacionat:
Embedded Open Source Summit 2024 (EOSS 2024): Què veure en aquesta nova edició de l'esdeveniment?

El flux de treball bàsic utilitzant OpenEmbedded i Yocto

El procés típic per crear una imatge Linux personalitzada usant aquestes eines es pot resumir així:

  1. Definir l'arquitectura, les polítiques i les configuracions als fitxers de projecte.
  2. Descarregar el codi font i els recursos requerits (tarballs, repositoris git, etc.).
  3. Aplicar pegats i processar les fonts en un entorn aïllat.
  4. Compilar el programari i empaquetar els binaris al format seleccionat (deb, rpm, ipk).
  5. Executar controls de qualitat (sanity/regression tests) i generar informes.
  6. Crear el sistema de fitxers arrel i imatges d'arrencada per carregar al dispositiu destinació.

Gràcies a la gran flexibilitat del sistema ia l'organització per capes, es poden reutilitzar grans parts del treball per a altres projectes, actualitzar imatges de manera senzilla o incorporar noves funcionalitats sense necessitat de reconstruir tot el sistema des de zero.

Glossari de conceptes habituals

  • Recipes (Receptes): Defineixen com es compila i empaqueta un programari determinat. S'emmagatzemen per capes i poden heretar o sobreescriure informació de receptes anteriors.
  • Layers (Capes): Agrupen receptes, classes i configuracions relacionades. Són jeràrquiques i faciliten la modularitat.
  • Metadada (Metadades): Fitxers que descriuen receptes, configuracions i tota la informació per construir la imatge. Inclouen instruccions sobre quines versions utilitzar, quins pegats aplicar, dependències, etc.
  • Poke: Distribució de referència inclosa a Yocto, ideal per tenir un punt de partida funcional.
  • BitBake: Eina principal de construcció. Processa receptes i executa tot el flux.
  • BSP (Board Support Package): Conjunt de programari i receptes específiques per a una placa o arquitectura concreta.

Com començar amb OpenEmbedded i Yocto?

El primer pas és disposar dun PC amb Linux, suficient capacitat demmagatzematge (més de 80 GB lliures) i diversos nuclis de CPU. Ubuntu o Debian es recomana per la seva compatibilitat, encara que altres distribucions també estan suportades. També es pot treballar en màquina virtual o amb WSL a Windows, encara que el rendiment serà menor.

El més habitual és descarregar la referència Poke, clonar les capes necessàries (per exemple, meta-raspberry si es vol treballar amb una Raspberry Pi), afegir o modificar les receptes apropiades, i llençar la compilació amb BitBake. Un cop generada la imatge, aquesta es grava a la targeta o emmagatzematge del dispositiu objectiu i, després d'arrencar l'equip, ja disposem de la nostra distribució personalitzada.

Alguns reptes i consideracions

Tot i que el ventall d'avantatges és enorme, cal considerar que la corba d'aprenentatge pot ser elevada si no es tenen coneixements previs de Linux, scripts, bash o compilació creuada. A més, el procés de build és exigent en recursos (RAM, CPU, disc) i pot trigar molt de temps.

No obstant això, una vegada entesos els fonaments, les possibilitats de personalització i optimització són enormes, es pot automatitzar la integració i actualització d'imatges, auditar l'ús de llicències, crear feeds de paquets binaris i assegurar una escalabilitat real entre equips de desenvolupament.

Avui dia, tant OpenEmbedded com el Projecte Yocto representen la base sobre la qual es construeixen la majoria dels sistemes Linux encastats moderns. Permeten transformar un conjunt de necessitats de maquinari i programari en un sistema operatiu completament adaptat, optimitzat i llest per utilitzar-lo en qualsevol dispositiu electrònic, des d'un petit sensor fins a una central industrial o un vehicle connectat.