SASE2011 Linux Embebido
-
Upload
buggy-bugger -
Category
Documents
-
view
228 -
download
0
Transcript of SASE2011 Linux Embebido
-
7/25/2019 SASE2011 Linux Embebido
1/55
Requerimientos previosConceptos generales
Componentes
Linux para sistemas embebidosSASE 2011
Lucas Chiesa Joaqun de Andres German Bassi
LSE, Departamento de Electronica
Facultad de Ingeniera
Universidad de Buenos Aires
21 de marzo de 2011
Basado enEmbedded Linux training
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
http://freeelectrons.com/doc/training/embeddedlinux/http://freeelectrons.com/doc/training/embeddedlinux/ -
7/25/2019 SASE2011 Linux Embebido
2/55
Requerimientos previosConceptos generales
Componentes
Agenda
1 Requerimientos previos
2 Conceptos generales
3 Componentes
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
-
7/25/2019 SASE2011 Linux Embebido
3/55
Requerimientos previosConceptos generales
Componentes
Agenda
1 Requerimientos previos
2 Conceptos generales
3 Componentes
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
-
7/25/2019 SASE2011 Linux Embebido
4/55
Requerimientos previosConceptos generales
Componentes
Usar Linux
Hay dos formas fundamentales de encarar el desarrollo de unsistema Linux embebido.
1 Usar alguna solucion comercial como las que proveen
MontaVista, Wind River o TimeSys. Estas traen sus propiasherramientas y entornos de desarrollo.
2 Usar soluciones provistas por la comunidad.
Tener en cuenta que: usar las herramientas libres nos va ensenar a
usar (y saber si realmente sirven para algo) las comerciales.Linux embebido requiereusar Linux en el desktop.
Las herramientas libres solo existen para Linux. Saber usarLinux nos va a hacer la vida mas facil.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
-
7/25/2019 SASE2011 Linux Embebido
5/55
Requerimientos previosConceptos generales
Componentes
Nociones basicas de administracion de Linux
Tenemos que manejar los siguientes temas fundamentales:
Instalacion de una distribucion.
Configuracion de red: levantar interfaces, configurar
servicios. . .
Crear sistemas de archivos: hacer particiones, crear lossistemas (mkfs).
Montar dispositivos: tanto particiones, como imagenes (loop),
mount.Administracion de paquetes: instalar y desinstalar programasde la forma correcta.
Manejar permisos de usuario y de administrador.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
-
7/25/2019 SASE2011 Linux Embebido
6/55
Requerimientos previosConceptos generales
Componentes
Tenemos que conocer bien nuestro dispositivo
Antes de poder compilar nada, tenemos que conocer a fondo eldispositivo que estamos usando. Algunas cosas son obvias, otrasno.
Arquitectura del procesador que estamos usando.
Marca y modelo del chip (En las placas que usan POP no lopodemos leer!).
Cantidad y tipo de memoria (RAM y Flash).
Tener la documentacion de la placa, sino hay que adivinar
mucho.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
-
7/25/2019 SASE2011 Linux Embebido
7/55
Requerimientos previosConceptos generales
Componentes
Tipos de dispositivos en Linux
Block Device:
Dividido en sectores (chicos, 512bytes en general)
Tienen dos operaciones basicas, read sectory write sector
Manejo de sectores defectuosos (LBA en discos rigidos)
Character Device:
Dispositivos tipo mouse, teclado, etc.
Memory Technology Device (MTD):
Dividido en erase blocks(grandes, 128KB en general).
Tienen tres operaciones basicas, erase erase block, read fromerase blocky write to erase block.
Hay que manejar los bloques defectuosos desde el SO.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
-
7/25/2019 SASE2011 Linux Embebido
8/55
Requerimientos previosConceptos generales
Componentes
Tipos de dispositivos en Linux (Cont.)
Problemas
Tengo pocas escrituras disponibles, si quiero rw tengo quebalancear el uso (wear-levelling).
Los erase blocksno son lo mismo que los sectores, no puedousar un file system normal.
Soluciones
Una capa de abstraccion.
Flash translation leyer (FTL): ej: mtdblock, no tiene ningunaconsideracion.Unsorted block image (UBI): hace wear-levelling, manejablockes malos, maneja bit-flips, provee volumenes dinamicos.
Un filesystem especfico.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
-
7/25/2019 SASE2011 Linux Embebido
9/55
Requerimientos previosConceptos generales
Componentes
IntroduccionLicenciaRequerimientos
Agenda
1 Requerimientos previos
2 Conceptos generales
3 Componentes
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
-
7/25/2019 SASE2011 Linux Embebido
10/55
Requerimientos previosConceptos generales
Componentes
IntroduccionLicenciaRequerimientos
Cuando necesito Linux en mi dispositivo?
Primero: Que es?
Instalar Linux en un sistema de pocos recursos.
Estoy usando un C muypoderoso. Implica muchacomplejidad en configuracion ydrivers.
La aplicacion es dinamica. Elusuario puede generar variacionesde hardware y software.
Necesito manejar muchas tareassimultaneas.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
-
7/25/2019 SASE2011 Linux Embebido
11/55
Requerimientos previosConceptos generales
Componentes
IntroduccionLicenciaRequerimientos
Que beneficios nos provee?
La comunidad de software libre ofrece una gran cantidad deherramientas para trabajar con sistemas embebidos.
Reutilizacion de componentes existentes para el sistema base.
Permite concentrarnos en nuestra aplicacion.Gran soporte de hardware.
Componentes de alta calidad, muy probados: Kernel Linux,libreras de C, etc...
Absoluta libertad para adaptarlo a nuestras necesidades.
Muchas posibilidades para desarrollar nuestra aplicacion,python, C, C++, Java...
Sin costo de licenciamiento, y permanente actualizaciongratuita.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
-
7/25/2019 SASE2011 Linux Embebido
12/55
Requerimientos previosConceptos generales
Componentes
IntroduccionLicenciaRequerimientos
Pero Linux no es Real Time. Me dijeron que use RTOS!
RT Linux
Controlling a laser with Linux is crazy, but everyone in this roomis crazy in his own way. So if you want to use Linux to control an
industrial welding laser, I have no problem with your usingPREEMPT_RT. Linus Torvalds
Linux soporta 3 clases de prioridad: Soporta prioridades duras.
Con el tiempo fue incorporando parches RT, como los timers
de alta resolucion.Es raro tener restricciones de tiempo que un Kernel vanilla nopueda proveer (Latencia de peor caso 1ms).
Si se necesita menor latencia:https://rt.wiki.kernel.org/PREEMPT_RT
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
https://rt.wiki.kernel.org/https://rt.wiki.kernel.org/ -
7/25/2019 SASE2011 Linux Embebido
13/55
Requerimientos previosConceptos generales
Componentes
IntroduccionLicenciaRequerimientos
Linux es Software Libre
Todas las fuentes de Linux, kernel y libreras que uno usa sonlibres, esto implica que:
Cuando recibs o compras un dispositivo con Linux, te tienen
que dar las fuentes, con derecho a estudiarlas, modificarlas yredistribuirlas.Cuando producs un dispositivo con Linux, debesentregar lasfuentes al destinatario con los mismos derechos, sin ningunarestriccion.
Si se modifica el Kernel u otro componente libre, se debendistribuir las modificaciones.
Si se usan libreras que lo permiten, la aplicacion propia (loque realmente se esta vendiendo), no tiene que ser libre1.
1
Aunque libre es mejor, por supuesto.L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
-
7/25/2019 SASE2011 Linux Embebido
14/55
Requerimientos previosConceptos generales
Componentes
IntroduccionLicenciaRequerimientos
Que requerimientos tiene?
Que necesito para correr Ubuntu?
procesador 1 GHz x86.
512 MiB de memoria RAM. 5 GB de espacio de disco.
Placa de video capaz de reproducir 1024x768.
Que capacidad tiene una Beagleboard?
procesador 750MHz ARM + DSP.
256 MB de memoria RAM. 256 MB de NAND Flash.
Display: Un par de leds + S-video + DVI.
Y si, puede correr Ubuntu...
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
-
7/25/2019 SASE2011 Linux Embebido
15/55
Requerimientos previosConceptos generales
Componentes
IntroduccionLicenciaRequerimientos
Que requerimientos tiene?
Que necesito para correr Ubuntu?
procesador 1 GHz x86.
512 MiB de memoria RAM. 5 GB de espacio de disco.
Placa de video capaz de reproducir 1024x768.
Que capacidad tiene una Beagleboard?
procesador 750MHz ARM + DSP.
256 MB de memoria RAM. 256 MB de NAND Flash.
Display: Un par de leds + S-video + DVI.
Y si, puede correr Ubuntu...
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
-
7/25/2019 SASE2011 Linux Embebido
16/55
Requerimientos previosConceptos generales
Componentes
IntroduccionLicenciaRequerimientos
Que requerimientos tiene?
Que necesito para correr Ubuntu?
procesador 1 GHz x86.
512 MiB de memoria RAM. 5 GB de espacio de disco.
Placa de video capaz de reproducir 1024x768.
Que capacidad tiene una Beagleboard?
procesador 750MHz ARM + DSP.
256 MB de memoria RAM. 256 MB de NAND Flash.
Display: Un par de leds + S-video + DVI.
Y si, puede correr Ubuntu...
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
-
7/25/2019 SASE2011 Linux Embebido
17/55
Requerimientos previosConceptos generales
Componentes
IntroduccionLicenciaRequerimientos
Requerimientos mnimos
Una CPU soportada por el Kernel de Linux y GCC
32 bits
CPUs sin MMUs estan soportadas por uCLinuxPocos megas de RAM. 4 mnimo. 8MB para hacer algo util.
Pocos megas de almacenamiento, 2 mnimo. 4MB para haceralgo util.
Linux no esta pensado para correr en micros mas chicos, conkB de RAM y Flash.
Programar directo sobre el micro, sin SO.Usar sistemas reducidos como FreeRTOS.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
-
7/25/2019 SASE2011 Linux Embebido
18/55
Requerimientos previosConceptos generales
Componentes
IntroduccionLicenciaRequerimientos
Como hacemos para que entre?
1 Partir de una distribucion completa (Debian, Gentoo, Arch) ysacar las cosas innecesarias.
Trabajo tedioso de analizar cada cosa que tiene la distro y versi se puede sacar.
Aun as, quedan herramientas de configuracion complejasinnecesarias.Muchas libreras compartidas que no podes sacar.El resultado final sigue siendo grande.
2 Armar una distribucion desde cero.
Se parte de unos archivos base y se agrega lo que queremos.Termina siendo mas rapido de hacer, solo le dedicas tiempo alo que necesitas.Mas facil de mantener, uno aprende a usar las herramientasmuy bien.El resultado final puede ser extremadamente chico.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
R i i i I d i
-
7/25/2019 SASE2011 Linux Embebido
19/55
Requerimientos previosConceptos generales
Componentes
IntroduccionLicenciaRequerimientos
Nos interesa la opcion 2!
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
R i i t i
EstructuraRoot filesystem
-
7/25/2019 SASE2011 Linux Embebido
20/55
Requerimientos previosConceptos generales
Componentes
Root filesystemKernelToolchainBootloaderJuntando todo
Agenda
1 Requerimientos previos
2 Conceptos generales
3 Componentes
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previos
EstructuraRoot filesystem
-
7/25/2019 SASE2011 Linux Embebido
21/55
Requerimientos previosConceptos generales
Componentes
yKernelToolchainBootloaderJuntando todo
Arquitectura general
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previos
EstructuraRoot filesystem
-
7/25/2019 SASE2011 Linux Embebido
22/55
Requerimientos previosConceptos generales
Componentes
KernelToolchainBootloaderJuntando todo
Componentes de Software
Cross-toolchain: Compilador que corre en la maquina dedesarrollo, pero genera codigo para el target.
Bootloader: Iniciado por el hardware. Responsable de lainicializacion basica, cargar y ejecutar el Kernel.
Kernel Linux:Contiene el manejo de procesos, memoria, red,drivers y provee servicios para las aplicaciones de usuario.
Librera de C: Interfaz entre el Kernel y las aplicaciones.Libreras y aplicaciones: Agregadas de otros lados odesarrolladas por nosotros.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previos
EstructuraRoot filesystem
-
7/25/2019 SASE2011 Linux Embebido
23/55
Requerimientos previosConceptos generales
Componentes
KernelToolchainBootloaderJuntando todo
Tareas principales
Generar un sistema Linux para nuestro dispositivo se divide en trestareas principales:
Desarrollo del Board Support Package: Consiste en unbootloader y kernel que pueden bootear en nuestra placa.
Integracion del sistema: Integrar todos los componentes,bootloader, kernel, libreras, aplicaciones formando un sistemafuncional.
Desarrollo de aplicaciones: Desarrollo normal de aplicaciones,pero usando un conjunto predefinido de libreras y lenguajes.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previos
EstructuraRoot filesystemK l
-
7/25/2019 SASE2011 Linux Embebido
24/55
Requerimientos previosConceptos generales
Componentes
KernelToolchainBootloaderJuntando todo
Root filesystem
En un sistema Linux, muchos sistemas dearchivos son montados y crean una estructuraglobal jerarquica de archivos y directorios.
Uno en particular, el root filesystem semonta como /.
En sistemas embebidos, este filesystemcontiene todas las libreras, aplicaciones ydatos del sistema.
Armar este sistema de archivos es una de lastareas fundamentales al embeber Linux a undispositivo.
El kernel suele dejarse separado.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previos
EstructuraRoot filesystemK l
-
7/25/2019 SASE2011 Linux Embebido
25/55
qu pConceptos generales
Componentes
KernelToolchainBootloaderJuntando todo
Root filesystem (cont.)
En dispositivos embebidos aparecen nuevos requerimientos para elroot filesystem:
Vamos a querer que este protegido. No queremos que elusuario del dispositivo borre la librera de C.
Vamos a querer que el usuario pueda cambiar la configuraciondel sistema, o posiblemente instalar un programa propio.
Vamos a querer que se pueda volver a los seteospredeterminados en caso de problemas.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previos
EstructuraRoot filesystemKernel
-
7/25/2019 SASE2011 Linux Embebido
26/55
q pConceptos generales
Componentes
KernelToolchainBootloaderJuntando todo
Sistemas de archivos
Algunos son formatos con que se representan los archivos enel medio fsico: squashfs, jffs2, ubifs, logfs.
Otros crean unidades virtuales sin modificar el contenido de
los discos: sysfs, unionfs, mini fo, procfs.
Una correcta utilizacion nos va a permitir cumplir con todoslos requerimientos mencionados antes.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previos
EstructuraRoot filesystemKernel
-
7/25/2019 SASE2011 Linux Embebido
27/55
Conceptos generalesComponentes
KernelToolchainBootloaderJuntando todo
Algunos directorios importantes
Principales directorios del root filesystem:
/: directorio raz
bin: Binarios basicos y necesarios.
lib: Libreras fundamentales del sistema.dev: Archivos descriptores de dispositivos.etc: Archivos de configuracion del sistema.sbin: Binarios de administracion.home: Directorios de usuarios.root: Archivos del usuario root.usr: Binarios y libreras de usuario.tmp: Directorio para guardar datos temporales.var: Usualmente se encuentran los servicios, paginas web,bases de datos, etc..
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previos
EstructuraRoot filesystemKernel
-
7/25/2019 SASE2011 Linux Embebido
28/55
Conceptos generalesComponentes
KernelToolchainBootloaderJuntando todo
Kernel Linux
Que es el kernel?
Linux esel kernel. :) Es lo que nos abstrae del hardware y nosfacilita su uso.
Esta compuestos de muchos subsistemas, algunos son:
Drivers: Controladores de los perifericos que tiene nuestromicro, como el puerto ethernet, usb, controladores de video.
Scheduler: Maneja al ejecucion de tareas en la CPU y laasignacion de recursos.
FreeRTOS es un kernel pequeno. Linux es un kernel mas muchocodigo de usuarios (root filesystem).
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosC l
EstructuraRoot filesystemKernel
-
7/25/2019 SASE2011 Linux Embebido
29/55
Conceptos generalesComponentes
KernelToolchainBootloaderJuntando todo
Linux Kernel (cont.)
Es interesante mirar el directorio arch/ en las fuentes.
Como dijimos antes, mnimo: 32bits con o sin MMU, consoporte de GCC.
Soporta numerosas arquitecturas (2.6.33):alpha, blackfin, h8300, m32r, microblaze, parisc,score, um, arm, cris, ia64, m68k, mips, powerpc, sh, x86,avr32, frv, m68knommu, mn10300, s390, sparc, xtensa.
El detalle de las arquitectura soportadas estan en:arch//Kconfig
arch//README
Documentation//
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosC t l
EstructuraRoot filesystemKernel
-
7/25/2019 SASE2011 Linux Embebido
30/55
Conceptos generalesComponentes
ToolchainBootloaderJuntando todo
Muchos drivers, muchas prestaciones
Fuentes de Linux 2.6.31: 350 MB (30,900 archivos, aprox12,000,000 lneas) (50 MB comprimido).
Kernel mnimo para un QEMU PC (disco IDE, ext2, binariosELF):
532 KB (comprimido)1325 KB (descomprimido)
Por que son tan grandes las fuentes? Linux incluye miles de
drivers, muchos protocolos de red, muchas arquitecturas, sistemasde archivos...Sin embargo, el nucleo (scheduler, manejo de memoria) esbastante chico!
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
EstructuraRoot filesystemKernel
-
7/25/2019 SASE2011 Linux Embebido
31/55
Conceptos generalesComponentes
ToolchainBootloaderJuntando todo
Muchos drivers, muchas prestaciones (cont.)
Es necesario adaptar el Kernel a nuestra placa y necesidades!
Para eso lo tenemos
que compilara
.Voy a necesitarherramientas paracompilarlo, untoolchain.
aEn realidad tenemos que
compilar el kernel y todos los
binarios del root filesystem
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
EstructuraRoot filesystemKernel
-
7/25/2019 SASE2011 Linux Embebido
32/55
Conceptos generalesComponentes
ToolchainBootloaderJuntando todo
Algunas opciones importantes
Ahora dejamos un poco la presentacion para ver algunas opcionesfundamentales del Kernel.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
EstructuraRoot filesystemKernelT l h i
-
7/25/2019 SASE2011 Linux Embebido
33/55
Conceptos generalesComponentes
ToolchainBootloaderJuntando todo
Todava nos falta algo para poder compilar
Un Toolchain:
Las herramientas de desarrollo tpicas que se encuentran enuna distribucion forman el toolchain nativo.
Este generalmente se usa en x86 y genera binarios para x86.Para sistemas embebidos esto normalmente es pocointeresante o imposible:
El destino es muy limitado en terminos de memoria oalmacenamiento.
Es mucho mas lento en comparacion con un desktop.Podes no querer tener herramientas de desarrollo en tudispositivo.
Por esto, se usan toolchain que cross-compilan. Corren en eldesktop y generan codigo para el dispositivo.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
EstructuraRoot filesystemKernelT l h i
-
7/25/2019 SASE2011 Linux Embebido
34/55
Conceptos generalesComponentes
ToolchainBootloaderJuntando todo
Cross-Toolchain
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
EstructuraRoot filesystemKernelToolchain
-
7/25/2019 SASE2011 Linux Embebido
35/55
p gComponentes
ToolchainBootloaderJuntando todo
Por que me dicen toolchain y no compilador?
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
EstructuraRoot filesystemKernelToolchain
-
7/25/2019 SASE2011 Linux Embebido
36/55
gComponentes
ToolchainBootloaderJuntando todo
Binutils
Binutilses un conjunto de herramientas que generan y manipulanbinarios para un tipo de CPU dado:
as: ensamblador. Genera binario a partir de codigo assembly.
ld: el linker.
ar, ranlib:generan archivos .a usados por las libreras.
objdump, readelf, size, nm, strings:inspeccionan binarios.
strip: le saca partes inutiles a un binario para reducir su
tamano.Licencia GPL.
http://www.gnu.org/software/binutils/
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
EstructuraRoot filesystemKernelToolchain
http://www.gnu.org/software/binutils/http://www.gnu.org/software/binutils/ -
7/25/2019 SASE2011 Linux Embebido
37/55
ComponentesToolchainBootloaderJuntando todo
Kernel headers
La librera de C y algunosprogramas necesitan interactuarcon el Kernel, para eso necesitan
conocer:Las llamadas a sistemadisponibles.Las definiciones de constantes.Los tipos de datos disponibles
Por lo tanto, compilar la librera deC y algunas aplicaciones necesitantener los headers del kerneldisponibles.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
C
EstructuraRoot filesystemKernelToolchain
-
7/25/2019 SASE2011 Linux Embebido
38/55
ComponentesToolchainBootloaderJuntando todo
Kernel headers (cont.)
La interfaz del Kernel al espacio de usuario es compatible haciaatras:
Los binarios generados con un toolchain que tiene headers
anteriores al Kernel que estoy usando van a funcionar sinproblemas. No van a poder usar las nuevas llamadas asistema, estructuras, etc.
Los binarios generados con un toolchain que tiene headers masnuevos que el kernel que estoy usando, pueden no andar siusan llamadas o estructuras no disponibles en el kernel viejo.
Los headers del Kernel se extraen de las fuentes del Kernel usandoel comandos make headers_install.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
C t
EstructuraRoot filesystemKernelToolchain
-
7/25/2019 SASE2011 Linux Embebido
39/55
Componentesoo c a
BootloaderJuntando todo
Compilador GCC
GNU GCC es el libre y famoso compilador (elque estuvieron usando con los Cortex!)
Puede compilar C, C++, Ada, Fortran, Java,Objective-C, Objective-C++, para un grannumero de arquitecturas, incluyendo ARM,AVR, Blackfin, CRIS, FRV, M32, MIPS,MN10300, PowerPC, SH, v850, i386,
i386 64, IA64, Xtensa.http://gcc.gnu.org/
Licencia GPL. Existe la libgcc, bajo LGPL.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
Componentes
EstructuraRoot filesystemKernelToolchain
http://gcc.gnu.org/http://gcc.gnu.org/ -
7/25/2019 SASE2011 Linux Embebido
40/55
ComponentesBootloaderJuntando todo
Librera de C
La librera de C es un componente esencial de un sistemaLinux.
Como vimos, es la interfaz entre una aplicacion y el Kernel.
Provee una conocida interfaz de C para facilitar el desarrollode aplicaciones.
Existen diferentes libreras que podemos usar: glibc, uClibc,eglibc, dietlibc, newlib, etc.
Esta eleccion se debe hacer en el momento de crear eltoolchain, ya que el GCC se compila usando esta mismalibrera de C.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
Componentes
EstructuraRoot filesystemKernelToolchain
-
7/25/2019 SASE2011 Linux Embebido
41/55
ComponentesBootloaderJuntando todo
Querida, encog a mis programas!
Si bien existen muchas, las mas usadas son glibc, eglibc y uClibc.
glibc: librera GNU original. Optimizada para velocidad, pocoamistosa para embebidos.
eglibc: binariamente compatible con glibc, mas flexible para
compilar.uClibc: librera de C pensada para embebidos, mucho maschica que la glibc.
programa C Compilado dinamico Compilado estatico
glibc uClibc glibc uClibc
hello world 5.6 K 5.4 K 472 K 18 KBusybox 245 K 231 K 843 K 311 K
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
Componentes
EstructuraRoot filesystemKernelToolchain
-
7/25/2019 SASE2011 Linux Embebido
42/55
ComponentesBootloaderJuntando todo
Compilando un toolchain
Nos vamos a centrar en los cross-toolchains, que son los mascomunes en embebidos.
Es necesario tomar muchas decisiones al compilar un toolchain.
Que librera de C usar.
Laversionde todos los componentes.
Elegir las opciones de compilacion de todas las partes.
Que ABIusar. En particular, EABI (embedded ABI) o OABI
(Old ABI).Soportar de punto flotante por hard o lo tiene que proveer eltoolchain.Soportar o no multiples idiomas en nuestro dispositivo.IPv6, u otras caractersticas especiales.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
Componentes
EstructuraRoot filesystemKernelToolchainB l d
http://kegel.com/crosstool/crosstool-0.43/buildlogs/http://kegel.com/crosstool/crosstool-0.43/buildlogs/http://kegel.com/crosstool/crosstool-0.43/buildlogs/ -
7/25/2019 SASE2011 Linux Embebido
43/55
ComponentesBootloaderJuntando todo
Compilando un toolchain (cont.)
Pasos basicos para compilar un toolchain:
Extraer e instalar los headers del kernel.
Extraer, configurar, compilar e instalar binutilsExtraer, configurar y compilar una primera version del gcc quegenera binarios para nuestro target.
Extraer, configurar y compilar la librera de C usando elcompilador recien compilado.
Re configurar y compilar el compilador con la nueva librera deC.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
Componentes
EstructuraRoot filesystemKernelToolchainB tl d
-
7/25/2019 SASE2011 Linux Embebido
44/55
pBootloaderJuntando todo
Como armo un toolchain?
Es una de la partes mas complejas... es necesario compilar eltoolchain que vamos a usar.
Lo podemos hacer a mano. Bajamos las fuentes de todos los
programas necesarios y los compilamos uno por uno. Podemostardar das...
Usamos alguna de las herramientas para hacer toolchains:
OpenEmbeddedcrosstool-NG
buildroot / OpenWRT buildrootltib (NXP)
Algunas de estas herramientas no solo armar un toolchain, sinoque tambien nos ayuda a armar el root file system.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
Componentes
EstructuraRoot filesystemKernelToolchainBootloader
-
7/25/2019 SASE2011 Linux Embebido
45/55
pBootloaderJuntando todo
crosstool-NG
Es una herramienta especfica para compilar toolchains.
Veamos algunas opciones...
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
Componentes
EstructuraRoot filesystemKernelToolchainBootloader
-
7/25/2019 SASE2011 Linux Embebido
46/55
BootloaderJuntando todo
Bootloaders
Es un programa responsable de:
Inicializacion basica del hardware.
Cargar el binario de una aplicacion (normalmente un SO) deuna flash, la red, u otro tipo de almacenamiento no volatil.
Ademas de estas funciones principales, la mayora provee otrasfunciones:
Consola serie con linea de comandos.
Inspeccion de la memoria del sistema, diagnostico dehardware.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
Componentes
EstructuraRoot filesystemKernelToolchainBootloader
-
7/25/2019 SASE2011 Linux Embebido
47/55
BootloaderJuntando todo
Bootloaders en x86
Los procesadores x86 normalmente estan en placas que tienen unamemoria no volatil que contiene un programa. La BIOS.
La BIOS se ejecuta despues de un reset, inicializa el hardwarey carga un pequeno programa desde un medio no volatil.Normalmente los primeros 512 bytes de un disco rgido.
Esto suele ser el 1er bootloader, que luego carga el bootloadercompleto.
El bootloader finalmente carga el SO y lo ejecuta.
Uno muy conocido y poderoso es elGrub
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
Componentes
EstructuraRoot filesystemKernelToolchainBootloader
http://www.gnu.org/software/grub/http://www.gnu.org/software/grub/ -
7/25/2019 SASE2011 Linux Embebido
48/55
BootloaderJuntando todo
Bootloaders en arquitecturas embebidas
En las arquitecturas embebidas, el proceso de booteo de bajo niveles dependiente de cada CPU y cada placa.
Algunas placas tienen una flash NOR desde la cual la CPUcomienza a ejecutar instrucciones despues del reset. El
bootloader se debe escribir directamente en esta memoria.Algunas CPUs tiene codigo de booteo integrado en una ROMque automaticamente carga una pequena porcion de unaNAND Flash a SRAM. Se necesita un bootloader mnimo
como primer etapa que cargue el principal. (XLoader enOMAP, BootROM en AT91SAM, etc..).
Inicia justo despues del reset, por lo que necesita inicializar todoslos dispositivos, incluyendo el controlador de la memoria paraacceder a la DRAM. Esnecesariala documentacion del fabricante.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
Componentes
EstructuraRoot filesystemKernelToolchainBootloader
-
7/25/2019 SASE2011 Linux Embebido
49/55
Juntando todo
Bootloader principal
Nos vamos a centrar en el bootloader principal, que ofrece lasfunciones mas interesantes.Hay varias alternativas libres. Entre las cuales, las mas populares
son:Das U-Boot: the Universal Boot Loader: El mas usado paraARM. Tambien usado en PPC, MIPS, x86, m68k, NIOS, etc.El mas popular de los libres.
RedBoot: basado en RedHat eCos. El segundo mas usado :)Hay muchas otras alternativas, pero por lo general son especficospara cada arquitectura.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
Componentes
EstructuraRoot filesystemKernelToolchainBootloader
-
7/25/2019 SASE2011 Linux Embebido
50/55
Juntando todo
Instalar U-Boot (o cualquier otro bootloader)
U-Boot suele estar instalado en la Flash. Dependiendo delhardware, se va a grabar de diferentes maneras:
La placa ya provee algun tipo de monitor de booteo, que
permite escribir a Flash. Se debe consultar la documentacionde dicha herramienta.
U-Boot ya esta instalado y se puede usar para grabar unanueva version. Cuidado: Si se graba una version que no anda,se puede inutilizar la placa!
La placa provee una interfaz JTAG, que permite escribir en laFlash remotamente sin tener codigo corriendo. Tambienpermite resucitar una placa.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
Componentes
EstructuraRoot filesystemKernelToolchainBootloader
-
7/25/2019 SASE2011 Linux Embebido
51/55
Juntando todo
Terminal serie
La mayora de los bootloaders tienen una terminal serie, a la queuno se puede conectar durante el booteo.
Terminal de U-Boot
U-Boot 1.1.2 (Aug 3 2004 - 17:31:20)RAM Configuration:
Bank #0: 00000000 8 MB
Flash: 2 MB
In: serial
Out: serial
Err: serial
u-boot #
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
Componentes
EstructuraRoot filesystemKernelToolchainBootloaderJ d d
-
7/25/2019 SASE2011 Linux Embebido
52/55
Juntando todo
Transferir archivos al destino
Generalmente se usa el mismo bootloader. Tanto para escribirel kernel como el root filesystem en la flash.
Es necesario intercambiar archivos entre el target y la
computadora donde se esta haciendo el desarrollo. Se puedehacer:
Copiando archivos por la red, si tenemos Ethernet y U-Boottiene el driver del chip de red. Se suele usar TFTP (aunqueHTTP es posible).
Usando un cable serie si no es posible una conexion Ethernet.Es muy practico primero grabar un bootloader configurado paratomar el root filesystem y el Kernel por red para evitar grabarmuchas veces la flash.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
Componentes
EstructuraRoot filesystemKernelToolchainBootloaderJ t d t d
-
7/25/2019 SASE2011 Linux Embebido
53/55
Juntando todo
Buildroot
Buildroot nos va a ayudar a mantener nuestro linux embebido.Sirve para compilar el toolchain, kernel, root filesystem ybootloader.
Nos facilita el primer diseno de nuestro sistema, teniendomuchos defaults.
Una vez que logramos compilar un conjunto de partes quefunciona nos podemos dedicar a optimizarlo.
Nos va a servir para mantener actualizo nuestro sistema conlas ultima versiones de los componentes. Buildroot sale cada 3meses.
OpenWRT es un fork de buildroot
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
Componentes
EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo
-
7/25/2019 SASE2011 Linux Embebido
54/55
Juntando todo
Buildroot (cont.)
Tambien usa el sistema de configuracion del Kernel, Kconfig.Veamos algunas opciones.
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos
Requerimientos previosConceptos generales
Componentes
EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo
-
7/25/2019 SASE2011 Linux Embebido
55/55
Juntando todo
... y muchas cosas mas
Quedan muchos temas que van a ir apareciendo en la practica
BusyBox: Casi todos los comandos de Unix en un ejecutable.Reduce mucho el tamano.
Mucho mas sobre filesystems. UBI parece ser el futuro.
Optimizar el root filesystem para minimizar la cantidad deescrituras, alargar la vida util de la memoria.
Interpretes de lenguajes de alto nivel.
Saber seguir la evolucion de los componentes que estamosusando...
L. Chiesa, J. de Andres, G. Bassi Linux para sistemas embebidos