Beruflich Dokumente
Kultur Dokumente
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
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
...
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)
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
build
host
Cross-nativo
target
SASE2012WorkshopLinuxEmbebido
build
host
target
Canadian
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
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
UBIFS
montado
en
/myapp
(de
ubi0:data)
JFFS2
montado en
/appsettin
gs
(de
UBIFS montado en
/var/log
(de ubi1:log)
/dev/mtd1)
Particin
MTD 1
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
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