Yocto

Cuprins

  • Introducere
  • Concepte cheie
  • Yocto demo
    • Build imagine Linux cu QEMU
    • Bootare imagine Linux cu QEMU
  • Layere si BSP-uri
  • Retete
  • Build si bootare a unei imagini
    • Build imagine Linux pentru Raspberry Pi
    • Bootare imagine Linux pentru Raspberry Pi
    • Build cu Hob

Yocto

  • Prezentare generala

Este un mediu ce ofera instrumentele necesare pentru a obtine un sistem de operare pretabil pe un device embedded ales. Este un tool de management software care creaza distributii de Linux.
Arhitecturi suportate: ARM, PPC, MIPS, x86(32 & 64 bit)
Este un proiect open source cu o comunitate puternica in spate alcatuita din cele mai mari companii din lumea embedded: Intel, Enea, Wind River, Mentor Graphics, Huawei, MontaVista, Texas Instruments, Sakiman, Juniper, OpenEmbedded and Long Term Support Initiative. Este un proiect umbrela organizat sub Linux Fundation.

Utilizeaza tool-ul de build Bitbake si sintaxa bazata pe metadata din Openembedded. Ofera suport pentru pachetele binare cu extensia “.deb“ “.rpm“ si “.ipk“. Este locul in care cei din industrie pun BSP-uri (Board support package, software specific unei placi de dezvoltare). La fiecare 6 luni se ofera un update cu ultimele surse de kernel, toolchains si versiuni de pachete. Ofera emulatoare si tool-uri care incearca sa usureze activitatea dezvoltatorului.

In momentul actual este solutia ideala pentru cazul in care se doreste dezvoltarea unei solutii embedded complexe utilizand Linux deoarece economisesc timp si bani iar Linux este principalul sistem de operare utilizat pentru device-urile embedded.

  • Componente

Poky (sistem de build)
–OE-core
–Bitbake
–Metadata BSP
–Meta-yocto
–Documentatie

Tool-uri specifice kernel-ului
Pseudo (suplinitorul pentru fakeroot)

ADT plugin pentru Eclipse
Swabber (sistem pentru detectia accesului pe host)
Hob (GUI pentru Bitbake)
Build Appliance (permite utilizarea Yocto de pe sistemele non-Linux)
Eglibc
Autobuilder (tool pentru Q&A si test plans)
GIT sistemul de versionare utilizat preponderent

  • Resurse

Yocto Project incearca sa emita un open standard (standard deschis) pentru comunitatea de embedded Linux si industrie astfel ca:
Dezvoltarea se face pe mailing list-uri publice:

Repository-urile cu codul sursa sunt publice:

Exista documentatie:

Exista rapoarte cu bug-uri si feature requests:

Termeni

  • Append files
    • Fisierele care adauga informatii de build intr-un fisier reteta(recipe)
    • Sistemul de build OpenEmbedded asteapta ca fiecare fisier de append sa indice spre reteta corespunzatoare identica ca nume marcata insa prin fisierul cu extensia „.bb
    • Fisierul append și reteta de baza trebuie sa aiba acelasi nume radacina. Exemplu: „formfactor_0.0.bb” si „formfactor_0.0.bbappend
  • Bitbake
    • BitBake este un engine-ul care urmareste un format specific pentru retete in scopul de a indeplini seturi de sarcini specifice pentru fiecare reteta in parte
    • Este o componenta de baza a proiectului Yocto
  • Build directory
    • Zona utilizata de catre sistemul OpenEmbedded pentru a realiza build-uri
    • Zona este creata atunci cand se ruleaza scriptul de configurare
    • Variabila TOPDIR este utilizata pentru a indica spre aceasta locatie: source poky/oe-init-build-env HOME/mybuilds
  • Source directory
    • Structura de directoare obtinuta dupa download-ul surselor proiectului Yocto
    • Copia locala a repository-ului poky: git://git.yoctoproject.org/poky
    • Contine Bitbake, documentatie, metadata si fisierle suportate de Yocto Project
  • Build system
    • Face referire la sistemul de build OpenEmbedded utilizat de catre proiectul Yocto
    • Este bazat pe proiectul Poky
  • Classes
    • Fisiere care ofera incapsulare logica si mostenire
    • Permite modelelor utilizate in mod obisnuit sa fie definite o singura data si sa fie utilizate in mai multe retete
    • Se termina cu extensia „.bbclass”. Implementeaza un numar variabil de task-uri: bitbake -c listtasks <image or recipe>
  • Configuration file
    • Contin diferite informatii de de configuratie in fisiere cu extensia ”.conf
    • conf/local.conf - este localizat in directorul de build si defineste variabilele ce influenteaza build-ul
    • meta-yocto/conf/distro/poky.conf - contine variabile de configurare specifice distributiei. Este utilizata pentru a builda o imagine
    • meta-raspberrypi/conf/machine/raspberrypi.conf - contine configuratii specifici masinii(board) alese
  • Cross-development toolchain
    • Colectie de unelte software care permit dezvoltare de aplicatii pentru o arhitectura specifica
    • Contin compilatoare, linkere si debuggere specifice arhitecturii
    • Yocto permite de asemenea instalare toolchain-ului pentru o arhitectura aleasa
    • De obicei se refera ca meta-toolchain
  • Image
    • Este rezultatul produs atunci cand Bitbake proceseaza colectia de retete si metadata primite
    • Sunt reprezentate ca binare ce sunt capabile sa ruleze pe arhitecura aleasa sau pe QEMU.
    • Contin informatie specifica
  • Layer
    • Colectie de retete cu diferite reprezentari: nucleu(core), BSP, stiva de aplicatii
    • Este o forma de a organiza metadata
    • Permit izolarea diferitelor tipuri de customizare
  • Metadata
    • Reprezinta fisierele pe care Bitbake le parseaza atunci cand construieste o imagine
    • Include retete, clase si fisiere de configuratie
  • OE-core
    • Are originea in OpenEmbedded
    • Reprezinta nucleul de metadata impartit de OpenEmbedded si Yocto Project
    • Aceasta informatie se regaseste in directorul meta al directorului sursa poky
  • Package
    • In contextul Yocto Project reprezinta rezultatul obtinut dupa ce Bitbake a procesat reteta
    • In general este rezultatul binar compilat produs din sursele unei retete
    • Este o arhiva cu informatii specifice unui build
    • Formate: .deb, .rpm, /.ipk
  • Poky
    • Este reprezentat sub forma unui repository Git ce poate fi clonat
    • Se poate referi la copia locala a directorului sursa utilizat pentru dezvoltare cu Yocto Project
  • Recipe
    • Set de instructiuni ce ajuta la construirea packetelor
    • Descrie locul de unde este luat codul sursa, ce patch-uri se aplica asupra lui, dependinte de librarii sau alte retete, optiuni de configurare respectiv compilare
    • Reprezinta unitatea logica de executie.
    • Format: <package-name>_<version>.bb
    • In general se genereaza 4 packete:
      • binar, populeaza rootfs( sistemul de fisiere root)
      • packet de dezvoltare (-dev)
      • packet cu documentatie (-doc)
      • packet pentru debugging (-dbg)
  • Tasks
    • Grupuri arbitrare de retete
    • Utilizate pentru a organiza retetele pentru a realiza un singur task atunci cand sunt buildate
    • Un task poate fi vazut ca o reteta. De asemenea au extensia „.bb
  • Upstream
    • Referinta la codul sursa si repository-urile ce nu sunt locale sistemului de dezvoltare
    • De exemplu pentru a putea sa lucreze cu o anumita bucata de cod un dezvoltator trebuie sa obtina o copie a acestuia de la o sursa aflata la distanta, numita zona master ce se ocupa cu controlul si intretinerea
  • Hob
    • Interfata grafica pentru Bitbake
    • Usureaza activitatea utilizatorului in interactiunea cu Yocto atat pentru devoltatorii experimentati cat si pentru incepatori
    • Se utilizeaza intr-un mod similar cu cel de utilizare Bitbake
  • Build Appliance
    • Permite buildarea si bootarea unei imagini personalizate Linux cu Yocto Project utilizand sisteme de dezvoltare non-Linux
    • Nu este recomandata utilizarea acestui tool pentru devoltarea de zi cu zi
    • Este utilizat in preponderenta pentru tastare si experimentare cu Yocto
  • Swabber
    • Ofera un mecanism de detectie al accesului pe sistemul gazda
    • Dupa ce detectia are loc se poate analiza accesul pentru a se determina daca acesta este problematic sau nu
    • Este in dezvoltare

Ghidul incepatorului

  • Se obtin sursele:
    • Download poky-dylan-9.0.0.tar.bz2
    • tar xvjf poky-dylan-9.0.0.tar.bz2
    • cd poky-dylan-9.0.0
  • Buildare imagine de demo:
    • source oe-init-build-env
    • MACHINE=qemux86
    • bitbake core-image-minimal
  • Rulare imagine de demo in emulator
    • runqemu qemux86
  • Harta directoarelor
    • bitbake: contine utilitarul Bitbake
    • documentation: contine sursele dun care se obtin documentele
    • scripts: diferite scripturi ce sunt rulate automat, precum „runqemu”
    • meta/classes: clasele utilizate de Bitbake
    • meta-hob: contine informatii necesare utilitarul Hob
    • meta*/recipes-*: retetele prezente in layere

Procesul de dezvoltare

Are cinci etape importante:

  • Definire configuratie utilizata
    • Configurare = definire globala a unor variabile
      • Variabile de build: <BuildDir>/conf/local.conf
      • Configuratie procesor: ./meta/conf/machine/include/qemu.inc
      • Variabile specifice masinii alese: ./meta/conf/machine/qemux86.conf
      • Politici configurare distributie: ./meta-yocto/conf/distro/poky.conf
  • Selectie metadata si patch-uri
    • Retete din care se obtin pachete:
      • ./meta/recipes-core/coreutils/coreutils_6.9.bb (contine informatia despre core utilities versiunea 6.9 pe care il instaleaza)
      • ./meta/recipes-core/coreutils/coreutils (contine patch-uri sau alte fisire suplimentare ce pot fi instalate)
    • Poate fi imbogatita sau extinsa prin layere
    • Compatibila cu OpenEmbedded
  • Configurare specifica BSP
    • Descrie proprietatile specifice masinii utilizate
    • Poate include update-uri ale kernel-ului sau ale altor retete
    • Include configuratia de kernel specifica placii
      • meta-raspberrypi/conf/machine/raspberrypi.conf
    • Implementata de obicei intr-un layer separat
    • De asemenea compatibil cu OpenEmbedded
  • Configurare a politicilor specifice distributiei
    • Se gasesc in fisierele de configurare distributii
    • Distributiile puse la dispozitie de Yocto se gasec in:
      • ./meta-yocto/conf/distro
      • ./meta/conf/distro contine configuratia implicit utilizata atunci cand nu se defineste o distributie
  • Download surse si patching
    • Retetele au definite locatiile surselor
    • Prin intermediul lor Bitbake ia sursele din aproape toate tipurile de locatii
    • De asemenea pe surse se pot aplica patch-uri care ofera update-uri sau eventuale fix-uri

Layere

  • Reprezinta o colectie de retete cu diferite reprezentari: nucleu(core), BSP, stiva de aplicatii
  • Este o grupare de metadata care ofera un numar de functionalitati
  • Se pot crea de utilizator prin 2 metode
    • Cu ajutorul tool-ului: yocto-bsp
    • De mana cu ajutorul comenzii: mkdir
  • Layerele contin particularizari si/sau extensii pentru sistemul de baza:
  • Setarile pentru masinile disponibile sunt pastrate in conf/machine/*.conf
  • Layerele pentru un build sunt adaugate la variabila BBLAYERS aflata la locatia: <BuildDir>/conf/bblayers.conf
  • Layerele pentru BSP ofera suport pentru platforma hardware
  • Defineste configuratia necesara masinii
  • Adauga retete specifice si particularizari cum ar fi:
    • Configuratii de kernel
    • Drivere grafice
    • Retete suplimentare pentru a sprijini caracteristicile hardware

Retetele in Yocto

  • Set de instructiuni necesare pentru a builda un pachet sau o imagine
  • Buildarea unei retete presupune executarea unor functii, ce pot fi suprascrise daca este nevoie
  • Patch-urile aplicate ar trebuii sa fie cat mai precise
  • Atentie la licentele utilizate si la modul de definire al acestora
  • Pentru mai multe informatii se poate consulta:
  • Ordinea de executie a pasilor(taskurilor) unei retete este urmatoarea:
    • do_fetch
    • do_unpack
    • do_patch
    • do_configure
    • do_compile
    • do_install
    • do_populate_sysroot
    • do_package
  • Pot fi definite alte rutine insa trebuie sa pastreze aceasta ordine prestabilita

Exemplu reteta

SUMMARY = "Display or change ethernet card settings"
DESCRIPTION = "A small utility for examining and tuning the settings of your ethernet-based network interfaces."
HOMEPAGE = "http://sourceforge.net/projects/gkernel/"

LICENSE = "GPLv2+"
SRC_URI = "${SOURCEFORGE_MIRROR}/gkernel/ethtool-${PV}.tar.gz"

inherit autotools

Imaginile sistemului de operare

  • Sunt retete cu proprietati distincte
  • Mostenesc alte tipuri de clase
  • Se pot adauga particularitati astfel incat sa se satisfaca anumite cerinte:
    • Folosind fisiere .bb particulare
      • Adauga proprietati noi prin crearea unei imagini personalizate
      • Proprietati necesare:
        • IMAGE_INSTALL = "packagegroup-core-x11-base package1 package2„
        • inherit core-image
      • O noua imagine poate mosteni o clasa sau poate mosteni o alta imagine
    • Folosind grupuri de pachete particulare
      • Este cea mai buna metoda in cazul in care se doreste o imagine mai complexa
      • PACKAGES retine grupurile de pachete utilizate
      • Linia „inherit packagegroup” trebuie sa se afle inainte definirii packetelor utilizate
      • Pentru fiecare grup de pachete definite in tagul PACKAGES se pot definii dependinte cu tagurile: RDEPENS si RRECOMMENDS
      • Grupurile de pachete trebuie definite in IMAGE_INSTALL pentru a putea fi instalate
    • Folosing tagurile IMAGE_FEATURES si EXTRA_IMAGE_FEATURES
      • Pe baza acestor variabile se genereaza automat pachetele si taskurile ce vor fi indeplinite la rularea imaginii
      • EXTRA_IMAGE_FEATURES este definita in local.conf din directorul de build
      • De asemenea sunt utilizate pentru a extinde setarile implicite
    • Folosind local.conf
      • Este limitata la modificarile locale si nu este la fel de flexibila ca atunci cand modificarile au loc in reteta de imagine
      • De retinut ca modificarile realizate in acest fisier se reflecta asupra tuturor imaginilor buildate din directorul de build
      • Trebuie specificat daca se doreste aplicarea regulilor doar asupra unei imagini
      • Se realizeaza cu:
        • IMAGE_INSTALL_append
        • IMAGE_INSTALL_append_pn-<nume_imagine>
        • CORE_IMAGE_EXTRA_INSTALL, afecteaza doar imaginile core-image-*

Exercitii

Exercitiul 1

  • Obiective:
    • Familiarizarea cu organizare metadata din Poky
  • Sumar:
    • Identifica locatia unor fisiere de configuratie, clase Bitbake, si fisiere cu retete
  • Estimated time:
    • 10 minute
  • Referinte:

Exercitiul 2

  • Obiective:
    • Familiarizarea cu layerele din Poky
  • Sumar:
    • Identifica informatia necesara unui nou layer, creaza un layer nou cu comenzile invatate
  • Estimated time:
    • 10 minute
  • Referinte:

Exercitiul 3

  • Obiective:
    • Familiarizarea cu retete din Poky
  • Sumar:
    • Identifica informatia existente in cateva retete. Scrieti o noua reteta iar utilizand bitbake obtineti un nou pachet pentru acea reteta.
  • Estimated time:
    • 20 minute
  • Referinte:

Exercitiul 4

  • Obiective:
    • Familiarizarea cu imaginile din Poky
  • Sumar:
    • Identifica informatia existenta intr-o imagine. Scrieti o noua reteta pentru o imagine iar utilizand bitbake obtineti sistemul de operare specific acelei imagini.
  • Estimated time:
    • 20 minute
  • Referinte:

Exercitiul 5

  • Obiective:
    • Familiarizarea cu tool-ul Hob din Poky
  • Sumar:
    • Identifica modul in care Hob interactioneaza cu proiectul Yocto si informatia aflata in directorul de build.
  • Estimated time:
    • 10 minute
  • Referinte:

Informatie utila

Aceasta informatie este utila in cazul in care se doreste dezvoltarea cu Raspberry Pi. Include si informatie despre cum se pot dezvolta aplicatii pentru aceasta placa de dezvoltare.

Bibliografie

sisteme_integrate/cursuri/curs6.txt · Ultima modificare: 2013/07/31 02:50 de către alexandru.vaduva
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0