Vous êtes sur la page 1sur 28

Yocto/OE sur Raspberry Pi

Pierre Ficheux (pierre.ficheux@openwide.fr !"ri# $%1&

Yocto / OpenEmbedded sur RPi

Prsentation Open Wide


SSII/SSLL cre en septembre 2001 avec Thales et Schneider Indpendante depuis 2009 nviron 110 salaris sur Paris! L"on et Toulouse #depuis $anvier 2012% Industrialisation de composants open source Trois activits &

OW S"st'me d(In)ormation #*ava/P+P% OW Outsourcin,& hber,ement OW In,nierie& in)ormati-ue industrielle

Yocto / OpenEmbedded sur RPi

Prsentation P.

/tilisateur de lo,iciels libres depuis 1909 /tilisateur de Linu1 depuis 1992 2uteur des 3 ditions de l(ouvra,e 4 Linu1 embar-u 5 # "rolles%! 3'me dition parue en $uin 2012 2uteur 67/ Linu1 8a,a9ine et Open Silicium :TO Open Wide In,nierie! ensei,nant PIT2

Yocto / OpenEmbedded sur RPi

&

:rer une distribution 4 embar-ue 5


:hoisir un outil commercial #Wind ;iver! 8ontavista% /tiliser un outil de ,nration & <uildroot! Open mbedded! OpenWrt! LTI< 2dapter une distribution Linu1 classique

Souvent limit au niveau matriel mpreinte mmoire et )lash importante Temps de dmarra,e 2pproche plut=t 4 pda,o,i-ue 5 >i))icile/impossible ? industrialiser @ dpendances! mise ? $our

:rer la distribution 4 )rom scratch 5


Yocto / OpenEmbedded sur RPi

'

Les principau1 outils disponibles

Open mbedded

8oteur crit en P"thon #bitbake% Puissant mais lourd <as sur des )ichiers de con)i,uration #A% <as sur la commande make 2u dpart un dmonstrateur pour u:libc <on outil mais pas de ,estion de pa-uets /tilis par Google Fiber project >riv de <; B ,'re les pa-uets IPC Orient vers les I2> #Internet 2ccess >evice%
Yocto / OpenEmbedded sur RPi (

<uildroot

OpenWrt

2utres& LTI< #.reescale%! PTDdist #Pen,utroni1%

Open mbedded! introduction

O est une 4 ,nralisation 5 de l(approche utilise dans <; @ framework de compilation croise >marra,e en 200E pour OpenFaurus /tilise un moteur crit en P"thon #bitbake% et un ensemble de r',les utilisant un principe d(hrita,e @ recipe #recette G )ichier .bb) Gre la notion de paquet binaire, contrairement BR #IPC! ;P8! > <% Plusieurs milliers de pa-uets disponibles Par contre &

Peu d(inter)aces de con)i,uration #en cours% Processus de compilation plus lourd -u(avec <;

Tr's utilis dans l(industrie #Hocto Pro$ect%


Yocto / OpenEmbedded sur RPi )

Hocto Pro$ect#s%

Le pro$et 4 chapeau 5 le plus important autour de O #PoI"! ,libc! +ob! 8atchbo1! in)rastructures de test! J2! K% :ontributions Intel! Wind ;iver! 8ontavista! 8entor 6raphics! K #20 participants officiels% 2rchitecte & ;ichard Purdie @ re$oint la Linu1 .oundation en tant -ue 4 )elloL 5 en dcembre 2010 Or,anisation similaire ? celle de l(-uipe du no"au Linu1 4 meritocrac" presided over b" a benevolent dictator 5 .orte prsence d(Intel mais lMen,a,ement de la )ondation Linu1 permet une collaboration )ructueuse NO%

Yocto / OpenEmbedded sur RPi

Hocto Pro$ect#s%! suite


/tilis par les diteurs pour leurs produits commerciau1 /tilis par les )abricants de matriel pour les BSP #Board Support Package% Pas rellement une 4 distribution 5 mais )ournit des templates et outils pour crer des distributions

Support matriel #metaOintel! meta-raspberrypi% Porta,e de composants #metaOmono% :ouches 4 mtier 5 #metaOivi% @ 6 7IPI >istributions #metaO"octo! metaOan,strom%

It's not an embedded Linux distribution it creates a custom one for !ou

PoI" est le pro$et 4 distribution de r)rence 5

PoI" 0Q0 #dann!% succ'de PoI" RQ0 #den"el%


Poky 8.0 (Yocto Project 1.3 Reference Distro)
Yocto / OpenEmbedded sur RPi +

8tadonnes O

Les recettes #Qbb% dcrivent la mani're de compiler un pa-uet #ou plusieurs% pour la cible &
$ bitbake ma_recette $ bitbake vim $ bitbake core-ima e-minima!

/n .bb peut dcrire /7 composant mais ,alement une distribution compl'te Les classes #c!asses"#.bbc!ass% dcrivent des r',les communes au1 recettes #autotools! cmaIe! module! QQQ% Les )ichiers de con)i,uration #.conf%! d)inissent les param'tres de la distribution cible #$oky.conf! !oca!.conf! QQQ%
Yocto / OpenEmbedded sur RPi ,

8tadonnes O ! suite

O est rarement utilis seul Il )ournit les 4 mtadonnes 5 principales #O O:ore% permettant de construire des distributions Les autres couches #la"ers% sont disponibles sur &
http&//la"ersQopenembeddedQor,/la"erinde1

O )ournit cependant des recettes pour des ima,es de test simples #J 8/%
$ c% meta"reci$es-core"ima es" $ !s -1 #.bb b&i!%-a$$!iance-ima e.bb core-ima e-base.bb core-image-minimal.bb core-ima e-minima!-%ev.bb core-ima e-minima!-initramfs.bb core-ima e-minima!-mt%&ti!s.bb
Yocto / OpenEmbedded sur RPi 1%

<itbaIe

LMoutil est -uivalent ? make dans le cas de <uildroot Il parcourt les )ichiers de con)i,uration a)in de dterminer -uels sont les composants ? construire en )onction des recettes Pour cha-ue pa-uet& fetc#! unpack! patc#! configure! compile! stage! install! package! QQQ

Yocto / OpenEmbedded sur RPi

11

:arte ;aspberr" Pi #;Pi%

Yocto / OpenEmbedded sur RPi

1$

;aspberr" Pi! suite


/n 4 P: bon march 5 #de 22 ? EST% Processeur <:82R00 #<roadcom% ? R00 8h9 6P/ 2SU ou S12 8o de ;28 #6P/B:P/% :arte S> #pas de bootloader standard V% thernet! /S< 6PIO! SPI! I2:! K 2udio >SI/:SI #>ispla"/:amera Serial Inter)ace% Sorties vido composite et +>8I

Yocto / OpenEmbedded sur RPi

1&

Installation Hocto/O pour ;Pi

Installation de PoI" #Hocto re)erence distro%


$ it c!one it'"" it.yocto$roject.or "$oky

Installation de la couche ;Pi #metaOraspberr"pi%


$ c% $oky $ it c!one it'"" it.yocto$roject.or "meta-ras$berry$i

:ration du rpertoire de travail


$ . ."oe-init-b&i!%-env r$i-b&i!%

2$out de la couche ;Pi ? conf"bb!ayers.conf


(()*Y+R, -. / 0 ... 1$at23"$oky"meta-ras$berry$i 0 /

2$out du t"pe de machine ? conf"!oca!.conf


4*5678+ -. /ras$berry$i/

Yocto / OpenEmbedded sur RPi

1'

Production d(une ima,e de test

Les archives des pa-uets sont stocIes dans r$ib&i!%"%o9n!oa%s lors de l(tape fetc# La couche ;Pi )ournit une ima,e de test drive de core$image$minimal
$ !s -1 meta-ras$berry$i"reci$es-core"ima es" r$i-basic-ima e.bb r$i-29&$-ima e.bb

On produit l(ima,e par &


$ bitbake r$i-basic-ima e

Par d)aut! PoI" utilise le )ormat de pa-uet ;P8 #voir conf"!oca!.conf% L(ima,e de la S> est produite automati-uement nviron S0 mn sur un 1U :P/ Deon mais 12h sur un :ore2 >uoQQQ
Yocto / OpenEmbedded sur RPi 1(

;pertoires produits
Le rpertoire r$i-b&i!%"%o9n!oa%s contient les
archives tlchar,es #? parta,er V% Le rpertoire r$i-b&i!%"tm$ est utilis comme 4 sortie 5 avec les sousOrpertoires %e$!oy et 9ork $ !s -1 %e$!oy images no"au et archives #rootO)s% produits pa-uets IPC i$k $ !s -1 !in&:-ras$berry$i !icenses 5;PY78< eneric_<P)v= pa-uets ;P8 r$m

Yocto / OpenEmbedded sur RPi

1)

;pertoires produits! suite


Le rpertoire tm$"9ork )ournit d(autres in)ormations &

:ontenu du rootO)iles"stem Liste des pa-uets installs Traces de construction

$ !s -1 9ork"ras$berry$i-$oky-!in&:- n&eabi"rpibasic-image"1.0-r0" ima e-version-info bin insta!!e%_$k s.t:t boot %ev etc !o .%o_$o$&!ate_!ic ... ... !o .%o_$o$&!ate_!ic.133>3 rootfs var !o .%o_rootfs !o .%o_rootfs.13?=@ tem$
!o .%o_rootfs.1>3@A

...
Yocto / OpenEmbedded sur RPi 1*

2$ustement de la con)i,uration

La con)i,uration peut Wtre a$uste ? plusieurs niveau1 &


:on)i,uration locale conf"!oca!.conf ;ecettes #.bb%


P*5B*<+_5)*,,+, -. /$acka e_i$k/

8odi)ication !oca!.conf pour utiliser IPC 2$out de 4 )eatures 5 ? partir d(une liste@ 111! toolsO debu,! n)sOserver! QQQ 74*<+_C+*DER+, #dans la recette%
+FDR*_74*<+_C+*DER+, #dans !oca!.conf%
74*<+_C+*DER+, G. /ss2-server-%ro$bear s$!as2/

2$out d(un pa-uet -uelcon-ue 74*<+_78,D*)) #dans la recette% Suppression des rpertoires de construction #9ork% VV
786+R7D G. /rm_9ork/
Yocto / OpenEmbedded sur RPi 1+

2$ustement de la con)i,uration! suite


Par d)aut la base ;P8/IPC/> < n(est pas disponible sur l(ima,e! voir core-ima e-minima!.bb
H remove not nee%e% i$k informations R;;DC,_P;,DPR;5+,,_5;44*8D G. /remove_$acka in _%ata_fi!es I /

On ne peut donc pas a$outer/supprimer des pa-uets


:ommenter la li,ne prcdente 2$outer ? la con)i,uration de la cible la li,ne &

J+FDR*_K74*<+_C+*DER+, G. /$acka e-mana ement/

La distribution ;P8 est deu1 )ois plus volumineuse -ue la version IPC V
Ci!esystem "%ev"root "%ev"root ,iLe =?0.N4 =?0.N4 Ese% 125.3M 53.5M *vai!ab!e EseM 4o&nte% on 1N0.=4 ===.04 ANM 1?M " "

Yocto / OpenEmbedded sur RPi

1,

:ration du S>C

On peut crer la chaXne croise et produire un script d(installation automati-ue


$ bitbake meta-too!c2ain

On installe le S>C par &


$ ."tm$"%e$!oy"s%k"$oky-e !ibc-:8>_>A-arm-too!c2ain-1.3Gsna$s2ot=0130=1=.s2 ... +:tractin ,ettin ,DB...%one it &$...%one

,DB 2as been s&ccessf&!!y set &$ an% is rea%y to be &se%.

2cc's au S>C par &


$ so&rce 1$at23"environment-set&$-armv>-vf$-$oky-!in&:- n&eabi $ arm-$oky-!in&:- n&eabi- cc -v ... D2rea% mo%e!' $osi: cc version A.@.= (<55)

Yocto / OpenEmbedded sur RPi

$%

1emple de recette #simple%

L(e1emple est un pa-uet 4 +ello World 5 bas sur un 4akefi!e g%n%rique #ni 2utotools! ni :8aIe% Le )ichier recette 2e!!o_1.0.bb est install sur le rpertoire meta-ras$berry"reci$es-core"2e!!o Les variables ? d)inir sont &

D+,5R7PD7;8 )75+8,+ )75_C7)+,_56B,E4 PR ,R5_ER7 ,R5_ER7Om%Ns&mP ,R5_ER7Os2a=N>s&mP PacIa,e ;elease

Yocto / OpenEmbedded sur RPi

$1

1emple de recette! suite


DESCRIPTION . /6e!!o9or!% soft9are/ LICENSE . /<P)v=/ LIC !ILES C"#S$M . /fi!e'""5;PY78<Im%N.8caA3cbc8A=c=33>e83N?=>c=1>>c=8b/ PR . /r0/ SRC $RI . /2tt$'""$fic2e&:.free.fr"tm$"2e!!o-1.0.tar. L/ %o_insta!!() J oe_r&nmake insta!! D+,DD7R.$JDK K SRC $RI%m&5s'm( . /b8f%>%ac3@f1Nc%A@N3>8e%@e=3beb3b/ SRC $RI%s)a25*s'm( . /1fbN@=c>e>?N88N>bA?1eAbA@8@3=e>>=>8%c?N@N>=fA%803>8%>0c=A@ aeabef/

Yocto / OpenEmbedded sur RPi

$$

1emple de recette! suite


L(archive des sources contient les )ichiers suivants &
5;PY78< 2e!!o_oe.c 4akefi!e

Le 4akefi!e doit contenir un but install utilisant la variable D+,DD7R &


insta!!' mk%ir -$ $(D+,DD7R)"&sr"bin c$ 2e!!o_oe $(D+,DD7R)"&sr"bin

:onstruction du pa-uet par &


$ bitbake 2e!!o

Yocto / OpenEmbedded sur RPi

$&

:as du pa-uet ;P8

L(archive .tar. L est char,e sur le rpertoire %o9n!oa%s lors du fetc# La compilation s(e))ectue sur &
tm$"9ork"armv>-vf$-$oky-!in&:- n&eabi"2e!!o

2))icha,e du contenu du pa-uet


$ r$m -Q$! tm$"%e$!oy"r$m"armv>_vf$"2e!!o-1.0r0.armv>_vf$.r$m "&sr "&sr"bin "&sr"bin"2e!!o_oe

On peut installer le pa-uet par la commande &


H r$m -iv2 1$at23"2e!!o_1.0-r0_armv>-vf$.r$m

Yocto / OpenEmbedded sur RPi

$'

:as du pa-uet IPC

2))icha,e du contenu du pa-uet


$ %$k -c tm$"%e$!oy"i$k"armv>-vf$"2e!!o_1.0-r0_armv>-vf$.i$k 0 =013-0=-11 1>'N> ." 0 =013-0=-11 1>'N> ."&sr" 0 =013-0=-11 1>'N> ."&sr"bin" =?N= =013-0=-11 1>'N> ."&sr"bin"2e!!o_oe %r9:r-:r-: 0"0 %r9:r-:r-: 0"0 %r9:r-:r-: 0"0 -r9:r-:r-: 0"0

On installe le pa-uet par la commande &


H o$k insta!! 1$at23"2e!!o_1.0-r0_armv>-vf$.i$k

Yocto / OpenEmbedded sur RPi

$(

Options utiles

Pour e1cuter uni-uement une tape #clean! )etch! QQQ%


$ bitbake -c 1Rta$e3 1recette3

1emples &

Tlchar,ement archive

$ bitbake -c +e,c) 2e!!o Idem B dpendances $ bitbake -c +e,c)all core-ima e-minima! $ bitbake -c lis,,as-s 2e!!o
TYches ? e1cuter

;econstruction d(un pa-uet


$ bitbake -c cleanss,a,e 2e!!o ))acement du cache $ bitbake 2e!!o

Yocto / OpenEmbedded sur RPi

$)

:onclusions
Hocto/Open mbedded est un outil puissant mais comple1e La distribution produite est plus lourde -ue dans le cas de <uildroot 7iveau de comple1it #taille% sur la ;Pi

;aspian #6o% PoI" #100 8o si ;P8! S0 8o si IPC% <uildroot #20 8o%

On utilise PoI" lors-ue l(on veut une distribution volue et non un firmware V Poir les dmos sur la ;Pi

Yocto / OpenEmbedded sur RPi

$*

<iblio,raphie
http&//LLLQopenembeddedQor, https&//LLLQ"octopro$ectQor, http&//LLLQ"octopro$ectQor,/docs/1QE/poI"Ore)Omanual/poI"Ore)O manualQhtml http&//,itQ"octopro$ectQor,/c,it/c,itQc,i/poI"/tree/meta/classes/coreO ima,eQbbclass http&//LLLQlinu1)oundationQor,/neLsO media/announcements/2010/12/linu1O)oundationOappointsOneLO)elloL :hapitres 11 et 1S de l(ouvra,e Linux embarqu%& '(me %dition sur http&//LLLQeditionsOe"rollesQcom/Livre/9R022121E302R/linu1Oembar-ue >monstration O sur carte uIra sur http&//LLLQ"outubeQcom/LatchA vGSPP<0Le:lo8 http&//LLLQlinu1embeddedQ)r/2011/00/a$outerOunOpacIa,eOdansO openembeddedOenOSOminutes

Yocto / OpenEmbedded sur RPi

$+