Sie sind auf Seite 1von 233

Linux embebido

Workshop
Linux Embebido
Lucas Chiesa
Joaqun de Andrs
Germn Bassi
Laboratorio
Sistemas embebidos
FIUBA
Creative Commons BY-SA 3.0 license
Basado en : http://free-electrons.com/docs/embedded-linux-intro

Sistemaembebido?
Un sistema embebido o empotrado es un sistema de
computacindiseadopararealizarunaoalgunaspocas
funciones dedicadas frecuentemente en un sistema de
computacin en tiempo real. Los sistemas embebidos se
utilizan para usos muy diferentes a los usos generales a
los que se suelen someter a las computadoras
personales.

Wikipedia, http://es.wikipedia.org/wiki/Sistema_embebido

SASE2012WorkshopLinuxEmbebido

Muchossistemasdiferentes
Esunadefinicinmuygenrica:
Cubremuchostiposdiferentesdesistemas
Lneaborrosaconsistemastradicionales
ProductosConsumerElectronics(CE):
Routershogareos,reproductoresdeDVD,Televisores,
cmarasdigitales,GPS,celulares...
Productosindustriales:
Controladoresdemquinas,alarmas,equiposdevigilancia,
autos,satlites...

SASE2012WorkshopLinuxEmbebido

Muchosproductosdiferentes

SASE2012WorkshopLinuxEmbebido

Linuxembebido
ElSoftwareLibreyAbiertoofreceunarangomuyampliode
herramientasparadesarrollarsistemasembebidos.
Ventajas

Reutilizarcomponentesexistentesparaelsistemabase.
Permiteconcentrarseenelvaloragregadodelproducto.
Componentesdealtacalidadymuyprobados.(KernelLinux,
librerasdeC...)
Controlcompletosobrelaeleccindecomponentes.
Modificacionesposiblesilimitadas.

Soporteporlacomunidades:tutoriales,listasdecorreo...

Bajocosto,sinlicenciasporunidad.

Accesomssimplealsoftwareyalasherramientas.

SASE2012WorkshopLinuxEmbebido

Ejemplosdedispositivos
GPS:TomTomyGarmin
Routershogareos:Linksys,Netgear
PDA:Zaurus,NokiaN8x0
TVs,DVDs:Sony,Philips,...
Celulares:Motorola,Android,OpenMoko
Ymuchosproductosqueunonoseimagina...

SASE2012WorkshopLinuxEmbebido

Arquitecturaglobal
Aplicacin
H
E
R
R
A
M
I
E
N
T
A
S

Librera

Aplicacin

Librera

Librera

Librera de C
Kernel Linux
Bootloader
Hardware

SASE2012WorkshopLinuxEmbebido

Hardwareembebido
Elhardwareparasistemasembebidosesusualmente
diferentedelossistemascomunes.

Normalmenteusanotrasarquitecturas:
ARM,MIPSoPowerPC.x86tambinesusado.
Almacenamientoflash(NORoNAND),usualmentecon
capacidadlimitada.(depocosMBacientosdeMB)
CapacidaddeRAMlimitada(desdeunospocosMB)
Muchosbusesdeconexinnocomunesendesktops:I2C,
SPI,1wire,CAN,etc.

Placasdedesarrolloporcientosdedolares

Usualmenteusadascomobasedenuestrodiseo.

SASE2012WorkshopLinuxEmbebido

Ejemplos
Picotux100

BeagleBoardC4

ARM755MHz,Netsilicon
NS7520

CortexA8750MHz,TI
OMAP3550

2MBdeflash

256MBdeRAM

8MBdeRAM

256MBdeNANDflash

Ethernet

DVI,audioentradaysalida,
USB,etc

5GPIOs
Serial

SASE2012WorkshopLinuxEmbebido

Requerimientosmnimos
UnaCPUsoportadaporelGCCyelKernelLinux

32bitCPU
CPUssinMMUsonsoportadasporuClinux,quenovamosaver
ahora.

UnosMBdeRAM,desde4MB.
8MBparahaceralgotil.
UnospocosMBdealmacenamiento,desde2MB.
4MBparahaceralgotil.
LinuxnoestdiseadoparaprocesadoresconKBsdeRAMo
ROM:

SeusansinSO.

Sistemasreducidos,comoFreeRTOS

SASE2012WorkshopLinuxEmbebido

10

Componentesdesoftware
Crosscompilationtoolchain

Compiladorqueseejecutaenunacomputadoradedesarrolloy
generabinariosparaeldestino.

Bootloader

Iniciadoporelhardware,eselresponsabledelainicializacin
bsicayejecutarelKernel.

KernelLinux

Contieneeladministradordeprocesosymemoria,stackdered,
controladoresdedispositivos,proveeserviciosalasaplicaciones.

LibreradeC

InterfazentreelKernelylasaplicacionesdeusuario.

Librerasyaplicaciones

Propiasoproducidasporotros.

SASE2012WorkshopLinuxEmbebido

11

ArmadodeunsistemaLinux
Senecesitanrealizardiferentestareasparaproducirunsistema
Linuxembebido:
DesarrollodelBoardSupportPackage

UnBSPcontieneelbootloaderyKernelconlosdriversnecesarios
paramihardwaredestino.
Noesdondenosvamosacentrar.

Integracindelsistema

Integrartodosloscomponentes,BSP,librerasyaplicaciones
utilizadasylasaplicacionespropiasparaobtenerunsistema
funcional.
Propsitodeestecurso.

Desarrollodeaplicaciones

AplicacionesnormalesdeLinux,perousandolibrerasespeciales.

SASE2012WorkshopLinuxEmbebido

12

Rootfilesystem
EnunsistemaLinux,lossistemasde
archivossemontandentrodeuna
jerarquaglobaldedirectoriosy
archivos.
Unsistemaparticular,elroot,se
montacomoeldirectorio/.
Ensistemasembebidos,este
sistemadearchivoscontienetodos
losarchivosdelsistema.

Contenidos de
la Flash

Bootloader
Kernel

Root
filesystem

Porlotanto,crearloesunadelas
tareasprincipalesdelaintegracin
decomponentes.
ElKernelnormalmentesemantiene
separado.
SASE2012WorkshopLinuxEmbebido

13

Entornodedesarrollo
DosmanerasdedesarrollarunsistemaLinux:

Usarsolucionesprovistasysoportadasporempresascomo
MontaVista,WindRiveroTimeSys.Cadaunatienesus
herramientaspropias.
Usarherramientasprovistasporlacomunidad.

Novamosapromoverningunaempresaenparticular,porloque
vamosausarherramientasdelacomunidad.

Loimportanteesentenderlosconceptos,migrardeherramienta
siempreesmsfcil.

DesarrollarunsistemaLinuxrequiereusarLinux.

Lasherramientascomunitariasnoestndisponiblesparaotras
plataformas.
EntenderLinuxeneldesktopnosvaafacilitareldesarrollode
Linuxembebido.

SASE2012WorkshopLinuxEmbebido

14

Linuxembebido

Usodeun
sistemaLinux

SASE2012WorkshopLinuxEmbebido

15

UsodeunsistemaLinux

Sistemadearchivosydispositivos

SASE2012WorkshopLinuxEmbebido

16

Creandounsistemadearchivos
Ejemplos
mkfs.ext2/dev/sda1
Formatealaparticin/dev/sda1enformatoext2.
mkfs.ext2Fdisk.img
Formateaunaimagendediscoenext2

F: force. Ejecuta aunque no


sea un dispositivo real.

mkfs.vfatvF32/dev/sda1(v:verbose)
FormatealamismaparticinanteriorenFAT32.
mkfs.vfatvF32disk.img
FormatealaimagenenFAT32.
Imgenesdediscosenblancosepuedencrearas:(archivode64MB):
ddif=/dev/zeroof=disk.imgbs=1Mcount=64

SASE2012WorkshopLinuxEmbebido

17

Montandoundispositivo
Parahacercualquiersistemadearchivosvisible
enelsistemahayquemontarlos.
Laprimeravez,secreaelpuntodemontaje:
mkdir/mnt/usbdisk(ejemplo)
Ahoralomontamos:
mounttvfat/dev/sda1/mnt/usbdisk
/dev/sda1:dispositivofsico
t:especificaelformatodelsistemadearchivo
(ext2,ext3,vfat,reiserfs,iso9660...)

SASE2012WorkshopLinuxEmbebido

Datos
crudos
mount

Estructura
de
directorios

18

Montandoundispositivo
Tambinsepuedemontarunaimagendeunsistemadearchivos
guardadaenunarchivoregular(loopdevices)
Muytilparadesarrollaryprobarunsistemadearchivosque
estamosarmandoparaotracomputadora.
tilparaaccederaloscontenidosdeunaimagendeCD(iso)
sintenerquegrabareldisco.
Ejemplo:
mountolooptvfatusbkey.img/mnt/usbdisk

SASE2012WorkshopLinuxEmbebido

19

Listandodispositivosmontados
Usandoelcomandomountsinargumentosseobtienelalista:
/dev/hda6on/typeext3(rw,noatime)
noneon/proctypeproc(rw,noatime)
noneon/systypesysfs(rw)
noneon/dev/ptstypedevpts(rw,gid=5,mode=620)
usbfson/proc/bus/usbtypeusbfs(rw)
/dev/hda4on/datatypeext3(rw,noatime)
noneon/dev/shmtypetmpfs(rw)
/dev/hda1on/wintypevfat(rw,uid=501,gid=501)
noneon/proc/sys/fs/binfmt_misctypebinfmt_misc(rw)

SASE2012WorkshopLinuxEmbebido

20

Desmontandodispositivos
umount/mnt/usbdisk
Terminatodaslastransaccionespendientesenel
dispositivoylodesmonta.
Parapoderdesmontarundispositivohayquecerrartodos
susarchivosabiertos:

Cerrartodoslosprogramasqueusenalgnarchivodel
directoriomontado.
Estarseguroqueningnshellestabiertoenesaparticin.
Sepuedeusarelcomandolsof<mountpoint>(listopen
files)paravertodoslosarchivosabiertosenesedirectorio.

SASE2012WorkshopLinuxEmbebido

21

Elladooscuroderoot
root:Senecesitansusprivilegiosslopara
operacionesespecficas,conimpactoenla
seguridad.Porejemplo:montar,creardispositivos,
cargardrivers,configurandolared,
cambiarpermisos,instalarpaquetes...
Pormsqueunotengalaclavederoot,lacuenta
normaltienequesersuficienteparael99.9%delas
actividades(amenosqueseaselsysadmin)
Enestecursoesaceptablequeusenroot.
Enlavidareal,puedennotenerestacuenta
disponible.

SASE2012WorkshopLinuxEmbebido

22

Usandolacuentaroot
Encasoqueunorealmentequieraserroot...
Siunotieneelpasswordderoot:
su(switchuser)
Endistribucionesmodernas,elcomandosudotedaaccesoaalgunos
privilegiosderootusandolaclavedetuusuario.
Ejemplo:sudomount/dev/hda4/home

SASE2012WorkshopLinuxEmbebido

23

Administracinbsicadelsistema

Manejodepaquetes

SASE2012WorkshopLinuxEmbebido

24

Paquetesdesoftware
LaformadedistribuirsoftwareenGNU/Linuxdifieredelaquese
usaenWindows.
LasdistribucionesdeLinuxproveenunaformacentraly
coherentedeinstalar,actualizaryborraraplicacionesylibreras:
Paquetes.
Lospaquetescontienenlaaplicacin,laslibreraseinformacin
extra,comolaversinylasdependencias.

.debenDebianyUbuntu,.rpmenMandriva,Fedora,OpenSUSE

Lospaquetesseguardanenrepositorios,usualmenteservers
HTTPoFTP.
Siemprehayqueusarpaquetesoficialesdeladistribucin,a
menosqueseaestrictamentenecesario.
SASE2012WorkshopLinuxEmbebido

25

Manejandopaquetesdesoftware
InstruccionesparasistemasbasadosenDebianGNU/Linux:
(Debian,Ubuntu...)
Losrepositoriosdepaquetesseespecificanen:
/etc/apt/sources.list
Paraactualizarlalistadepaquetes:
sudoaptgetupdate
Paraencontrarunpaqueteparainstalar,sepuedenusarlos
buscadoresweb:http://packages.debian.orgo
http://packages.ubuntu.com.Tambinsepuedeusar:
aptcachesearch<keyword>

SASE2012WorkshopLinuxEmbebido

26

Manejandopaquetesdesoftware
Parainstalarunpaquete:
sudoaptgetinstall<package>
Paradesinstalarunpaquete:
sudoaptgetremove<package>
Paraaplicartodaslasactualizaciones:
sudoaptgetdistupgrade
Paraobtenerinformacindeunpaquete:
sudoaptcacheshow<package>
Existeninterfacesgrficas:

SynapticparaGNOME

AdeptparaKDE

Paramsinformacinsobreadministracindepaquetes:
http://www.debian.org/doc/manuals/apthowto/
SASE2012WorkshopLinuxEmbebido

27

Apagandoelsistema
halt
Apagainmediatamenteelsistema.
reboot
Reiniciainmediatamenteelsistema.
[Ctrl][Alt][Del]
TambinfuncionaelGNU/Linuxparareiniciar.
Sistemasembebidos:hayqueusaruninityespecificar
unacombinacindeteclasen/etc/inittab.

SASE2012WorkshopLinuxEmbebido

28

PrcticaUsandoLinux

Practicarcomandosbsicosde
Linux.
Familiarizarseconlasintaxisdel
shell.
Perderleelmiedoalaterminal.

SASE2012WorkshopLinuxEmbebido

29

Sistemasembebidos

Introduccinal
KernelLinux

SASE2012WorkshopLinuxEmbebido

30

DesarrollodeLinuxEmbebido

Presentandoelkernel
CaractersticasdeLinux

SASE2012WorkshopLinuxEmbebido

31

KernelLinuxenelsistema
User app B
Librera A

User app A

Userspace

Librera de C
Notificacin de eventos,
con info agregada.

Llamadas a sistema
Kernel Linux
Manejo de
hardware

Notificacin de
eventos
Hardware

SASE2012WorkshopLinuxEmbebido

32

Historia
ElKernelLinuxesuncomponentedelsistema,requierelibreras
yaplicacionesparaproveerfuncionalidadalosusuariosfinales.
Creadoporunestudiantefinlandes,LinusTorvalds,comoun
hobbyen1991.

RpidamentefueadoptadocomoelKernelparaformarunsistema
operativolibre.

LinusTorvaldsfuecapazdecrearunacomunidaddeusuariosy
programadoresgrandeydinmicaalrededordeLinux.
Actualmentecientosdepersonascontribuyenacadareleasedel
Kernel,tantoindividuosparticularescomopertenecientesa
grandesempresas.

SASE2012WorkshopLinuxEmbebido

33

LicenciadeLinux
TodaslasfuentesdelKernelsonsoftwarelibre,liberadobajola
licenciaGNUGeneralPublicLicenseversion2(GPLv2).

ParaelKernel,estoimplicaque:

CuandounorecibeocompraundispositivoconLinux
dentro,deberecibirlasfuentesdeLinux,contodoslos
derechosdeestudiarmodificaryredistribuir.
CuandounoproduceequiposbasadosenLinux,uno
debedarlasfuentesaldestinatario,sinrestricciones.

Msadelantevamosaverendetallelaslicenciaslibres.

SASE2012WorkshopLinuxEmbebido

34

Caractersticasprincipales
Portabilidadysoportede
hardware.Correenla
mayoradelasarquitecturas.
Escalabilidad.
Funcionaensuper
computadorascomoen
pequeosdispositivos.
(4MBdeRAMessuficiente).
Cumpleconestndaresde
interoperatividad
Muycompletoyrobusto
soportedered.

SASE2012WorkshopLinuxEmbebido

Seguridad
Nopuedeocultarlasfallas.El
cdigoesrevisadopormuchos
expertos.
Estableyconfiable.
Modular.Puedeincluirslolo
quenuestrosistemanecesita.
Fcildeprogramar.Sepuede
aprenderdecdigoexistente.
MuchosrecursosenInternet

35

Arquitecturassoportadas
ParaelKernel2.6.31
Revisareldirectorioarch/enlasfuentes.
Requerimientomnimo:32bits,conosinMMU,ysoportedegcc.
Arquitecturasde32bits
arm,avr32,blackfin,cris,frv,h8300,m32r,m68k,
m68knommu,microblaze,mips,mn10300,parisc,s390,
sparc,um,xtensa
Arquitecturasde64bits:
alpha,ia64,sparc64
Arquitecturasde32o64bits:
powerpc,x86,sh
Msdetallesen:arch/<arch>/Kconfig,
arch/<arch>/README,oDocumentation/<arch>/
SASE2012WorkshopLinuxEmbebido

36

Llamadasasistema
LaprincipalinterfazentreelKernelyuserspaceesunconjunto
dellamadasasistema.
Existen~300llamadasasistemasqueproveenlosservicios
principalesdelKernel

Operacionesenarchivosydispositivos,operacionesdered,
comunicacinentreprocesos,administracindeprocesos,manejo
dememoria,timers,threads,sincronizacin,etc.

Interfazestableeneltiempo:slosepuedenagregarnuevas
llamadas.
Lainterfazalasllamadasalsistemaesabstradaporlalibrera
deC.Losprogramasdeuserspaceusualmentenohacen
llamadasalsistema,usanlasfuncionescorrespondientedela
librera.
SASE2012WorkshopLinuxEmbebido

37

Sistemasdearchivosvirtuales
LinuxofreceinformacindelsistemayelKernela
userspacemediantesistemasdearchivosvirtuales
(virtuales:noexistenenunningnalmacenamientoreal).
Nosenecesitasaberprogramarparaaccederaesta
informacin!
Montar/proc:
sudomounttprocnone/proc
Montar/sys:
sudomounttsysfsnone/sys
Tipodefs

SASE2012WorkshopLinuxEmbebido

Dispositivo
oimagendefs
Enelcasodeunfsvirtual
cualquiertextoesvlido

Lugardemontaje

38

Detallesde/proc
Algunosejemplos:
/proc/cpuinfo:informacindelprocesador
/proc/meminfo:estadodelamemoria
/proc/version:informacindecompilacinyversindel
kernel
/proc/cmdline:lneadecomandodelKernel
/proc/<pid>/environ:entornodeejecucin
/proc/<pid>/cmdline:lineadecomandodelproceso
...ymuchoms!Valoconsuspropiosojos!
Muchosdetallesacercade/procdisponiblesen:
Documentation/filesystems/proc.txt
(casi2000lneas)enlasfuentesdelKernel.
SASE2012WorkshopLinuxEmbebido

39

DesarrollodeLinuxEmbebido

KernelLinux
Esquemadeversionesymodelodedesarrollo

SASE2012WorkshopLinuxEmbebido

40

Hasta2.6
Unanuevaramaestablecada2o3aos

Identificadaporunnmeroparenelmedio

Ejemplos:1.0,2.0,2.2,2.4

Unaramadedesarrolloparaintegrarnuevafuncionalidady
cambiosmayores

Identificadaporunnmeroimparenelmedio

Ejemplos:2.1,2.3,2.5

Despusdeuntiempo,laramadedesarrollopasabaaserla
basedeunaramaestable.

Versionesmenoresdevezencuando:2.2.23,2.5.12,etc.

SASE2012WorkshopLinuxEmbebido

41

Hasta2.6

Versinestable
2.4.0

2.4.1

2.4.2

2.4.3

2.4.4

2.5.0

2.4.5

2.5.1 2.5.2

2.4.6

2.5.3

Desarrollo

2.4.7

2.5.4

2.6.0

2.4.8

2.6.1
Estable

Nota:Enrealidadexistenmuchas
msversionesmenoresencada
rama.

SASE2012WorkshopLinuxEmbebido

42

CambiosdesdeLinux2.6
Desde2.6.0,losprogramadorespudieronagregarmuchas
nuevasfuncionesdeaunaapasoconstantesintenerque
hacergrandescambiosenlossubsistemasexistentes.
AbrirunanuevaramadedesarrolloLinux2.7(o2.9)vaa
sernecesariocuandoLinux2.6nopuedaacomodarms
funcionesimportantessincambiosmuygrandes.
Graciasaesto,muchasnuevasfuncioneslleganalos
usuariosaunpasomuchomsrpido.

SASE2012WorkshopLinuxEmbebido

43

CambiosdesdeLinux2.6
Desde2.6.14,losprogramadoresdelKernelsepusierondeacuerdoen
elsiguientemodelodedesarrollo:
Despusdeunreleasedeunaversin2.6.x,seabreunaventana
de2semanasparamergedurantelacuallosprincipalescambiosson
aplicados.
Secierralaventanademergeconelreleasedelaversin
2.6.(x+1)rc1
Seabreelperodoparaarreglarbugs,de6a10semanas.
Enintervalosregularesduranteelperododearreglodebugsse
liberanlasversionesdeprueba2.6.(x+1)rcY.
Cuandoseloconsiderasuficientementeestable,
elKernel2.6.(x+1)esliberado,yelprocesovuelveacomenzar.

SASE2012WorkshopLinuxEmbebido

44

Ventanasdemergeyarreglos
2semanas

6a10semanas

Ventanademerge
2.6.21

Arreglarbugs

2.6.22rc1

2.6.22rc3

2.6.22rc2

2.6.21.1

2.6.21.2

2.6.22rc5
2.6.22rc4

2.6.21.3 2.6.21.4

2.6.22

2.6.21.5

Actualizacionescon
arreglosdebugs
2.6.22.1

SASE2012WorkshopLinuxEmbebido

45

Msestabilidadconkernel2.6
Problema:losarreglosdebugsyseguridadsehacenslo
enlaversinmsnueva(alosumodosanteriores).Las
distribuciones,porsupuesto,lasaplicanenloskernelsque
estnusando.
AlgunaspersonasnecesitantenerunKernelnuevopero
consoporteporunplazoprolongado.
Sepuedetenersoportedelargoplazodelosproveedores
deLinuxembebido.
SepuedereutilizarlasfuentesdelKerneldelasversiones
deUbuntuLTS,oDebian(5o3aosdeupdatesgratis).
Algunasversionessemantienenporuntiempoprolongado
porkernel.org(Linux2.6.27porejemplo).

SASE2012WorkshopLinuxEmbebido

46

Qutienedenuevocadaversin?
commit 3c92c2ba33cd7d666c5f83cc32aa590e794e91b0
Author: Andi Kleen <ak@suse.de>
Date: Tue Oct 11 01:28:33 2005 +0200
[PATCH] i386: Don't discard upper 32bits of HWCR on K8

??!

Need to use long long, not long when RMWing a MSR. I think
it's harmless right now, but still should be better fixed
if AMD adds any bits in the upper 32bit of HWCR.
Bug was introduced with the TLB flush filter fix for i386

...

Signed-off-by: Andi Kleen <ak@suse.de>


Signed-off-by: Linus Torvalds <torvalds@osdl.org>

Elchangelogoficialdecadaversinessimplementeuna
largalistadeparchesindividuales!!
Muydifcildesaberculessonloscambiosclavesytener
unavistaglobaldeloscambios.
Afortunadamente,unresumendeloscambios
fundamentales(consuficientedetalle)seencuentraen:
http://wiki.kernelnewbies.org/LinuxChanges
SASE2012WorkshopLinuxEmbebido

47

DesarrollodesistemasLinux

Crosscompiling
toolchains

SASE2012WorkshopLinuxEmbebido

48

Definicin
Lasherramientasdedesarrolloqueunotienenormalmenteenun
desktopsellamantoolchainnativo.
Estetoolchaincorreeneldesktopygeneracdigoparaeldesktop.
Usualmentex86.
Parasistemasembebidosusualmentenosepuedeonoesdeseable.

Eltargettienerecursoslimitados(pocaRAMyalmacenamiento)

Eltargetesmuchomslentoqueeldesktop.

Unopuedenoquerertenerinstaladoslasherramientasde
desarrolloeneltarget.

Porlotanto,generalmenteseusancrosscompilingtoolchains.Correnen
eldesktopygeneralcdigoparaeltarget.

SASE2012WorkshopLinuxEmbebido

49

Definicin
Cdigo fuente
Mquina que
compila

Cross-compiling
toolchain

Toolchain nativo

x86

Binario x86

Binario ARM
x86

SASE2012WorkshopLinuxEmbebido

Mquina
que ejecuta
ARM

50

Componentes

Binutils

Kernel headers

Libreras de C/C++

Compilador GCC

GDB debugger
(opcional)

SASE2012WorkshopLinuxEmbebido

51

Binutils
Binutilsesunconjuntodeherramientasparamanipularbinarios
deunadeterminadaarquitectura:

as,elensamblador,generacdigobinarioapartirdecdigo
assembler

ld,ellinker

ar,ranlib,generaarchivos.a,usadosparalibreras.

objdump,readelf,size,nm,strings,parainspeccionar
binarios.Herramientasdeanlisismuytiles!
strip,remuevepartesdelosbinariosquenoseusan.
http://www.gnu.org/software/binutils/

LicenciaGPL

SASE2012WorkshopLinuxEmbebido

52

Kernelheaders
LalibreradeCylosprogramastienen
queinteractuarconelKernel

Llamadasasistemadisponibles.

Definicionesdeconstantes.

Estructuradedatos,etc.

Kernel
Kernel headers

Porlotanto,paracompilarlalibrerade Librera de C
CsenecesitanlosKernelheaders,y
muchasaplicacionestambin.
Aplicaciones
DisponiblesdentrodelasfuentesdelKernel

SASE2012WorkshopLinuxEmbebido

53

Kernelheaders
LaABIkerneltouserspaceescompatiblehaciaatrs:

Binariosgeneradosconuntoolchainusandoheadersanteriores
queelKernelqueseestusando,vanafuncionarperonovana
poderusarlasprestacionesnuevas.
BinarioscompiladoscontraheadersmsnuevosqueelKernelen
usopuedenrompersesiseusancaractersticasnopresentesenel
Kernelviejo.
Noesnecesariousarlosheadersmsnuevos,salvoquese
necesitenlasltimascaractersticas.

LosheadersseextraendelasfuentesdelKernelconel
comandomakeheaders_install.

SASE2012WorkshopLinuxEmbebido

54

CompiladorGCC
FamosocompiladorlibreGCC
PuedecompilarC,C++,Ada,Fortran,Java,
ObjectiveC,ObjectiveC++,ygenerarcdigopara
muchasarquitecturas,incluyendoARM,AVR,
AVR32,Blackfin,CRIS,FRV,M32,MIPS,MN10300,
PowerPC,SH,v850,i386,x86_64,IA64,Xtensa,etc.
http://gcc.gnu.org/
DisponiblebajolicenciaGPL.
LaslibrerasqueutilizasonLGPL.

SASE2012WorkshopLinuxEmbebido

55

LibreradeC
LalibreradeCesuncomponenteesencial
deunainstalacindeLinux.

InterfazentrelasaplicacionesyelKernel.
ProveeunaAPIdeCmuyconocidapara
facilitareldesarrollodeaplicaciones.

Kernel

ExistenmuchaslibrerasdeC:
glibc,uClibc,eglibc,dietlibc,newlib,etc.

Librera de C

Laeleccindeunalibrerasedebehaceren
elmomentodegenerareltoolchain,yaqueel
GCCsecompilacontralalibrera.

Aplicaciones

SASE2012WorkshopLinuxEmbebido

56

glibc
http://www.gnu.org/software/libc/
Licencia:LGPL
LibreradeCdelproyectoGNU.
Diseadaparadesempeo,respetarestndaresy
portabilidad.
EncontradaencasitodoslossistemasGNU/Linux.
Porsupuesto,mantenidaactivamente.
Bastantegrandeparasistemasembebidos:~2.5MB
enarm(version2.9libc:1.5MB,libm:750KB)

SASE2012WorkshopLinuxEmbebido

57

uClibc
http://www.uclibc.org/deCodePoetConsulting
Licencia:LGPL
LibreradeCpequea,parasistemasembebidos:

Muchasopcionesdeconfiguracin:muchasfuncionesse
puedenactivarydesactivarusandolainterfazmenuconfig.
FuncionaenLinux/uClinux,enlamayoradelasplataformas
embebidas.
NotieneunaABIestable,dependedelaconfiguracindela
librera.

Seocupadeltamaoantesquedeldesempeo.

Secompilarpido.

SASE2012WorkshopLinuxEmbebido

58

uClibc
LamayoradelasaplicacionescompilancontrauClibc,ytodaslas
queseusanenembebidos.
Tamao(arm):4vecesmschicaqueglibc!
uClibc0.9.30.1:~600KB(libuClibc:460KB,libm:96KB)
glibc2.9:~2.5MB(pararecordar)
Usadaenunagrancantidaddedispositivosembebidos,incluidos
muchosdeconsumerelectronics.
Activamentesoportada,granbasedeusuarios.
AhorasoportadaporMontaVista,TimeSysyWindRiver.

SASE2012WorkshopLinuxEmbebido

59

Queridaencojalosprogramas

Programa

Usandolibrerascompartidas
glibc

Plainhelloworld
(stripped)
Busybox
(stripped)

uClibc

5.6K
5.4K
(glibc2.9) (uClibc0.9.30.1)
245K
(olderglibc)

231K
(olderuClibc)

Compiladoesttico
glibc

uClibc

472K
18K
(glibc2.9) (uClibc0.9.30.1)
843K
(olderglibc)

311K
(olderuClibc)

Comparacin de tamaos de ejecutables en ARM

SASE2012WorkshopLinuxEmbebido

60

eglibc
Embeddedglibc,LGPL
VariantedelaGNUCLibrary(GLIBC)diseadaparafuncionaren
sistemasembebidos.
Compatible(fuenteybinarios)conGLIBC
Susobjetivosincluyentamaoreducido,componentes
configurables,mejorsoporteparacrosscompilacin.
SepuedecompilarsinsoporteparIPv6,localizacionesymuchas
otrasfunciones.
Soportadaporunconsorcio,conFreescale,MIPS,MontaVistay
WindRivercomomiembros.
Debianusaeglibcentodaslasdistribuciones.
http://www.eglibc.org

SASE2012WorkshopLinuxEmbebido

61

OtraslibrerasdeCpequeas
ExistenotraslibrerasdeCmspequeas,peroninguna
conelobjetivodecompilarunagrancantidadde
aplicacionesexistentes.
Requierenelcdigoescritoespecialmenteparaellas.
Opciones:

Dietlibc,http://www.fefe.de/dietlibc/.Aproximadamente70KB.

Newlib,http://sourceware.org/newlib/

Klibc,http://www.kernel.org/pub/linux/libs/klibc/,diseada
paraserusadaduranteelbooteo.

SASE2012WorkshopLinuxEmbebido

62

Compilandoeltoolchain

Hayquediferenciartresmquinascuandosehabladela
creacindeltoolchain:

Lamquinadecompilacin,dondeeltoolchainsecompila.

Lamquinahost,dondeeltoolchainseejecuta.

Lamquinadestino,dondesevanaejecutarlosbinarios
generadosporeltoolchain.

Existencuatroposiblesmanerasdecreareltoolchain

SASE2012WorkshopLinuxEmbebido

63

Compilandoeltoolchain
build

host

target

build

host

target

Cross

Nativo

toolchain normal en un desktop

Genera un toolchain que corre en el


desktop y crea cdigo para ejecutarlo
en el target
La solucin ms comn en embebidos

build

host
Cross-nativo

target

Genera un toolchain que corre en el


target y genera cdigo para el target

SASE2012WorkshopLinuxEmbebido

build

host

target

Canadian

Un toolchain que se compila en el


desktop, se ejecuta en un server y
genera cdigo para el target
64

Compilandoeltoolchain
Hayquetomarmuchasdecisionesalmomentodehacerun
toolchain.

ElegirlalibreradeC

Elegirlaversindeloscomponentesquevamosausar

Ylaconfiguracindetodasestascosas.

QuABIdebemosusar?ToolchainsparaARM,pueden
generarbinariosusandolaOABI(OldABI)olaEABI
(EmbeddedABI),quesonincompatibles.
Debeeltoolchainsoportarpuntoflotanteporsoftware?,o
elhardwareproveesoporteparaestasoperaciones?
Debeeltoolchainsoportarlocalizacin,IPv6,uotras
caractersticasespeciales?

SASE2012WorkshopLinuxEmbebido

65

Compilandoeltoolchain
Reportedecompilacin:http://kegel.com/crosstool/crosstool0.43/buildlogs

SASE2012WorkshopLinuxEmbebido

66

Pasosbsicos
ExtraereinstalarlosKernelheaders.
Extraer,configurar,compilareinstalarbinutils.
Extraer,configurarycompilarlaprimeraversindelGCC
quegenerabinariosparaeltarget.Lovamosusarpara
compilarlalibreradeCdecrosscompilacin.
Extraer,configurarycompilarlalibreradeCconel
compiladorgeneradoenelpasoanterior.
Reconfigurarycompilarelgcc,contralanuevalibrerade
C.Asobtenemoselgccquevamosausar.

SASE2012WorkshopLinuxEmbebido

67

Toolchainscaseros
Compilaruncrosstoolchainamanoesunatareadolorosay
difcil.Podemostardarvariosdasenlograrlo!
Muchosdetallesquesaberyentender.Muchoscomponentesque
compilar.
Muchasdecisionesparatomar.
(configuracindelalibreradeCparatuplataforma)
Necesitamosfuentesdemuchosprogramasdiversos.
Estarfamiliarizadoconlosproblemasactualesdelgccylos
parchesparatuarquitectura.
Estiltenerprcticacompilandoprogramascomplejos.
http://www.aleph1.co.uk/armlinux/docs/toolchain/toolchHOWTO.pdf
Tedicecunentretenidopuedeser!
SASE2012WorkshopLinuxEmbebido

68

Usartoolchainsprecompilados
Laeleccinmspopular,porserlomssimpleyfcil.
Primero,hayquedeterminarqutoolchainsenecesita.CPU,
endianism,libreradeC,componentes,ABI,puntoflotante,
etc..
Existenmuchostoolchainsprecompilados:

CodeSourcery,http://www.codesourcery.com,esuna
referenciaenelrea.NoteproveenLinux+uClibc.
LinaromantienetoolchainsoptimizadosparaARM:
https://wiki.linaro.org/WorkingGroups/ToolChain
(LinarocontrataCodeSourceryyagregcosas)
Msinformacinenhttp://elinux.org/Toolchains

SASE2012WorkshopLinuxEmbebido

69

Usandotoolchainsprecompilados
Seguirlasinstruccionesprovistasporelfabricante.
Usualmenteescuestindedescomprimirelarchivoy
dejarloenellugarcorrespondiente:

Lostoolchainsnosuelenserreubicables!
Lostensquetenerenellugardondefuerondiseados.
Apartirdegcc4.xestonoesnecesario,perosueleser
lomscomnysencillo.

Finalmente,agregareltoolchainanuestroPATH:
exportPATH=/path/to/toolchain/bin/:$PATH

SASE2012WorkshopLinuxEmbebido

70

Herramientasparacompilar
Otrasolucinesusarutilidadesqueautomatizanelprocesode
creacindeuntoolchain.
Lasmismasventajasquelosprecompilados,nohayque
meterseconlatediosacompilacinmanual.
Ofrecenmayorflexibilidadquelostoolchainsyacompilados.
Puedoseleccionartodaslasopcionesquequiero.
Usualmenteincluyenlosparchesrecomendablesparalos
distintoscomponentesenlasdistintasarquitecturas.
SonscriptsdeshelloMakefilesqueautomatizanelprocesode
descargar,extraer,configurarycompilarlosdistintos
componentes.

SASE2012WorkshopLinuxEmbebido

71

Herramientasparacompilar
Crosstool

Herramientaoriginal,escritaporDanKegel

Conjuntodescriptsyparches,glibconly

Nosemantienems

http://www.kegel.com/crosstool

Crosstoolng

ReescrituradeCrosstool,conunasistemadeconfiguracindelestilo
demenuconfig.
Msprestaciones:soportauClibc,glibc,eglibc,hardysoftfloat,
muchasarquitecturas.

Activamentemantenido.

http://ymorin.isageek.org/dokuwiki/projects/crosstool

SASE2012WorkshopLinuxEmbebido

72

Herramientasparacompilar
Muchasherramientasparahacerrootfstambinpermitencompilar
eltoolchain.
Buildroot

BasadoenMakefile,slouClibc,mantenidoporlacomunidad.
http://buildroot.uclibc.org

PTXdist

BasadoenMakefile,uClibcoglibc,mantenidoprincipalmente
porPengutronix
http://www.pengutronix.de/software/ptxdist/index_en.html

OpenEmbedded

Elsistemadecompilacinmscompletoycomplejo
disponible.
http://www.openembedded.org/

SASE2012WorkshopLinuxEmbebido

73

PrcticaUsandoCrosstoolNG

Momentodecompilarsutoolchain!
ConfigurarCrosstoolNG
Ejecutarloparaquecompilesu
propiotoolchain

Mientrascompila...dudas?

SASE2012WorkshopLinuxEmbebido

74

Linux embebido

Workshop
Linux Embebido
Lucas Chiesa
Joaqun de Andrs
Germn Bassi
Laboratorio
Sistemas embebidos
FIUBA
Creative Commons BY-SA 3.0 license
Basado en : http://free-electrons.com/docs/embedded-linux-intro

DesarrollodesistemasLinux

Bootloaders

SASE2012WorkshopLinuxEmbebido

76

Bootloaders
Elbootloaderesunprogramaresponsablede:

Inicializacinbsicadelhardware.
Cargarunaaplicacinbinaria,usualmenteelKerneldelSO,desde
unalmacenamientoflash,desdelared,odesdecualquierotrotipo
dealmacenamientonovoltil.

Descompresineventualdelaaplicacinbinaria.

Ejecucindelaaplicacin.

Ademsdelasfuncionesbsicas,lamayoradelosbootloaders
proveenunshellqueimplementandiferentesoperaciones.

Inspeccindememoria,diagnsticodehardware,testeo,etc..

SASE2012WorkshopLinuxEmbebido

77

Bootloadersonx86
Losprocesadoresx86sonusadostpicamenteenplacasque
contienenmemorianovoltildondeseencuentraunprograma,
laBIOS.
ElprogramaesejecutadodesdelaCPUdespusdeunresety
esresponsabledelainicializacinbsicadelhardwareycargar
unapequeaporcindecdigodealmacenamientonovoltil.

Estecdigoesusualmentelosprimeros512bytesdeundisco
rgido.

Estecdigousualmenteeslaprimeraetapadelbootloader(1
stagebootloader),quevaacargarelbootloaderreal.
Luego,elbootloaderpuedeofrecertodassuscaractersticas.
Tpicamenteentiendensistemasdearchivos,paracargarel
KerneldirectodelFS.
SASE2012WorkshopLinuxEmbebido

78

Bootloadersonx86

GRUB,GrandUnifiedBootloader,eselmspoderoso.
http://www.gnu.org/software/grub/

PuedeleermuchossistemasdearchivosycargarelKernely
suconfiguracin.Proveeunshellmuypoderosoconmuchos
comandos.Soportedered,etc.

LILO,elbootloaderoriginaldeLinux
http://freshmeat.net/projects/lilo/
Syslinux,parabootearderedodemedios
http://syslinux.zytor.com

SASE2012WorkshopLinuxEmbebido

79

Bootloadersenembebidos
Enarquitecturasembebidas,elbooteodebajoniveldependedecadaCPUy
cadaplaca.

AlgunasplacastienenunaNORflashdelacuallaCPUcomienzala
ejecucindespusdelreset.Enesecaso,elbootloadersedebegrabar
directamenteenladireccinapropiadadeesaNOR.
AlgunasCPUstienecdigodebooteointegradoenunaROMinternaque
automticamentecargaunaporcindeNANDflashenSRAM.Enesecaso
unbootloadermnimodeprimeraetapasedebecargareneselugarde
NAND.Luego,stevaacargarelbootloaderdefinitivoenDRAMy
ejecutarlo.(BootROMonAT91SAMCPUs,SteppingstoneonS3C24xx
CPUs,etc.).

ElbootloaderenembebidosiniciajustodespusdeunresetdelaCPU.Debe
inicializartodoslosdispositivos,incluyendoelcontroladordememoriapara
poderaccederalaDRAM.
Comoelprocesodebooteoesaltamentedependiendodelfabricantees
necesariotenerladocumentacinpropiadelequipo.

SASE2012WorkshopLinuxEmbebido

80

Bootloadersenembebidos
Nosvamosacentrarenelbootloaderprincipal,porserelms
genricoyporofrecerlamayorcantidaddeprestaciones.
Hayvariosbootloaderslibresgenricos.
Estossonlosmspopulares:

UBoot,eluniversalbootloaderporDenx
ElmsusadoenARM,tambinusadoenPPC,MIPS,x86,m68k,NIOS,
etc.Elestndardefactoactual,yeselquevamosautilizar.
http://www.denx.de/wiki/UBoot
Barebox,unnuevobootloaderescritocomosucesoraUBoot.Mejor
diseo,mejorcdigoyendesarrolloactivoperotodavanotienetanto
soportedehardwarecomoUBoot.
http://www.barebox.org

Haymuchosotrosbootloaders,libresypropietarios,usualmente
especficosparaalgunaarquitectura.

RedBoot,Yaboot,PMON,etc.

SASE2012WorkshopLinuxEmbebido

81

DesarrollodesistemasLinux

Accediendoaunaconsolaserie

SASE2012WorkshopLinuxEmbebido

82

Minicom
Definicin:programadecomunicacinserie.
DisponibleentodaslasdistribucionesGNU/Linux.
Capacidades:

ConsolaserieaunsistemaUnixremoto

Transferenciadearchivos

Controlarmdemsydialup

Configuracindelpuertoserie

SASE2012WorkshopLinuxEmbebido

83

Minicom
Abrirloejecutando
minicomspara
configurarminicom
Unpocoausteroal
principio,perodespus
resultaamistoso.

SASE2012WorkshopLinuxEmbebido

84

Otrasterminalesseries
GTKTerm:http://www.jlsinfo.com/julien/linux/
Grfico.MenospoderosoqueMinicom,peroconunainterfaz
mssimpleymsatractiva.Disponibleendistrosrecientes.
CuteCom:http://cutecom.sourceforge.net/
Otraterminalgrficaamistosa.Disponibleendistrosrecientes.
picocom:http://freshmeat.net/projects/picocom/
Emuladormuypequeo(20K),sepuedeusarembebido
GNUScreen:tambinsepuedeusarcomoterminalserie:
screen<device><baudrate>
Ejemplo:
screen/dev/ttyS0115200

SASE2012WorkshopLinuxEmbebido

85

PrcticaBootloaders

MomentodeconectarseaUBoot!
Usarunaterminalserie.
ConocerloscomandosdeU
Boot

SASE2012WorkshopLinuxEmbebido

86

UsoembebidodelKernelLinux

Usoembebido
delKernelLinux

SASE2012WorkshopLinuxEmbebido

87

Contenidos
Compilandoybooteando
FuentesdelKernel
ConfiguracindelKernel
CompilandoelKernel
Iniciodelsistema
Archivosdedispositivos
CrosscompilandoelKernel

SASE2012WorkshopLinuxEmbebido

88

UsoembebidodelKernelLinux

CompilandoyBooteandoelKernel
FuentesdelKernelLinux

SASE2012WorkshopLinuxEmbebido

89

FuentesdelKernel
LaversinoficialdelKernel,liberadaporLinusTorvals,est
disponibleenhttp://www.kernel.org

Estaversinsigueelmodelodedesarrollodescriptoanteriormente.
Sinembargo,puedenocontenerlosltimoscambiosdeunrea
especfica.Algunoscambiospudierondarsedespusdelaventana
demergeoestartodavaendesarrollo.

MuchassubcomunidadesdelKernelmantienensuspropias
versiones,usualmenteconfuncionesmsnuevasymenos
estables.

Comunidadesdearquitecturas(ARM,MIPS,PowerPC,etc.),
comunidadesdedrivers(I2C,SPI,USB,PCI,red,etc.),otras
comunidades(realtime,etc.)
Usualmentenoliberanversionesoficialessinoquemantienenlas
ramasdedesarrollo.

SASE2012WorkshopLinuxEmbebido

90

TamaodelKernelLinux
FuentesdelLinux2.6.31:
Tamaocrudo:350MB(30,900archivos,~12,000,000lneas)
gzip:75MB
bzip2:59MB(mejor)
lzma:49MB(elmejor)
UnLinuxmnimo2.6.29compiladoconlaopcinCONFIG_EMBEDDED,
parabootearenunQEMUPC(discoIDE,ext2filesystem,binarios
ELF):532KB(comprimido),1325KB(descomprimido)
Porqusontangrandeslasfuentes?
Proveenmilesdedrivers,muchosprotocolosdered,muchas
arquitecturas,muchossistemasdearchivos,etc...
ElncleodeLinux(scheduler,manejadordememoria...)esbastante
chico.

SASE2012WorkshopLinuxEmbebido

91

TamaodelKernelLinux
TamaodelfuentedeLinuxpordirectorios(KB)
arch
block
crypto
Documentation
drivers
fs
include
init
ipc
kernel
lib
mm
net
scripts
security
sound
usr

Linux2.6.17
Medido con:
dusapparentsize
0

SASE2012WorkshopLinuxEmbebido

50000

100000

150000

92

Bajandolasfuentes
Archivoscompletos

Contienelasfuentescompletasdelkernel.
Bastanteparabajaryparadescomprimir.Esnecesariohacerlopor
lomenosunavez.
Ejemplo:http://kernel.org/pub/linux/kernel/v2.6/linux2.6.14.7.tar.bz2

Parchesincrementalesentreversiones

Asumequetensunaversinbaseyqueaplicastetodoslos
parchesenelordencorrecto.

Rpidoparabajaryaplicar

Ejemplo
http://kernel.org/pub/linux/kernel/v2.6/patch2.6.14.bz2(2.6.13to2.6.14)
http://kernel.org/pub/linux/kernel/v2.6/patch2.6.14.7.bz2(2.6.14to2.6.14.7)

Todaslasversionesanterioresestndisponiblesen:
http://kernel.org/pub/linux/kernel/
SASE2012WorkshopLinuxEmbebido

93

AplicandounparcheaLinux
Siempreaplicaralaversinx.y.<z1>
Sepuedenbajarcomprimidosen
gzip,bzip2.

Podshacerpatch30%
msrpidousandosp1
enlugardep1
(silent)

Siempreproducidosparan=1
Ejemplo:
cdlinux2.6.13
bzcat../patch2.6.14.bz2|patchp1
bzcat../patch2.6.14.7.bz2|patchp1
cd..;mvlinux2.6.13linux2.6.14.7

Mantenerelarchivocomprimido:Sirveparaverificarlafirma.
Unopuedeveryeditarelarchivosindescomprimirlousandovim:
vimpatch2.6.14.bz2((des)compresinonthefly)

SASE2012WorkshopLinuxEmbebido

94

PrcticaFuentesdelKernel

Bajarlasfuentes
Descomprimirlas,familiarizarse.

SASE2012WorkshopLinuxEmbebido

95

UsoembebidodelKernelLinux

Compilandoybooteando
ConfiguracindelKernel

SASE2012WorkshopLinuxEmbebido

96

ConfiguracindelKernel
YavimosqueelKernelcontienemilesdedriversyotrascosas.
Proveemilesdeopcionesparacompilarselectivamente
diferentespartesdelcdigo.
LaconfiguracindelKerneleselprocesodeseleccindelas
opcionesquequeremosquetenganuestroKernel
Esteconjuntodeopcionesdependede

Nuestrohardware

DelasprestacionesquenecesitamosdelKernel

SASE2012WorkshopLinuxEmbebido

97

ConfiguracindelKernel
Laconfiguracinseguardaenelarchivo.configenlarazdelas
fuentes

Archivodetextoplano,estilokey=value

Comolasopcionestienendependenciasesraroeditarelarchivoa
mano.Seusaninterfacesgrficas:

make[xconfig|gconfig|menuconfig|oldconfig]
EstossontargetsdelMakefiledelKernel.Corrermakehelpnosda
unalistadetargetsdisponibles.

ParacambiarelKernelenunadistroGNU/Linux:
laconfiguracinusadanormalmenteesten/boot/,juntoconla
imagendelKernel:/boot/config2.6.1711generic

SASE2012WorkshopLinuxEmbebido

98

makexconfig
makexconfig
Lainterfazgrficamscomn.
Antesdeusarleer:
help>introduction:datostiles!
Filebrowser:facilitacargararchivosdeconfiguracin
Interfazdebsquedadeparmetros
PaquetesdeDebian/Ubunturequeridos:
libqt3mtdev,g++

SASE2012WorkshopLinuxEmbebido

99

makexconfigscreenshot

SASE2012WorkshopLinuxEmbebido

100

makexconfig:bsqueda
Buscaunapalabra
cableenlas
descripciones
Tedejaactivarono
lasopciones
encontradas.

SASE2012WorkshopLinuxEmbebido

101

Opcionesdeconfiguracin
Compiladocomomdulo(archivoseparado)
CONFIG_ISO9660_FS=m

Opcionesdeldriver
CONFIG_JOLIET=y
CONFIG_ZISOFS=y

CompiladoestticoenelKernel
CONFIG_UDF_FS=y

SASE2012WorkshopLinuxEmbebido

102

.configcorrespondiente
#
#CDROM/DVDFilesystems
#
CONFIG_ISO9660_FS=m
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
CONFIG_UDF_FS=y
CONFIG_UDF_NLS=y

Nombredelaseccin
(ayudaaencontrarsettings)

Todoslosparmetroscomienzan
conCONFIG_

#
#DOS/FAT/NTFilesystems
#
#CONFIG_MSDOS_FSisnotset
#CONFIG_VFAT_FSisnotset
CONFIG_NTFS_FS=m
#CONFIG_NTFS_DEBUGisnotset
CONFIG_NTFS_RW=y

SASE2012WorkshopLinuxEmbebido

103

Dependenciasdelasopciones
HaydependenciasentrelasopcionesdelKernel
Porejemplo,activarundriverderednecesitatenerelstackde
redcompilado.
Dostiposdedependencias:

Dependenciasdependson.Enestecaso,laopcinAque
dependedeBnoesvisiblehastaqueBnoestactivada.
Dependenciasselect.Enestecaso,sitratodeactivarlaopcinA,
entoncesBesseleccionadaautomticamente.
makexconfigpermitevertodaslasopciones,incluidaslasqueno
sepuedenseleccionarporfaltardependencias.Enesecaso,las
muestraencolorgris.

SASE2012WorkshopLinuxEmbebido

104

makegconfig
makegconfig
Nuevofrontendbasado
enGTK.Funcionalidad
similaralademake
xconfig.
Nosepuedebuscar.
Paquetesrequeridos:
libglade2dev

SASE2012WorkshopLinuxEmbebido

105

makemenuconfig
makemenuconfig
tilcuandonotengo
interfazgrfica.Muy
cmodatambin!
Mismainterfazquese
usaenotras
herramientas:BusyBox,
buildroot...
Paquetesrequeridos:
libncursesdev

SASE2012WorkshopLinuxEmbebido

106

makeoldconfig
makeoldconfig
Frecuentementenecesario!
Usadoparaactualizarunarchivo.configdeuna
versinanteriordelKernel
Emiteadvertenciascuandoseusaronconfiguraciones
quenoexistenmsenelnuevoKernel
Preguntaporelvalordenuevasopciones
Siseeditaamanoel.configesmuyrecomendable
ejecutarmakeoldconfigdespus!

SASE2012WorkshopLinuxEmbebido

107

makeallnoconfig
makeallnoconfig
Sloactivalasfuncionesfuertementerecomendadas
Todolodems,nolocompila.
Muytilparapartirdelomnimoyagregarloque
necesitamos.
Msfcilagregarlopocoquenecesitamosquesacartodo
loquesobra!

SASE2012WorkshopLinuxEmbebido

108

Deshaciendocambiosenlaconf.
Unproblemafrecuente:
DespusdevarioscambiosdeconfiguracioneselKernel
dejadefuncionar.
Siunonoseacuerdatodosloscambiosquefue
haciendo,sepuederecuperarlaconfiguracinanterior:
>cp.config.old.config
Todaslasinterfacesdeconfiguracin
(xconfig,menuconfig,allnoconfig...)
mantienenunacopiadeseguridaden.config.old.

SASE2012WorkshopLinuxEmbebido

109

Configuracionesporarquitectura
Elconjuntodeconfiguracionesdependedelaarquitectura

Algunasconfiguracionessonmuyespecficas.
Lamayoradelasopciones(opcionesglobalesdelKernel,
subsistemadered,filesystems)sonvisiblesentodaslasarchs.

Poromisin,elsistemadecompilacinasumeunacompilacin
nativa.
Laarquitecturanoseespecificaentrelasopcionesde
compilacin,sinoenunnivelsuperior.
Vamosavercmoseleccionarlaarquitecturaquequeremos.

SASE2012WorkshopLinuxEmbebido

110

UsoembebidodelKernelLinux

CompilandoeinstalandoelKernel
Paraelsistemahost

SASE2012WorkshopLinuxEmbebido

111

Compilacindelkernel
make

Eneldirectorioprincipaldelcdigo

Recordardeusarmakejnsitenesmsdeuncoren=cores+1

Notensqueserroot!

Genera

vmlinux,imagencruda,sincomprimirenformatoELF,tilpara
debuggingperonopuedeserbooteado.
arch/<arch>/boot/*Image,laimagenfinal,usualmente
comprimidaypuedeserbooteada.

bzImageparax86,zImageparaARM,vmImage.gzparaBlackfin,
etc.

Losmdulosdekernelestndistribuidosportodaslasfuentesy
sonarchivosqueterminanen.ko.

SASE2012WorkshopLinuxEmbebido

112

InstalacindelKernel
makeinstall

InstalaelKernelenelsistemahost.Sedebecorrercomoroot.

Instala

/boot/vmlinuz<version>
LaimagendelKernelcomprimida.Lamismaqueen
arch/<arch>/boot
/boot/System.map<version>
GuardaladireccindelossmbolosdelKernel
/boot/config<version>
ConfiguracindelKernelparaesaversin
Usualmenteejecutalautilidaddeconfiguracindelbootloader
paraincorporarelnuevoKernel

SASE2012WorkshopLinuxEmbebido

113

Instalacindelosmdulos
makemodules_install

Instalalosmdulosenelsistemahost.Sedebeejecutarcomoroot.

Instalalosmdulosen/lib/modules/<version>/

kernel/
Guardatodosarchivoslos.ko(KernelObject),manteniendo
laestructuradelasfuentes.
modules.alias
Archivousadoporlasherramientasquecarganmdulos.Por
ejemplo:
aliassoundservice?0snd_mixer_oss
modules.dep
Dependenciasdelosmdulos
modules.symbols
Muestraaqumdulocorrespondecadasmbolo.

SASE2012WorkshopLinuxEmbebido

114

Limpiandolafuentes
Limpiarlosarchivosgeneradosporcompilacin
(paraforzaracompilartodonuevamente):
makeclean
Borratodoslosarchivosgenerados.Usadocuando
cambiamosdearquitectura
Cuidado:tambinborraelarchivos.config!
makemrproper
Tambinborrarlosarchivosdebackupyarchivos
generadosporpatch.tilcuandoseesthaciendo
unparche.
makedistclean

SASE2012WorkshopLinuxEmbebido

115

UsoembebidodelKernelLinux

CompilandoybooteandoLinux
Archivosdedispositivos

SASE2012WorkshopLinuxEmbebido

116

Dispositivosdecaracteres
Seaccedencomounflujosecuencialdecaracteres
individuales
Seidentificanporeltipoc
(lsl):
crwrw1rootuucp4,64Feb232004/dev/ttyS0
crww1jdoetty136,1Feb232004/dev/pts/1
crw1rootroot13,32Feb232004/dev/input/mouse0
crwrwrw1rootroot1,3Feb232004/dev/null

Ejemplos:teclados,mouse,puertoparalelo,IrDA,
Bluetoothport,consolas,terminales,etc...

SASE2012WorkshopLinuxEmbebido

117

Dispositivosdebloques
Seaccedenporbloquesdedatosdealgntamaofijo.
Puedenserledosencualquierorden.
Seidentificanporeltipodearchivob(lsl):
brwrw1rootdisk3,1Feb232004hda1
brwrw1jdoefloppy2,0Feb232004fd0
brwrw1rootdisk7,0Feb232004loop0
brwrw1rootdisk1,1Feb232004ram1
brw1rootroot8,1Feb232004sda1

Ejemplos:discosrgidosyfloppy,discosram,dispositivos
loop...

SASE2012WorkshopLinuxEmbebido

118

Nmerosminorymajor
Comoseveenlosejemplosanterioreslosarchivostienendos
nmerosasociados:
Elprimero:elnmeromajor
Elsegundo:elnmerominor
Losnmerosmajoryminorsonnmerosusadosporel
Kernelparavincularundriverconundispositivo.Los
nombresdelosarchivosnoleimportanalKernel!
Parasaberaqudrivercorrespondecadanmero,ver
Documentation/devices.txt.

SASE2012WorkshopLinuxEmbebido

119

Creacindelosarchivos
Nosecreancuandosecargaeldriver
Debensercreadosdeantemano:
sudomknod/dev/<device>[c|b]<major><minor>
Ejemplos:
sudomknod/dev/ttyS0c464
sudomknod/dev/hda1b31

SASE2012WorkshopLinuxEmbebido

120

PrcticaConfigurarycompilar

ConfigurarsuKernel
Compilarlo
Bootearloenunamquinavirtual

SASE2012WorkshopLinuxEmbebido

121

UsoembebidodelKernelLinux

CompilandoybooteandoLinux
Iniciogeneraldelsistema

SASE2012WorkshopLinuxEmbebido

122

Secuenciadebooteotradicional
Bootloader
EjecutadoporelhardwaredesdeunaposicinfijadeROM/Flash
Inicializaelsoportedelosdispositivosdondeseencuentraelkernel.
(almacenamiento,red,mediosremovibles)
CargaelKernelenRAM
EjecutalaimagendelKernel(conunosparmetrosdeterminados)

Kernel
Seautodescomprime
InicializaelncleodelKernelydriverscompiladosestticos(necesariosparaacceder
alrootfilesystem)
Montaelrootfilesystem(especificadoporelparmetroroot)
Ejecutaelprimerprogramadeuserspace(especificadoporelparmetroinit)

Primerprogramadeuserspace
Configurauserspaceycontinalevantandoservicios

SASE2012WorkshopLinuxEmbebido

123

ParmetrosdelKernel
ElKernelaceptaparmetrosalmomentodebootear
Sonpartedelaconfiguracindelbootloader
SoncopiadosaRAMporelbootloaderalaposicindeRAM
dondelosesperaelKernel.
tilesparamodificarelcomportamientodelKernelalmomento
debooteo,sinrecompilarlo.
tilesparahacerinicializacinavanzadadedriversyelKernel
sinlanecesidaddetenercomplejosscriptsdeuserspace.

SASE2012WorkshopLinuxEmbebido

124

Ejemplodelosparmetros
HPiPAQh2200PDAejemplo:
root=/dev/ram0\
rw\
init=/linuxrc\
console=ttyS0,115200n8\
console=tty0\
ramdisk_size=8192\
cachepolicy=writethrough

Rootfs(primerramdisk)
Mododemontajedelrootfs
Primerprogramauserspace
Consola(serie)
Otraconsola(framebuffer)
Otrosparmetros...

Cientosdeparmetrosdescriptosen:
Documentation/kernelparameters.txt

SASE2012WorkshopLinuxEmbebido

125

Desventajas
Seasumequetodoslosdriversnecesariosparamontarelrootfs
(almacenamientoyfs)estncompiladosestticosenelkernel.
Sepuedeasumirenlamayoradelossistemasembebidosque
estovaapasar,dondeelhardwareesconocidoyelkernelest
afinadoalsistema.
Esusualmenteerrneaenlossistemasdesktopyserversdonde
unaimagentienequelevantarenunacantidaddedispositivos
muygrande.

Senecesitamsflexibilidad
Losmdulostedanestaflexibilidad,peronoestndisponibles
hastamontarelrootfilesystem.
Necesidaddesoportarsistemascomplejos(RAID,NFS,etc.)

SASE2012WorkshopLinuxEmbebido

126

Solucin
Unasolucinesincluirunpequeorootfstemporalconlosmdulos
necesariosdentrodelKernelmismo.Estesistemadearchivosse
llamainitramfs.
Elinitramfsesunsistemadearchivoscomprimidocpioconun
rootfsmuybsico.

Uncpioescomounzipperoconunformatomuchomssimple.

Losscriptsdelinitramfsvanadetectarelhardware,cargarlos
mdulosnecesariosymontarelrootfsreal.
Finalmente,ellosscriptsdelinitramfsvanacorrerlaaplicacininit
delrootfsrealycontinuarelbooteousual.
Estatcnicareemplazacompletamentelosinitramdisks(initrds),
queseusabanconLinux2.4,peronosonmsnecesarios.

SASE2012WorkshopLinuxEmbebido

127

Bootloader
EjecutadoporelhardwaredesdeunaposicinfijadeROM/Flash
Inicializaelsoportedelosdispositivosdondeseencuentraelkernel.(almacenamiento,red,medios
removibles)
CargaelKernelenRAM
Ejecutalaimagendelkernel(conunosparmetrosdeterminados

Sincambios

Secuenciadebooteoconinitramfs

Kernel
Sedescomprime
Inicializaelncleoylosdriverscompiladosestticos.
Descomprimeelarchivocpiodelinitramfs.(siexiste,dentrodelkernel,sinoelbootloaderlocopiaauna
parteespecficadememoria)yloextraeenelcachedelkernel.
Siencontruninitramfs,ejecutaelprimerprogramadentrodelinitramfs./init

Userspace:script/init(eslomismoqueunuserspacenormal)
Correcomandosparaconfigurareldispositivo
(configuracindered,montar/procy/sys...)
Montaelrootfs.Cambiaraesefilesystem(switch_root)
Corre/sbin/init

Userspace:/sbin/init
Configuraloquenoestconfiguradoporelinitramfs.
Levantalosservicios(demonios,servers)yprogramasdeusuario

SASE2012WorkshopLinuxEmbebido

128

Ventajasinitramfs
Esunasolucinsimple,meterunrootfsdirectoenelkernelo
copiadoporelbootloader.
Essimplementeunarchivocpiocomprimidoqueseextraeal
cachedearchivos.Nonecesitaunbloqueniundriverde
filesystem.
Esmsmontarfilesystemcomplejosdesdescriptsdeuserspace
quedesdecdigodekernel.Muevelacomplejidadaespaciode
usuario.
PosibilitaagregararchivosnoGPL(firmware,drivers
propietarios)enelfilesystem.Estonoeslinking,porloqueno
esunaviolacindelaGPL.

SASE2012WorkshopLinuxEmbebido

129

Comopoblaruninitramfs
UsandoCONFIG_INITRAMFS_SOURCE
enlaconfiguracindelKernel(GeneralSetup)
Selepuededaruncpioexistente
Odarleundirectorioparaserarchivado.
verDocumentation/filesystems/ramfsrootfsinitramfs.txt
yDocumentation/earlyuserspace/READMEenlasfuentesdelKernel.
Tambin,eshttp://www.linuxdevices.com/articles/AT4017834659.htmlhayuna
lindadescripcindeinitramfs(porRobLandley).

SASE2012WorkshopLinuxEmbebido

130

Resumen
Parasistemasembebidos,dossolucionesinteresantes:

Sininitramfs:Todoslosdriversestnincluidosenelkernely
secargaelrootfsfinaldirectamente.
Todoenelinitramfs!

SASE2012WorkshopLinuxEmbebido

131

UsoembebidodelKernelLinux

CompilandoybooteandoLinux
CrosscompilandoelKernel

SASE2012WorkshopLinuxEmbebido

132

CrosscompilandoelKernel
Cuandosecompilaelkernelenunamquinaparacorrerenotra
Muchomsrpidoquecompilareneltarget.
Mssencillousarlasherramientasdedesarrolloeneldesktop.
Paradiferenciarlosdeloscompiladoresnativos,loscross
compiladoresselescambialosnombres.Ejemplos:
mipslinuxgcc
m68klinuxuclibcgcc
armlinuxgnueabigcc

SASE2012WorkshopLinuxEmbebido

133

Especificarelcrosscompilador
LaarquitecturadelaCPUyqucompiladorusarseespecificancon
lasvariablesARCHandCROSS_COMPILEdelMakefile.
ElMakefiledefineCC=$(CROSS_COMPILE)gcc
LoscomentariosdelMakefiledanmsdetalles.
LomsfcilseramodificarelMakefile.
Ejemplo,plataformaARM,crosscompiler:armlinuxgcc
ARCH
?=arm
CROSS_COMPILE ?=armlinux
Otrassoluciones

AgregarARCHyCROSS_COMPILEalalneadecomandodelmake

Definirlascomovariablesdeentorno.

Noolvidarsedeconfigurarestosvaloresparatodoslospasos.
Sinoelkernelseconfunde!

SASE2012WorkshopLinuxEmbebido

134

ConfigurandoelKernel
makexconfig
Igualquelacompilacinnativa
Lasopcionesvanaserdiferentes
Noolvidardeponereltipodedispositivocorrecto!

SASE2012WorkshopLinuxEmbebido

135

Archivosdeconfiguracin
assabet_defconfigintegrator_defconfigmainstone_defconfig
badge4_defconfigiq31244_defconfigmx1ads_defconfig
bast_defconfigiq80321_defconfigneponset_defconfig
cerfcube_defconfigiq80331_defconfignetwinder_defconfig
clps7500_defconfigiq80332_defconfigomap_h2_1610_defconfig
ebsa110_defconfigixdp2400_defconfigomnimeter_defconfig
edb7211_defconfigixdp2401_defconfigpleb_defconfig
enp2611_defconfigixdp2800_defconfigpxa255idp_defconfig
ep80219_defconfigixdp2801_defconfigrpc_defconfig
epxa10db_defconfigixp4xx_defconfigs3c2410_defconfig
footbridge_defconfigjornada720_defconfigshannon_defconfig
fortunet_defconfiglart_defconfigshark_defconfig
h3600_defconfiglpd7a400_defconfigsimpad_defconfig
h7201_defconfiglpd7a404_defconfigsmdk2410_defconfig
h7202_defconfiglubbock_defconfigversatile_defconfig
hackkit_defconfiglusl7200_defconfig

Seencuentranenarch/arm/configs

SASE2012WorkshopLinuxEmbebido

136

Usandolosarchivosdeejemplo
Seproveenejemplosdeconfiguracinparamuchasarchsy
placas.Buscarsiestlanuestraenarch/<arch>/configs/.
Ejemplo:Sitenemosqueusaracme_defconfig,corremos:
makeacme_defconfig
Usararch/<arch>/configs/esunamuybuenamanerade
distribuirlaconfiguracinaungrupodeusuarioso
desarrolladores.
Comocontodosloscomandosdemake
Hay que especificar la arch
corriendomake<machine>_defconfig

SASE2012WorkshopLinuxEmbebido

137

CompilandoelKernel
Correr
make
Copiar
arch/<arch>/boot/zImage
alalmacenamientodeldispositivo.
Unopuedemodificararch/<arch>/boot/install.sh
paraquemakeinstalllohagaautomticamente.
makeINSTALL_MOD_PATH=<dir>/modules_install
ycopiar<dir>/lib/modules/a/lib/modules/enel
almacenamientodeldispositivo.

SASE2012WorkshopLinuxEmbebido

138

PrcticaCrosscompilando

Configurarelentornodedesarrollo
ConfigurarelMakefile
Crosscompilarelkernelparauna
plataformaarm
Enestaplataforma,usarel
bootloaderparabootearelkernel.

SASE2012WorkshopLinuxEmbebido

139

UsoembebidodelKernelLinux

Usandomdulosdelkernel

SASE2012WorkshopLinuxEmbebido

140

Mdulos
Mdulos:Agreganunafuncionalidaddadaalkernel(drivers,
soporteaalgnfilesystem,ymuchasotrascosas).
Sepuedencargarydescargarencualquiermomento,slo
cuandosenecesiten.
Sirvenparadesarrollardriverssinreiniciar:cargar,probar,
descargar,compilar,cargar...
tilparapoderhacerlaimagendelKernelchica.Importante
paralasdistribucionesdePC.
Sirveparareducireltiempodebooteo.Noperdstiempo
iniciandodriversquenousas,oquevasanecesitardespus.
Cuidado:unavezcargado,tienenpermisocompletoentodoel
espaciodelkernel.Sinproteccionesespeciales.
SASE2012WorkshopLinuxEmbebido

141

Dependenciadelosmdulos
Algunosmdulosdekerneldependedeotros,quenecesitanser
cargadosprimero.
Ejemplo:elmdulousbstoragedependedelosmdulos
scsi_mod,libusualyusbcore.
Lasdependenciassedescribenen/lib/modules/<kernel
version>/modules.dep
Estearchivosegeneraalejecutarmakemodules_install.
Sepuedeactualizarmodules.depamano,corriendo(como
root):
depmoda[<version>]

SASE2012WorkshopLinuxEmbebido

142

Kernellog
Cuandounnuevomdulosecarga,informacinrelacionada
apareceenellogdelKernel.
Elkernelguardasusmensajesenunbuffercircular.(parano
ocupartodalamemoriaconmensajes)
Losmensajesestndisponiblesusandoelcomandodmesg.
(diagnosticmessage)
Losmensajestambinsemuestranenlaconsoladelsistema
(sepuedenfiltrarlosmensajespornivelen
/proc/sys/kernel/printk)
Sepuedenagregarcosasasulogdesdeuserspace:
echoDebuginfo>/dev/kmsg

SASE2012WorkshopLinuxEmbebido

143

Utilidadesdemdulos
modinfo<module_name>
modinfo<module_path>.ko
Pideinformacindeunmdulo:parmetros,licencia,
descripcinydependencias.

Muytilantesdecargarunmdulo.

sudoinsmod<module_path>.ko
Tratadecargarunmdulo.Hayquedarleelpath
completoalarchivo.

SASE2012WorkshopLinuxEmbebido

144

Problemasalcargarunmdulo
Cuandounacargafalla,insmodnosueledarlosdetalles
necesarios.
Engeneralseencuentranenelkernellog.
Ejemplo:
>sudoinsmod./intr_monitor.ko
insmod:errorinserting'./intr_monitor.ko':1
Deviceorresourcebusy
>dmesg
[17549774.552000]Failedtoregisterhandlerfor
irqchannel2

SASE2012WorkshopLinuxEmbebido

145

Utilidadesdemdulos
sudomodprobe<module_name>
Eselusomscomndemodprobe:tratadecargarel
mdulo(incluyendosusdependencias).Muchasotras
opcionesdisponibles.Modprobeautomticamentebusca
en/lib/modules/<version>/paraelmdulodeese
nombre.
lsmod
Muestraunalistaconlosmduloscargados.Compararlo
con/proc/modules!

SASE2012WorkshopLinuxEmbebido

146

Utilidadesdemdulos
sudormmod<module_name>
Tratadedescargarunmdulo.
Slosepuedesielmdulonoestenuso.
(porejemplo,nohaymsprocesosabriendosuarchivo
dedispositivo)
sudomodprober<module_name>
Tratadedescargarelmduloytodassus
dependenciasquenoestnsiendousadas.

SASE2012WorkshopLinuxEmbebido

147

Dandoparmetrosalosmdulos
Paraconocerlosparmetrosdisponibles:
modinfosndintel8x0m
Usandoinsmod:
sudoinsmod./sndintel8x0m.koindex=2
Usandomodprobe:
Configurarlosparmetrosen/etc/modprobe.confoenotrosarchivosen
/etc/modprobe.d/:
optionssndintel8x0mindex=2
Mediantelalineadecomandosdelkernel,cuandoelmduloestcompilado
estticoenelkernel:
sndintel8x0m.index=2
driver
parmetro
valor

SASE2012WorkshopLinuxEmbebido

148

Lecturastiles
LinuxKernelinaNutshell,Dec2006
PorGregKroahHartman,O'Reilly
http://www.kroah.com/lkn/
Unabuenareferenciaenconfiguracin,compilacin
yadministracindelasfuentesdelkernel.
Disponiblegratisonline!
Buenacompaaaloslibrosimpresos,
podemosbuscar!
Sepuedebajarenpdfde:
http://freeelectrons.com/community/kernel/lkn/

SASE2012WorkshopLinuxEmbebido

149

Linux embebido

Workshop
Linux Embebido
Lucas Chiesa
Joaqun de Andrs
Germn Bassi
Laboratorio
Sistemas embebidos
FIUBA
Creative Commons BY-SA 3.0 license
Basado en : http://free-electrons.com/docs/embedded-linux-intro

Sistemasembebidos

Desarrollode
sistemasLinux
Embebidos

SASE2012WorkshopLinuxEmbebido

151

Contenidos
Usandocomponenteslibres
Herramientasparausarennuestrodispositivo

Redes

Utilidadesdesistema

Intrpretesdelenguajes

Basesdedatos

Compilandoelsistema
Emuladores

SASE2012WorkshopLinuxEmbebido

152

Linuxembebido

Seleccionandocomponenteslibresparanuestro
sistemaembebidoLinux

SASE2012WorkshopLinuxEmbebido

153

Librerasyaplicacionesde3ros
UnadelasventajasdeusarLinuxembebidoeslagrancantidad
delibrerasyaplicacionesqueunopuedeutilizarparasu
producto.

Estndisponiblesysepuedendistribuirgratuitamente,ygraciasa
sunaturalezaabierta,sepuedenanalizarymodificarparaajustara
nuestrasnecesidades.

Sinembargo,reusarestoscomponentesenformaeficientenoes
siempreunatareafcil.Unodebe:

Encontrarloscomponentes

Seleccionarelmsapropiado

Crosscompilarlo

Integrarloanuestrosistemaynuestrasotrasaplicaciones

SASE2012WorkshopLinuxEmbebido

154

Encontrarcomponentes
Freshmeat,unapginadereferenciaparamuchosproyectos
libres
http://www.freshmeat.net
FreeSoftwareDirectory
http://directory.fsf.org
MirarotrossistemasLinuxembebidosyverquusan
Mirarlospaquetesdistribuidosporlossistemasdecompilacin
desistemasembebidos.

Sesuelendistribuirporserapropiadosparaembebidos.

PreguntaralacomunidadoaGoogle
Vamosaveralgunasdelasaplicacionescomunes

SASE2012WorkshopLinuxEmbebido

155

Seleccionandocomponentes
Notodoelsoftwarelibreestenunestadolistoparausarse.Hay
queprestaratencina:

Vitalidaddeldesarrolladorylacomunidaddeusuarios.Estavitalidad
eslaqueaseguraelmantenimientoalargoplazoyunbuensoporte.
Sepuedemedirmirandoalalistadecorreoyalaactividadenel
sistemadecontroldeversiones.
Calidaddeuncomponente.Tpicamente,sielsoftwareseusaen
embebidosytieneunacomunidaddeusuarioimportante,significa
queesdeunacalidadrazonable.
Licencia.Lalicenciadeuncomponentetienequecoincidircon
nuestrasrestriccionesdelicenciamiento.Porejemplo,librerasGPL
nosepuedenusarenaplicacionespropietarias.
Requerimientostcnicos.Porsupuesto,elcomponentetieneque
coincidirconlosrequerimientostcnicosquetenemos.Noolvidar
quelepodemosagregarcosasquelefalte!

SASE2012WorkshopLinuxEmbebido

156

Licencias
Todoelsoftwarelibretedalassiguienteslibertades:

Libertaddeusar

Libertaddeestudiar

Libertadparacopiar

Libertadparamodificarydistribuirmodificaciones

Verhttp://www.gnu.org/philosophy/freesw.htmlparauna
definicindesoftwarelibre.

SASE2012WorkshopLinuxEmbebido

157

Licencias
Seseparandedoscategoras

Lascopyleft

Lasnocopyleft

Elconceptodecopyleftespedirlareciprocidadenlas
libertadesdadasaunusuario.
Elresultadoesquecuandounorecibesoftwareconcopylefty
distribuyeunaversinmodificadadelmismo,tienequehacerlo
sobrelamismalicencia.

Mismaslibertadesparalosnuevosusuarios.
Tratadefomentarquesecontribuyanlasmejorasrealizadasen
lugardemantenerlassecretas

Lasnocopyleftnotieneneserequerimientos.Podsno
compartirtuscambios,perosenecesitaatribucin.
SASE2012WorkshopLinuxEmbebido

158

GPL
GNUGeneralPublicLicense
Cubreel~55%delosproyectos.

IncluyeelKernel,Busyboxymuchasotrasaplicaciones

Esunalicenciacopyleft

Requiereeltrabajoderivadoenlamismalicencia

ProgramasquelinkeanconlibrerasGPL,tienenqueserGPL.

Algunosprogramausanlaversin2(Linuxkernel,Busyboxy
otros)
Cadavezms,seadoptalaversin3,escritaen2007

Impactaensistemasembebidos.Lav3exigequeelusuariopueda
ejecutarlaversinmodificadaeneldispositivo.

SASE2012WorkshopLinuxEmbebido

159

GPL:redistribucin
Nohayobligacionessinosedistribuyeelcdigo

Podesmantenerloscambiossecretoshastaeldadevenderlo.

Luegosepuedendistribuircopiasbinariassiempreycuando:

Seproveaelbinarioconelcdigoenalgnmediofsico.
Seproveaelbinarioconinstruccionesparaobtenerelcdigo,que
tienenqueservirportresaos.
Detalladoenlaseccin6delalicenciaGPL

Entodosloscasoslaatribucinylalicenciasedebepreservar.

Versecciones4y5

SASE2012WorkshopLinuxEmbebido

160

LGPL
GNULesserGeneralPublicLicense
Cubreel~10%delosproyectoslibres.
Esunalicenciacopyleft

Versionesmodificadassedebendistribuirconlamismalicencia.
PerolosprogramasquelinkeancontraLGPLnonecesitan
mantenerlalicencia,puedenserpropietarios.
Sinembargo,elusuariotienequetenerlaposibilidaddeactualizar
lalibrera.Sedebeusarlinkeodinmico.

UsadoenlugardeGPLesmuchaslibreras,incluidaslas
librerasdeC

Algunasexcepciones:MySQL,oQt<=4.4

Tambintienedosversiones,v2yv3
SASE2012WorkshopLinuxEmbebido

161

Licencias:ejemplos
SehacenmodificacionesalKernel(agregardriversoadaptara
unaplaca),aBusybox,UBootuotrocomponenteGPL

Debsdarlasversionesmodificadasbajolamismalicencia,yestar
listoparadistribuirelcdigoalosdistintosclientes.

SehacenmodificacionesalalibrerasdeCoaotrabiblioteca
LPGL

Sedebedistribuirlaversinmodificadabajolamismalicencia.

SecreaunaaplicacinconunabibliotecaLGPL

Podesmantenerlaaplicacinpropietaria,perotensquelinkear
dinmicamente.

Hacesmodificacionesacdigonocopyleft

Podesmantenerlasmodificacionespropietarias,perotensque
darcrditoalosautores.

SASE2012WorkshopLinuxEmbebido

162

Licenciassincopyleft
Haymuchaslicenciassincopyleft,perosontodasmuysimilares
ensusrequerimientos.
Algunosejemplos

Apache(~4%)

BSD(~6%)

MIT(~4%)

Artisticlicense(~9%)

SASE2012WorkshopLinuxEmbebido

163

LicenciaBSD
Copyright(c)<year>,<copyrightholder>
Allrightsreserved.
Redistributionanduseinsourceandbinaryforms,withor
withoutmodification,arepermittedprovidedthatthefollowing
conditionsaremet:
*Redistributionsofsourcecodemustretaintheabove
copyrightnotice,thislistofconditionsandthefollowing
disclaimer.
*Redistributionsinbinaryformmustreproducetheabove
copyrightnotice,thislistofconditionsandthefollowing
disclaimerinthedocumentationand/orothermaterialsprovided
withthedistribution.
*Neitherthenameofthe<organization>northenamesof
itscontributorsmaybeusedtoendorseorpromoteproducts
derivedfromthissoftwarewithoutspecificpriorwritten
permission.
[...]

SASE2012WorkshopLinuxEmbebido

164

Esestosoftwarelibre?
Lamayoradelosproyectosusanunade~10licenciasbien
conocidas.Esbastantefcilparalamayoradelosproyectos
entendersulicencia.
Sinoesunaconocida,leerlalicencia.
BuscarlaopinindelaFSF
http://www.fsf.org/licensing/licenses/
OladeOSI
http://www.opensource.org/licenses
Debianpuedeserunabuenareferenciatambin

SASE2012WorkshopLinuxEmbebido

165

Respetarlaslicenciaslibres!
Elsoftwarelibrenoesdedominiopblico.Losdistribuidorestienen
obligaciones,segnlaslicencias.

Antesdeusaruncomponente,verificarquelalicenciacumplacon
nuestraslimitaciones.
Estarsegurodemantenerunalistadetodoelsoftwarelibrequese
usa.Laversinoriginalytodoslasmodificacionesyadaptaciones
bienseparadas.
Cumplirconlosrequerimientosdelalicencia,antesdedistribuir
nuestroproducto

Laslicenciasdesoftwarelibrefueronaplicadasenjuicios.

GPLviolations.org,http://www.gplviolations.org

SoftwareFreedomLawCenter,http://www.softwarefreedom.org/

SASE2012WorkshopLinuxEmbebido

166

DesarrollodesistemasLinux

Algunasaplicacionesdestacadas

SASE2012WorkshopLinuxEmbebido

167

Dropbear:clienteyserverssh
http://matt.ucc.asn.au/dropbear/dropbear.html
Serversshdemuypocofootprint,parasistemasembebidos.
Sirvetantocomoclienteycomoserver!
Tamao:110KB,compiladoestticoconuClibceni386.
(OpenSSHclienteyserver:approx1200KB,
compilandodinmicoconglibceni386)
tilpara:

Tedaaccesoaunaterminaleneldispositivo.

Tepermitecopiararchivosaltarget(scporsyncessh).

SASE2012WorkshopLinuxEmbebido

168

Beneficiosdeunainterfazweb
Muchosdispositivosdered,slotienenesainterfaz
Ejemplos:modems/routers,cmarasIP,impresoras...
Nohayquehacerprogramasespecialesparausarenlas
computadorasconectadasaldispositivo!Nohayproblema
soportandotodoslossistemasoperativos!
SlosenecesitaescribirunapginaHTMLestticaodinmica
(posiblementeconmuchoJavaScript,ejecutadoenelcliente).
Esunamanerasimpledepodercambiarlaconfiguracindel
dispositivo.
Reduceelcostodehardware.NonecesitamosagregarLCDs,
menosbotones.Slonecesitamosunpocomsde
almacenamiento.

SASE2012WorkshopLinuxEmbebido

169

thttpd
Tiny/Turbo/ThrottlingHTTP
server
http://acme.com/software/thttpd/
Simple
ImplementaHTTP/1.1mnimo
(oquizunpoquitoms)
Simpleparaconfiguraryusar.
Pequeo
Tamaopequeo:88K,
Apache:264K
Muypocousodememoria,no
haceforksytienecuidadocon
elusodememoria.

SASE2012WorkshopLinuxEmbebido

Portable
Compilabienenlamayora
delossistemasUnix.
Rpido
Casitanrpidocomolos
serversmsimportantes.
Seguro
Diseadoparaprotegeral
sistemaqueloejecutade
ataques.
Otrosservers:BusyBox,
Lighttpd,BOA

170

Intrpretes
Hayinterpretesparaloslenguajesdescriptsmscomunes,
tilespara:

Desarrollodeaplicaciones

Desarrollodeserviciosweb.

Scripting

Lenguajessoportados

Lua

Python

Perl

Ruby

TCL

PHP

SASE2012WorkshopLinuxEmbebido

171

BaseslivianasSQLite
http://www.sqlite.org
SQLiteesunapequealibreradeCqueimplementaunmotordeSQL
autocontenido,embebible,liviano,ysinconfiguracin.
Eselmotordebasesdedatospreferidoparalossistemasembebidos.

Sepuedeutilizarcomounalibreranormal.
Sepuedeembeberdirectamenteenunaaplicacin,inclusoenuna
propietariayaqueSQLiteesliberadaaldominiopblico.

SASE2012WorkshopLinuxEmbebido

172

DesarrollodesistemasLinux

Ejemplosdedispositivosreales

SASE2012WorkshopLinuxEmbebido

173

Aplicacionesindustriales
Enmuchasaplicacionesindustriales,elsistemaesresponsable
deobservarycontrolarundispositivo.
Dichosistemaesusualmenterelativamentesimpleentrminos
decomponentes:

Kernel

BusyBox

LibreradeC

AplicacionesqueusandirectamentelalibreradeC,posiblemente
utilizandolascapacidadesrealtimedelKernelLinux.
PosiblementeunservidorWebparaelcontrolremotodelequipo.
Tambinpuedeserotroservidorimplementandounprotocolo
propio.

SASE2012WorkshopLinuxEmbebido

174

Portarretratosdigital:requerimientos
EjemplotomadodeunaconferenciaporMattPorter,Embedded
AlleyenELC2008
Hardware:ARMSoCconDSP,audio,800x600LCD,MMC/SD,
NAND,botones,parlantes
Elportarretratostienequepoder:

DibujarenelLCD
DetectarlaconexindeunaSD,notificaralasaplicacionesdeesto
paraquepuedencrearuncatlogodeimgenesenlamemoria.

Interfaz3Dmodernaconlindastransiciones.

Navegacinpormediodebotones.

Reproduccindeaudio(MP3,playlists,ID3tag)

EscalaryrotarJPEG

SASE2012WorkshopLinuxEmbebido

175

Portarretratosdigital:componentes
Sistemabase

ComponentespresentesenprcticamentetodoslossistemasLinux
embebidos.

ElbootloaderUBoot

ElKernelLinux

DriversparaSD/MMC,framebuffer,sonido,dispositivosdeentrada

Busybox

Sistemaparacompilarelsistema,utilizaronOpenEmbedded

Componentes:UBoot,Kernel,BusyBox

SASE2012WorkshopLinuxEmbebido

176

Portarretratosdigital:componentes
ManejodeeventoseinsercindeunamemoriaSD.

udevrecibeeleventodelKernel,crealosnodosdelosdispositivos
yenvaloseventosaHAL.
HALmantieneunabasededatosdedispositivosdisponiblesy
proveeunainterfazDBus.
DBusparaconectarHALconlaaplicacin.Laaplicacinse
suscribealoseventosdeHALpormediodeDBusydeestaforma
seenteracuandohaynuevoseventosdehardware.
Componentes:udev,hal,dbus

SASE2012WorkshopLinuxEmbebido

177

Portarretratosdigital:componentes
AbririmgenesJPEG

libjpegparadecodificarlasimgenes.

jpegtranparaescalaryrotarlasimgenes.

FIM(FbiImproved)paradithering

SoporteMP3

libmadparareproducir

libid3paraleerlostagsmp3

libm3uparasoportarplaylists

Seusancomponentesprovistosporelfabricanteparautilizarel
DSPparareproducirMP3.

SASE2012WorkshopLinuxEmbebido

178

Portarretratosdigital:componentes
Interfaz3D

Vincent,unaimplementacinlibredeOpenGLES

Clutter,APIdealtonivelparadesarrollaraplicaciones3D.

Laaplicacinensi:

ManejaeventosdelaSD

UsalaslibrerasdeJPEGparadecodificarydibujarlasimgenes.

Recibeloseventosdeentradadelosbotonesydibujarunainterfaz
OpenGLprogramadautilizandoClutter.

Manejalasconfiguracionesdeusuario.

ReproducelosarchivosMP3conlaslibrerasrelacionadas.

Pasalasfotosenformadediapositivas.

SASE2012WorkshopLinuxEmbebido

179

DesarrollodesistemasLinux

Compilandoelsistema

SASE2012WorkshopLinuxEmbebido

180

Compilandoelsistema
Objetivos

Integrartodosloscomponentesdesoftware,tantolosde
terceroscomolospropios,obteniendounrootfsfuncional.
Involucradescargar,extraer,configurar,compilareinstalar
todosloscomponentes.Sepuedenecesitarresolver
problemasyadaptarlasconfiguraciones.

Muchassoluciones

Manualmente

Herramientasdecompilacindesistema.

Distribucionesofilesystemsprearmados.

SASE2012WorkshopLinuxEmbebido

181

Compilandoelsistema:manualmente
Implicarealizartodoslospasosmencionados,amano.
Todaslasbibliotecasydependenciassedebenconfigurar,
compilareinstalarenelordencorrecto.
Algunasveces,elsistemadecompilacinusadoporlibreraso
aplicacionesnofacilitalacrosscompilacin,porloquepuede
sernecesarioadaptarlo.
Nohayinfraestructuraparareproducirunacompilacindesde
cero.Puedeserproblemticosinecesitamoscambiarun
componenteosiotrapersonaretomaelproyecto,etc..

SASE2012WorkshopLinuxEmbebido

182

Compilandoelsistema:manualmente
Noesrecomendadoparaproyectosquevanaentraren
produccin.
Sinembargo,usandolasherramientasautomticas,devezen
cuandonosvamosaencontrarconproblemasparticulares.
Tenerunentendimientobsicodecmosecompilaunsistema
manualmenteresultademuchautilidadparaarreglarlos
problemasencontradosconlasherramientasautomticas.

Vamosaanalizarunaherramientaautomticayusarlaenuna
prctica.

SASE2012WorkshopLinuxEmbebido

183

Cimientosdelsistema
Unrootfsbsiconecesitaporlomenos:

Unajerarquatradicionaldedirectorios,con/bin,/etc,
/lib,/root,/usr/bin,/usr/lib,/usr/share,
/usr/sbin,/var,/sbin

Unconjuntodeutilidadesbsicas,queproveenporlomenosel
programainit,unshellyotroscomandostradicionalesdeUnix.
UsualmenteesprovistoporBusyBox.
LalibreradeCyotraslibrerasrelacionadas(thread,math,etc.),
instaladasen/lib
Unospocosarchivosdeconfiguracin,como/etc/inittab,y
scriptsdeinicializacinen/etc/init.d

Sobreestoscimientoscomunesacasitodoslossistemas,
podemosagregarcomponentesnuestrosodeterceros.

SASE2012WorkshopLinuxEmbebido

184

Herramientas:principios
Existendiferentesherramientasparaautomatizarelproceso
decompilarelsistematarget,incluyendoelsistema,Kernel
yalgunasveceseltoolchain.
Ellas,automticamentedescargan,configuran,compilane
instalantodosloscomponentesenelordencorrecto.
Muchasveces,aplicanparchesparaarreglarproblemaspor
crosscompilar.
Yacontienenunagrancantidaddepaquetesquedeberan
cubrirtodoslosrequerimientosprincipales,ysonfcilmente
extensibles.
Lacompilacinsetransformaenalgoreproducible,loque
permitecambiarcomponentes,actualizarlos,arreglarbugs,
msfcilmente.
SASE2012WorkshopLinuxEmbebido

185

Herramientasdisponibles
Muchasopciones
Buildroot,desarrolladoporlacomunidad
http://www.buildroot.net
PTXdist,desarrolladoporPengutronix
http://www.pengutronix.de/software/ptxdist/index_en.html
OpenWRT,originalmenteunforkdeBuildrootpararoutersWiFi,
ahoraunproyectomsgenrico.
http://www.openwrt.org
LTIB,desarrolladoprincipalmenteporFresscale.Buensoportepara
placasFreescale(algodeNXP).Comunidadpequea.
http://www.bitshrine.org/
OpenEmbedded,msflexibleperomscomplejo
http://www.openembedded.org
Herramientasespecficasdeunfabricante(desilicioosoporteen
Linux)
SASE2012WorkshopLinuxEmbebido

186

Buildroot
Permitecompilareltoolchain,unrootfsconmuchasaplicaciones
ylibreras,unbootloaderyunaimagendelKernel.
SoportacompilartoolchainssloconuClibc,peropuedeusar
unoexternoconglibc.
Msde500aplicacionesylibrerasintegradas.Desdelascosas
msbsicashastastackscomplejoscomo:X.org,Gstreamer,Qt,
Gtk,Webkit,etc.
Buensoporteparasistemaspequeosymedianos,con
funcionesfijas.

Nosoportageneracindepaquetes(.debor.ipk)
Necesitaunarecompilacincompletaporcasicualquiercambio
deconfiguracin.

Comunidadactiva,unreleasecada3meses.
SASE2012WorkshopLinuxEmbebido

187

Buildroot
Laconfiguracinserealiza
medianteunainterfaz*config
similaraladelKernel
makemenuconfig
Permitedefinir

ArquitecturayCPU

Configuracindeltoolchain

Conjuntodeaplicacionesy
librerasparaagregar

ImgenesdeFSparagenerar

Conf.delKernelydelBootloader

Compilatodoejecutando:
make
SASE2012WorkshopLinuxEmbebido

188

OpenEmbedded
ElsistemamsverstilypoderosoparaarmarunsistemaLinux
Embebido.

Unacoleccinderecetasrecipes(archivos.bb)

Unaherramientaqueprocesaesasrecetas:bitbake

Integramsde2000aplicacionesylibreras,esaltamente
configurable,puedegenerarpaquetes(.ipk),norecompilatodo
alcambiarunaconfiguracin.
Laconfiguracinsehaceeditandounoscuantosarchivosde
configuracin.
Buenoparasistemasmsgrandesoparagentequebusca
configurabilidadyextensibilidad.
Desventajas:nohayreleasesestables,difcildeaprender,muy
lentoenlaprimeracompilacin.
SASE2012WorkshopLinuxEmbebido

189

Distribuciones
DebianGNU/Linux,http://www.debian.org
DisponibleparaARM,MIPSyPowerPC
Proveeunsistemalistoparausarcontodoelsoftwarequepuedas
necesitar.
Muchaflexibilidadgraciasalsistemadepaquetes.Slosirvesihay
muchoalmacenamiento(>300MB)yRAM(>64MB).
Elsoftwaresecompilaenformanativaporomisin.
Podesarmartuspropiasimgenesenx86usandoelcomando
debootstrap.
EmdebianesunproyectoparahacerDebianmejorparaembebidos.
UtilizalospaquetesdeDebian,reduciendolasdependencias,con
menosconfiguracin,sacaladocumentacin,soportauClibc...Ver
http://emdebian.org.
SASE2012WorkshopLinuxEmbebido

190

Distribuciones
UbuntuGNU/Linux
BasadoenDebian,conalgunasmejoras
Unnuevoreleasecada6meses,
soportepor18mecesohasta3aos.
SuportadoenARM,>=CortexA8.ProveebinariosThumb2.
PeronosoportaNeontodava.
Buenasolucinparadispositivosmultimedia.
Otros
FedoratambinsoportaARM,peronoesmuymantenido.

SASE2012WorkshopLinuxEmbebido

191

Distribucionesembebidas
Existendistribucionesespecficasparaembebidos
Meego:http://meego.com/
Apuntaacelulares,reproductoresdemultimedia,
netbooks,Tvs,IVI.
SoportadoporIntelyNokia(msomenos).
Android:http://www.android.com/
DistribucindeGoogleparatelfonosytabletPCs.
SalvoelKernel,unuserspacemuydiferentede
otrasdistros.Muyexitosa,muchasaplicaciones
disponibles(muchaspropietarias).
ngstrm:http://www.angstromdistribution.org/
ApuntaaPDAsyMIDs(SiemensSimpad...)
Binariosparaarmlittleendian.
SASE2012WorkshopLinuxEmbebido

192

PrcticaBuildroot

Compilarunsistema
usandoBuildroot.
Observarquetanfciles!

SASE2012WorkshopLinuxEmbebido

193

Sistemasdearchivosdebloques

Sistemasde
archivosde
bloques

SASE2012WorkshopLinuxEmbebido

194

Blockvs.Flash
Losdispositivosdealmacenamientoseclasificanendos
categoras:blockdevicesyflashes

Sonmanejadosporsubsistemasdiferentesyusansistemasde
archivosdiferentes.

Blockdevicessepuedenleeryescribirdeabloques,sinborrary
nosegastanporusarlosmuchasveces.

Discosrgidos,floppy,RAM.
PendrivesUSB,CompactFlash,SD,sonbasadosenflash,pero
tienenintegradosuncontroladorqueemulaundispositivode
bloque.

Flash,necesitanserborradas,normalmenteenbloquesms
grandesqueeltamaodebloque.Llamadoeraseblock

NORyNANDflash

SASE2012WorkshopLinuxEmbebido

195

Blockfilesystemstradicionales
Filesystemstradicionales
Puedenquedarenunestadonocoherentedespusde
unproblemadelsistemaocortedeluz.Requiereun
chequeocompletoalreiniciar
ext2:filesystemtradicionaldeLinux
(sereparaconfsck.ext2)
vfat:Windowsfilesystemtradicional
(sereparaconfsck.vfatenGNU/LinuxoScandisk
enWindows)

SASE2012WorkshopLinuxEmbebido

196

Filesystemsconjournals
Diseadospara
permaneceren
estadoscorrectos,
inclusodespusde
cortesdeluz.
Todaslasescrituras
sonprimeroescritas
aljournalantesdeser
pasadasalos
archivos.

Aplicacin
Userspace
Kernelspace
(filesystem)

Escribeaunarchivo

Escribeuna
entradaaljournal

Escribeelarchivo

Borraeljournal

SASE2012WorkshopLinuxEmbebido

197

Recuperacindespusdeuncorte
Reiniciar
Reiniciar

No

Journal
Journal
vaco?
vaco?

Descartar
Descartar
entradas
entradas
incompletas
incompletas
Si

Graciasaljournalel
sistemadearchivos
nuncasedejaenun
estadocorrupto.
Igualmentesepueden
perderlosltimos
cambiosantesdel
apagn.

Ejecutar
Ejecutar
journal
journal
FilesystemOK
FilesystemOK

SASE2012WorkshopLinuxEmbebido

198

filesystemsdebloquesconjournals
filesystemsdebloquesconjournals:
ext3:ext2conunaextensinparausarjournal
ext4:lanuevageneracin,conmuchasmejoras.Yasepuede
usaryeselfsporomisinendistrosmodernas.
ElKernelLinuxsoportamuchosotrossistemasdearchivos:
reiserFS,JFS,XFS,etc.Cadaunoconsuscaractersticas
propias,peroengeneralorientadosaaplicacionesparticulares.
btrfs(ButterFS)
Laprximageneracindelosext.EnelKernel,perotodava
experimental.

SASE2012WorkshopLinuxEmbebido

199

Squashfs
Squashfs:http://squashfs.sourceforge.net
Reemplazaaunfsanterior:Cramfs!Esparahacerfsreadonly.
Tamaomximodelfs:264bytes.
Lograaltacompresinyaltodesempeo.
Soportatamaosdebloquedehasta64K(enlugarde4K),tiene
mayorcompresinyhastadetectaarchivosduplicados!
IncluidoenelKerneldesde2.6.29.Seusanparchesparalas
anteriores.
Benchmarks:(3vecesmschicosqueext3,y24vecesmsrpido)
http://elinux.org/Squash_Fs_Comparisons

SASE2012WorkshopLinuxEmbebido

200

tmpfs
tilparamantenerdatosenRAM:archivosdelog,informacintemporal...
Nousarramdisks!Tienenmuchosproblemas:tamaofijo,elespacio
librenosepuedeusarcomoRAM,archivosduplicadosenRAM(enel
dispositivoyenelcachedearchivos)!
Configuracindetmpfs:Filesystems>Pseudofilesystems
Viveenelcachedearchivos.NopierdeRAM:seagrandayseachica
paraacomodaralosarchivos,noduplicaypuedemandarpginasa
swapsiesnecesario.
Cmousarlo:seleccionardiferentesnombresparalosdispositivospara
reconocerlo.Ejemplos:
mountttmpfsvarrun/var/run
mountttmpfsudev/dev
VerDocumentation/filesystems/tmpfs.txt.

SASE2012WorkshopLinuxEmbebido

201

Usandoreadonlyyreadwrite

Unaparticincomprimidareadonly(Squashfs)
Tpicamenteparaelrootfs(binarios,kernel...).
Compresinahorraespacio.Readonlyprevieneerroresy
corrupcindedatos.
Unaparticinreadwriteconunfsconjournal(comoext3)
Usadoparaguardardatosdeconfiguracin.
Garantizalaintegridaddelfsdespusdeapagones.

Squashfs
Readonly
root
filesystem
comprimido
ext3
readwrite
configuracin
ydatosde
usuario

BlockStorage

Esunabuenaideasepararelusodelosfsdebloques

tmpfs

readwrite
datosvoltiles

SASE2012WorkshopLinuxEmbebido

RAM

GuardarenRAMarchivostemporales,comologs(tmpfs)

202

FilesystemsFlash

Filesystems
Flash

SASE2012WorkshopLinuxEmbebido

203

ElsubsistemaMTD
MTD: Memory Technology Devices (flash, ROM, RAM)
InterfazdefilesystemsdeLinux
Mdulosdeusuario
MTD
UBI

jffs2

yaffs2

Chardevice

Blockdevice

Readonlyblockdevice

FlashTranslationLayers
paraemulardispositivosde
bloques
algoritmospatentados!

FTL

NFTL

INFTL

DriversdechipsMTD
NANDflash

DiskOnChipflash

ROMchips

NORflash

RAMchips

Hardware
SASE2012WorkshopLinuxEmbebido

204

DispositivosMTD
Sonvisiblesen/proc/mtd
Eldrivermtdcharcreaundispositivodecaracteresparacada
dispositivoMTDenelsistema.

Usualmentellamado/dev/mtdX,major90.minorsparespara
accesorwyminorsimparesparaaccesoro.

Proveeioctl()paraborrarymanejarlaflash

Usadopormtdutils

EldrivermtdblockcreaundispositivodebloqueporcadaMTDdel
sistema.

Usualmentellamado/dev/mtdblockX,major31.Elminoresel
nmerodelMTDcorrespondiente.
Permiteleeryescribirenbloques.Nosoportasectoresmalosni
wearleveling.

SASE2012WorkshopLinuxEmbebido

205

HaciendoparticionesenMTD
UsualmentesehacenparticionesenlosMTD

Permiteusardiferentesreasdelaflashcondiferentespropsitos:
FSRO,FSRW,backup,bootloader,kernel,etc.

Notienensupropiatabladeparticiones.Lasparticionesse
debendescribirexternamente.

HardcodedenelcdigodelKernel

EspecificadoenlalneadecomandosdelKernel

CadaparticincreaundispositivoMTDdiferente.

Diferenciasconelesquemadenombresdelosdispositivosde
bloques.(hda3,sda2)
/dev/mtd1puedeserlasegundaparticindelprimerMTDola
primeradelsegundo.

SASE2012WorkshopLinuxEmbebido

206

HaciendoparticionesenMTD
LasparticionesMTDsondefinidasenelKernel,enladefinicinde
lasplacas:arch/arm/machat91/boardusba9263.c
Ejemplo:
staticstructmtd_partition__initdataek_nand_partition[]={
{
.name="LinuxKernel",
.offset=0,
.size=SZ_16M,
},
{
.name="RootFS",
.offset=MTDPART_OFS_NXTBLK,
.size=120*SZ_1M,
},
{
.name="FS",
.offset=MTDPART_OFS_NXTBLK,
.size=120*SZ_1M,
}
};

SASE2012WorkshopLinuxEmbebido

207

ModificandoparticionesMTD
PorsuertelasparticionesMTDsepuedendefinirporlalneade
comandos.
PrimerohayqueencontrarelnombredelosdispositivosMTD.
MirandoellogdelKernel:
NANDdevice:ManufacturerID:0xec,ChipID:
0xda(SamsungNAND256MiB3,3V8bit)
Scanningdeviceforbadblocks
Baderaseblock2000at0x0fa00000
Creating3MTDpartitionson"atmel_nand":
0x000000000x01000000:"LinuxKernel"
0x010000000x08800000:"RootFS"
0x088000000x10000000:"FS"

SASE2012WorkshopLinuxEmbebido

208

ModificandoparticionesMTD
SepuedeusarelparmetrodeKernelmtdparts
Ejemplo:
mtdparts=atmel_nand:2m(kernel)ro,1m(rootfs)ro,(data)

Recindefinimos3particioneseneldispositivoatmel_nand:

kernel(2M)

rootfs(1M)

data

Lostamaosdelasparticionestienenquesermltiplosdeltamao
deloseraseblock.
Sepuedenusartamaosenbase16.Recuerden:
0x20000=128k,0x100000=1m,0x1000000=16m
rocrealaparticincomodeslolectura
significatodoelespaciorestante.
SASE2012WorkshopLinuxEmbebido

209

mtdutils
UnconjuntodeutilidadesparamanejarMTDs

mtdinfodainformacindetalladadeunMTD

flash_eraseallborracompletamenteunMTD

flashcpparaescribiraNORflash

nandwriteparaescribiraNANDflash

UtilidadesUBI

Herramientasparacrearimgenesdefsdeflash:mkfs.jffs2,
mkfs.ubifs

Usualmenteseencuentranenelpaquetemtdutilsdela
distribucin.
Verhttp://www.linuxmtd.infradead.org/

SASE2012WorkshopLinuxEmbebido

210

jffs2
http://www.linuxmtd.infradead.org/doc/jffs2.html
ElestndaractualparaMTDs

API de archivos

Lindasfunciones:compresinonthefly(reducelugary
operacionesdeI/O),toleranteacortesdeluz,wear
levelingyECC.
Desventajas:noescalabien

Eltiempodemontajedependedetamaodelfs:
elKerneltienequeescaneartodoelfsalmomento
demontar,parasaberqubloquepertenecea
cadaarchivo.
SenecesitausarlaopcindelKernel
CONFIG_JFFS2_SUMMARYparareducireste
problema.Guardarestainfoenflash.(de16sa
0.8sparaunaparticinde128MB).

SASE2012WorkshopLinuxEmbebido

JFFS2
filesystem
MTD driver

Flash chip

211

jffs2Cmousarlo
Eneltarget
SenecesitamtdutilsdelproyectoMTD,osuvariantepara
Busybox
Borraryformatearunaparticinjffs2:
flash_eraseallj/dev/mtd2
Montarlaparticin:
mounttjffs2/dev/mtdblock2/mnt/flash
Agregarelcontenidoescribiendolosarchivos.
(copiarloporredodeotroalmacenamiento)
Otraposibilidad:usarunaimagenjffs2:
flash_eraseall/dev/mtd2
nandwritep/dev/mtd2rootfs.jffs2

SASE2012WorkshopLinuxEmbebido

212

Cmocrearlaimagenjffs2
mkfs.jffs2:comandodisponibleenelpaquetemtdutils.
Cuidado:adiferenciadealgunoscomandosmkfs,nocreael
filesystemsinounaimagen.
Primero,encontrareltamaoeraseblock,UBootnandinfo:
Device0:NAND256MiB3,3V8bit,sectorsize128KiB

Luegocrearlaimageneneldesktop:
mkfs.jffs2padnocleanmarkers
eraseblock=128drootfs/orootfs.jffs2
Laopcinpadcompletalaimagenhastaelfinaldelltimo
ereaseblock.
Nohayproblemasilaparticinjffs2esmschicaquela
particin.Eljffs2vaausartodalaparticindetodasformas.
LaopcinnocleanmarkersessloparaNANDflash.
SASE2012WorkshopLinuxEmbebido

213

Montandojffs2enelhost
tilparaeditarimgenesjffs2enelequipodedesarrollo.Esuna
tareaunpococompleja,estoesunejemplo:
Primeronecesitamoseltamaodelereaseblockqueusamospara
crearlaimagenjffs2.Asumimosquees128KiB(131072bytes).
Creamosundispositivodebloqueconlaimagen
losetup/dev/loop0root.jffs2
EmulamosunMTDdesdeunblockusandoelmdulodeKernel
block2mtd
modprobeblock2mtdblock2mtd=/dev/loop0,131072
Finalmente,montamoselfs(crear/mnt/jffs2siesnecesario)
mounttjffs2/dev/mtdblock0/mnt/jffs2

SASE2012WorkshopLinuxEmbebido

214

Inicializandojffs2desdeUBoot
Podemosnoquerertenermtdutilseneltarget!
Creamoslaimagenjffs2eneldesktop
EnlalneadecomandosdeUBoot:

Bajamoslaimagenjffs2aRAMusandotftp.
Olacopiamosdesdealmacenamientoexterno(FATenUSB,porejemplo)
LaescribimosdentrodelaparticinMTD
(lasinstruccionesexactasdependedeltipodememoria,NORoNAND,
lasmismasqueseusaronparaescribirelKernel).Estarsegurosde
escribirsloeltamaodelaimagenynoms!
Siseusajffs2comorootagregarroot=/dev/mtdblock<x>y
rootfstype=jffs2alosargumentosdelkernel.

Limitacin:necesitssepararlaimagenjffs2envariosarchivossiesms
grandequeelbloquedeRAM.

SASE2012WorkshopLinuxEmbebido

215

UBI
UnsortedBlockImages
http://www.linuxmtd.infradead.org/doc/ubi.html
Unsistemadeadministracindevolmenessobre
MTD.
Permitecreardiferentesvolmeneslgicosyrepartirlos
entretodoslosdispositivosfsicos.
Seencargadeadministrarloseraseblocksywear
leveling.Facilitaimplementarlosfilesystems.

SASE2012WorkshopLinuxEmbebido

216

UBI

UBI
Logical
Erase Blocks

Volumen 1

LEB

MTD
PEB
Physical
Erase Blocks

LEB

LEB

Volumen 2

LEB

LEB

LEB

LEB

PEB PEB PEB PEB PEB PEB PEB PEB

SASE2012WorkshopLinuxEmbebido

Libre

Libre

217

UBIFS
http://www.linuxmtd.infradead.org/doc/ubifs.html
Lasiguientegeneracindejffs2,delosmismos
programadoresdelinuxmtd.
EnLinuxdesde2.6.27
TrabajasobrevolmenesUBI.
Tienemuchooverheaddemetadatapara
particioneschicas.(4M,8M)

API de archivos
UBIFS
UBI
Driver MTD

Flash chip

SASE2012WorkshopLinuxEmbebido

218

LayoutUBI

UBIFS montado
en /
(de ubi0:rootfs)

Vol.
UBI:
crudo

Volumen UBI: rootfs

Dispo. UBI ubi0


Particin MTD 0

UBIFS
montado
en
/myapp

(de
ubi0:data)

JFFS2
montado en
/appsettin
gs

(de

UBIFS montado en
/var/log
(de ubi1:log)

/dev/mtd1)

Vol UBI: data

UBI Volume: log

Particin
MTD 1

Dispo. UBI ubi1


Particin MTD 2

Flash device

SASE2012WorkshopLinuxEmbebido

219

UBICaractersticasprincipales

Escala:Eltiempodemontaje,usodememoriayvelocidadde
accesocasinodependedeltamaodelamemoria.
Montavelozmente:Nonecesitaescaneartodoeldispositivoal
momentodemontar.
Writeback:Mejoranotoriamenteeldesempeodelsistema.
Toleranteacortes:Alserunfsconjournalnosecorrompepor
apagadasrepentinas.
Agregamuchooverheadenmemoria.Lohacecasiimposiblede
usarconpocosmegasdeflash.

SASE2012WorkshopLinuxEmbebido

220

SquashFS
http://squashfs.sourceforge.net/
Filesystemparadispositivosdebloque.NosoportalaAPIMTD.
Sinembargo,comoesreadonly,funcionabienconmtdblock,
siempreycuandoelchipnotengasectoresdefectuosos.
Sepuedeusarparapartesreadonlydelfilesystem.Peronote
podesconfiarenl.Siemprepuedenaparecerlossectores
defectuosos.

SASE2012WorkshopLinuxEmbebido

221

Conclusiones
Convertirlasparticionesjffs2aubifs!
Amenosquetengasmenosde10MBde
memoria,dondeUBIpierdemucholugar.
SepuedeusarSquashFSparametertodavams
datosenlamemoriaflash.Recomendableusarlo
sobreUBI,paraquetodoslossectoresparticipen
delwearlevelingybadblocks.

SquashFS
MTD block
MTD API
UBI
MTD driver

Flash chip

SASE2012WorkshopLinuxEmbebido

222

Almacenamientoflashblock
Laflashnosepuedeacceder,slomediantelainterfazde
bloque.
Porlotanto,nohaymaneradeaccederalainterfazdebajonivel
delamemoriayusarlosFSdeLinuxparahacerwearleveling.
Nohaydetallesdelacapa(FlashTranslationLayer)queusan.
stosseguardancomosecretosdelfabricanteypueden
escondercomportamientospobres,omalacalidad.
Porlotanto,esmuyrecomendablelimitarlacantidadde
escriturasenestosdispositivos.

SASE2012WorkshopLinuxEmbebido

223

Reduciendolasescrituras
Porsupuesto,nousarflashparaswap(igualmenteesrarotener
swapenembebidos)
MontarreadonlyousarreadonlyFSs(SquashFS)siemprequesea
posible
MantenerarchivosvoltilesenRAM(tmpfs)
Usarlaopcindemontajenoatime,paraevitaractualizarel
filesystemcadavezqueseleaunarchivo.Sisenecesitasaberel
tiempodeacceso,usarlaopcinrelatime(poromisindesde
Linux2.6.30).
Nousarlaopcindemontajesync(escribirinmediatamente).Usar
lallamadaasistemafsync()paraforzarsincronizacinpor
archivos.
PodesnousarFSsconjournal.Causanmsescrituras,peroson
msrobustos(tradeoff).
SASE2012WorkshopLinuxEmbebido

224

Lecturasrecomendadas
IntroduccinaJFFS2yLogFS:
http://lwn.net/Articles/234441/
LindapresentacinsobreUBI:
http://freeelectrons.com/redirect/celfubi.html
Documentacindelinuxmtd:
http://www.linuxmtd.infradead.org/

SASE2012WorkshopLinuxEmbebido

225

Resumiendo...
Datos
Datos
voltiles?
voltiles?

No

Readonly?
Readonly?

No

Tipode
Tipode
dispo.
dispo.

MTD

Tieneflash?
Tieneflash?

No

Usarext2
Usarext2
con
connoatime
noatime

Usarsquashfs
Usarsquashfs

Usartmpfs
Usartmpfs

Block

UsarUBIFS
UsarUBIFS
oJFFS2
oJFFS2

Usarext3oext4
Usarext3oext4

Ver la documentacin (con detalles) de todos los FSs del Kernel en


Documentation/filesystems/.
SASE2012WorkshopLinuxEmbebido

226

PrcticaSistemasflash

Crearparticionesenlos
dispositivosflash.
Formatearlaparticinprincipal
enSquashFSsobremtdblock.
Usarjffs2paralosdatos.

SASE2012WorkshopLinuxEmbebido

227

DesarrollodesistemasLinux

GNU/Linuxdesktop
Emuladores

SASE2012WorkshopLinuxEmbebido

228

qemu
http://fabrice.bellard.free.fr/qemu/
Emuladordeprocesador.
Emuladordesistemacompleto
Emulaelprocesadoryvariosperifricos
Supporta:x86,x86_64,ppc,arm,sparc,mips,m68k
Parasaberquearchs.estnsoportadas:
qemusystemarmM?
Emulacindei386,x86_64:cercanaalavelocidadnativa
graciasalmdulodeKernelkqemu(ahoraGPLv2!).

SASE2012WorkshopLinuxEmbebido

229

Otrosemuladores
ARM

SkyEye:http://skyeye.sourceforge.net
EmulavariasplataformasARM(AT91,Xscale...)ypuede
bootearvariossistemasoperativos.(Linux,uClinux,otros...)

Softgun:http://softgun.sourceforge.net
SistemaARMvirtualconmuchosperifricosonboard.
CorreLinux.

SWARMSoftwareARMemuladorarm7
http://www.cl.cam.ac.uk/~mwd24/phd/swarm.html
PuedecorreruClinux

ColdFireemulator
http://www.slicer.ca/coldfire/
PuedecorreruClinux
SASE2012WorkshopLinuxEmbebido

230

DesarrollodeLinuxEmbebidos

Referencias

SASE2012WorkshopLinuxEmbebido

231

Lecturastiles
EmbeddedLinuxSystemDesignandDevelopment
P.Raghavan,A.Lad,S.Neelakandan,Auerbach,Dec.2005.
http://freeelectrons.com/redirect/elsddbook.html
BuildingEmbeddedLinuxSystems,O'Reilly
ByKarimYaghmour,JonMasters,GiladBenYossefand
PhilippeGerum,andothers(includingMichaelOpdenacker),
August2008
http://oreilly.com/catalog/9780596529680/
EmbeddedLinuxPrimer,PrenticeHall
ByChristopherHallinan,September2006

SASE2012WorkshopLinuxEmbebido

232

Sitiostiles
LinuxDevices.com:http://linuxdevices.com
Notassemanalesconnoticiasyanunciosdedispositivos
queusanLinux.
Artculos,notastcnicasycatlogodeproductos.
Unapginaexcelenteparaseguirlosdesarrollosdela
industria.

SASE2012WorkshopLinuxEmbebido

233

Das könnte Ihnen auch gefallen