linux para sistemas embebidos - seminario de sistemas...

58
Requerimientos previos Conceptos generales Componentes Linux para sistemas embebidos Seminario de Sistemas Embebidos Lucas Chiesa Joaqu´ ın de Andr´ es SSE, Departamento de Electr´onica Facultad de Ingenier´ ıa Universidad de Buenos Aires 4 de junio de 2010 Basado en Embedded Linux training L. Chiesa, J. de Andr´ es Linux para sistemas embebidos

Upload: others

Post on 21-Mar-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

Linux para sistemas embebidosSeminario de Sistemas Embebidos

Lucas Chiesa Joaquın de Andres

SSE, Departamento de ElectronicaFacultad de Ingenierıa

Universidad de Buenos Aires

4 de junio de 2010

Basado en Embedded Linux training

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 2: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

Agenda

1 Requerimientos previos

2 Conceptos generales

3 Componentes

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 3: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

Agenda

1 Requerimientos previos

2 Conceptos generales

3 Componentes

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 4: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

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 proveenMontaVista, 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 ausar (y saber si realmente sirven para algo) las comerciales.

Linux embebido requiere usar 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 Linux para sistemas embebidos

Page 5: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

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, configurarservicios. . .

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 Linux para sistemas embebidos

Page 6: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

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 adivinarmucho.

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 7: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

Memorias Flash

Las memorias Flash estan basadas entransistores MOSFET de gate flotante.La informacion se guarda en el gateflotante en forma de carga. Esta cargamodula el Vt del transistor con lo queaplicando una tension intermedia sepuede saber si el gate esta cargado o no.

Word LineControl Gate

SourceLine

N N

Float Gate

Bit Line

P

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 8: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

Memorias Flash Tipo NOR

WordLine 0

WordLine 1

WordLine 2

WordLine 3

WordLine 4

WordLine 5

Bit Line

N N, GND N

P

N, GND N N, GND N

Acceso aleatorio a bit

Borrado por bloque

Alta duracion: 1k a 1Mciclos

Conexion paralelo:

Mayor consumoConexionado simple

Mayor area - Menordensidad

Mas caras

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 9: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

Memorias Flash Tipo NAND

WordLine 0

WordLine 1

WordLine 2

WordLine 3

WordLine 4

WordLine 5

WordLine 6

WordLine 7

Bit LineSelect

Transistor

GroundSelect

Transistor

Bit Line

N N N N N N N N N N N

P

Acceso de a bloques

Borrado por bloque

Baja duracion: 5k-100kciclos

Conexion serie:

Menor consumoVarios standards (ONFI,OneNAND)

Menor area - Mayordensidad

Complejidad de control(ECC y BBT)

Mas baratas

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 10: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

Tipos de dispositivos en Linux

Block Device:

Dividido en sectores (chicos, 512bytes en general)

Tienen dos operaciones basicas, read sector y 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 block y write to erase block.

Hay que manejar los bloques defectuosos desde el SO.

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 11: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

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 blocks no 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 especıfico.

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 12: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

IntroduccionLicenciaRequerimientos

Agenda

1 Requerimientos previos

2 Conceptos generales

3 Componentes

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 13: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

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 Linux para sistemas embebidos

Page 14: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

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,librerıas 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 Linux para sistemas embebidos

Page 15: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

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 anindustrial 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 timersde 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 Linux para sistemas embebidos

Page 16: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

IntroduccionLicenciaRequerimientos

Linux es Software Libre

Todas las fuentes de Linux, kernel y librerıas que uno usa sonlibres, esto implica que:

Cuando recibıs o compras un dispositivo con Linux, te tienenque dar las fuentes, con derecho a estudiarlas, modificarlas yredistribuirlas.Cuando producıs un dispositivo con Linux, debes entregar 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 librerıas que lo permiten, la aplicacion propia (loque realmente se esta vendiendo), no tiene que ser libre1.

1Aunque libre es mejor, por supuesto.L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 17: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

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 un DIR-300?

procesador 182 MHz MIPS.

16 MiB de memoria RAM. 4 MiB de memoria Flash.

Display: Un par de leds :)

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 18: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

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 un DIR-300?

procesador 182 MHz MIPS.

16 MiB de memoria RAM. 4 MiB de memoria Flash.

Display: Un par de leds :)

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 19: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

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 un DIR-300?

procesador 182 MHz MIPS.

16 MiB de memoria RAM. 4 MiB de memoria Flash.

Display: Un par de leds :)

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 20: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

IntroduccionLicenciaRequerimientos

Requerimientos mınimos

Una CPU soportada por el Kernel de Linux y GCC

32 bitsCPUs sin MMUs estan soportadas por uCLinux

Pocos megas de RAM. 4 mınimo. 8MB para hacer algo util.

Pocos megas de almacenamiento, 2 mınimo. 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 Linux para sistemas embebidos

Page 21: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

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 librerıas 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 Linux para sistemas embebidos

Page 22: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

IntroduccionLicenciaRequerimientos

¡Nos interesa la opcion 2!

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 23: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

Agenda

1 Requerimientos previos

2 Conceptos generales

3 Componentes

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 24: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

Arquitectura general

Hardware destino

Bootloader

Linux Kernel

Librería de C

Lib 1 Lib 2

App 1 App 2 A. 3H

erra

mie

ntas

PC

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 25: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando 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.

Librerıa de C: Interfaz entre el Kernel y las aplicaciones.

Librerıas y aplicaciones: Agregadas de otros lados odesarrolladas por nosotros.

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 26: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando 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, librerıas, aplicaciones formando un sistemafuncional.

Desarrollo de aplicaciones: Desarrollo normal de aplicaciones,pero usando un conjunto predefinido de librerıas y lenguajes.

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 27: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando 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 librerıas, aplicaciones ydatos del sistema.

Armar este sistema de archivos es una de lastareas fundamentales al embeber Linux a undispositivo.

El kernel suele dejarse separado.

Memoria flash

Bootloader

Kernel

Rootfilesystem

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 28: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando 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 librerıa 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 Linux para sistemas embebidos

Page 29: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

Sistemas de archivos

Algunos son formatos con que se representan los archivos enel medio fısico: squashfs, jffs2, ubifs, logfs.

Otros crean unidades virtuales sin modificar el contenido delos discos: sysfs, unionfs, mini fo, procfs.

Una correcta utilizacion nos va a permitir cumplir con todoslos requerimientos mencionados antes.

Flash (ROM)

squashfs (RO) jffs2 (RW)

Flash (ROM)

squashfs (RO) jffs2 (RW)

mini_fo (RW)

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 30: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

Algunos directorios importantes

Principales directorios del root filesystem:

/: directorio raız

bin: Binarios basicos y necesarios.lib: Librerıas 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 librerıas “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 Linux para sistemas embebidos

Page 31: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

Kernel Linux

¿Que es el kernel?

Linux es el 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 Linux para sistemas embebidos

Page 32: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

Linux Kernel (cont.)

Es interesante mirar el directorio arch/ en las fuentes.

Como dijimos antes, mınimo: 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/<arch>/Kconfigarch/<arch>/READMEDocumentation/<arch>/

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 33: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

Muchos drivers, muchas prestaciones

Fuentes de Linux 2.6.31: 350 MB (30,900 archivos, aprox12,000,000 lıneas) (∼50 MB comprimido).

Kernel mınimo para un QEMU PC (disco IDE, ext2, binariosELF):

532 KB (comprimido)1325 KB (descomprimido)

¿Por que son tan grandes las fuentes? Linux incluye miles dedrivers, muchos protocolos de red, muchas arquitecturas, sistemasde archivos...Sin embargo, el nucleo (scheduler, manejo de memoria) esbastante chico!

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 34: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

Muchos drivers, muchas prestaciones (cont.)

Es necesario adaptar el Kernel a nuestra placa y necesidades!

Para eso lo tenemosque compilara.

Voy a necesitarherramientas paracompilarlo, untoolchain.

aEn realidad tenemos quecompilar el kernel y todos losbinarios del root filesystem

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 35: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

Algunas opciones importantes

Ahora dejamos un poco la presentacion para ver algunas opcionesfundamentales del Kernel.

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 36: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

Todavıa nos falta algo para poder compilar

Un Toolchain:

Las herramientas de desarrollo tıpicas 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 Linux para sistemas embebidos

Page 37: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

Cross-Toolchain

Código fuente

Toolchainnativo

Cross-toolchain

x86

Binario x86 Binario ARM

ARM

x86

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 38: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

¿Por que me dicen toolchain y no compilador?

Binutils

Libreríasde C/C++

Kernelheaders

CompiladorGCC

debbuger GDB(opcional)

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 39: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

Binutils

Binutils es 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 librerıas.

objdump, readelf, size, nm, strings: inspeccionan binarios.

strip: le saca partes inutiles a un binario para reducir sutamano.

Licencia GPL.

http://www.gnu.org/software/binutils/

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 40: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

Kernel headers

La librerıa de C y algunosprogramas necesitan interactuarcon el Kernel, para eso necesitanconocer:

Las llamadas a sistemadisponibles.Las definiciones de constantes.Los tipos de datos disponibles

Por lo tanto, compilar la librerıa deC y algunas aplicaciones necesitantener los headers del kerneldisponibles.

Kernel

Kernel header

Libs.

Aplicaciones

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 41: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

Kernel headers (cont.)

La interfaz del Kernel al espacio de usuario es compatible haciaatras:

Los binarios generados con un toolchain que tiene headersanteriores 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 Linux para sistemas embebidos

Page 42: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando 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 Linux para sistemas embebidos

Page 43: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

Librerıa de C

La librerıa 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 librerıas 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 mismalibrerıa de C.

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 44: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

¡Querida, encogı a mis programas!

Si bien existen muchas, las mas usadas son glibc, eglibc y uClibc.

glibc: librerıa GNU original. Optimizada para velocidad, pocoamistosa para embebidos.

eglibc: binariamente compatible con glibc, mas flexible paracompilar.

uClibc: librerıa 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 Linux para sistemas embebidos

Page 45: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando 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 librerıa de C usar.

La version de todos los componentes.

Elegir las opciones de compilacion de todas las partes.

Que ABI usar. 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 caracterısticas especiales.

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 46: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

Compilando un toolchain (cont.)

Pasos basicos para compilar un toolchain:

Extraer e instalar los headers del kernel.

Extraer, configurar, compilar e instalar binutils

Extraer, configurar y compilar una primera version del gcc quegenera binarios para nuestro target.

Extraer, configurar y compilar la librerıa de C usando elcompilador recien compilado.

Re configurar y compilar el compilador con la nueva librerıa deC.

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 47: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando 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 losprogramas necesarios y los compilamos uno por uno. Podemostardar dıas...

Usamos alguna de las herramientas para hacer toolchains:

OpenEmbeddedcrosstool-NGbuildroot / 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 Linux para sistemas embebidos

Page 48: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

crosstool-NG

Es una herramienta especıfica para compilar toolchains.

Veamos algunas opciones...

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 49: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando 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 mayorıa provee otrasfunciones:

Consola serie con linea de comandos.

Inspeccion de la memoria del sistema, diagnostico dehardware.

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 50: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando 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 rıgido.

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 el Grub

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 51: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando 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. Elbootloader 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 mınimocomo 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. Es necesaria la documentacion del fabricante.

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 52: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando 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 popularesson:

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 especıficospara cada arquitectura.

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 53: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando 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, quepermite 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 Linux para sistemas embebidos

Page 54: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

Terminal serie

La mayorıa 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 MBFlash: 2 MBIn: serialOut: serialErr: serialu-boot #

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 55: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando 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 lacomputadora 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 Linux para sistemas embebidos

Page 56: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando 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 Linux para sistemas embebidos

Page 57: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando todo

Buildroot (cont.)

Tambien usa el sistema de configuracion del Kernel, Kconfig.Veamos algunas opciones.

L. Chiesa, J. de Andres Linux para sistemas embebidos

Page 58: Linux para sistemas embebidos - Seminario de Sistemas ...laboratorios.fi.uba.ar/lse/seminario/material-1erC2010/Linux_embebido... · bootloader, kernel, librer as, aplicaciones formando

Requerimientos previosConceptos generales

Componentes

EstructuraRoot filesystemKernelToolchainBootloaderJuntando 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 Linux para sistemas embebidos