SASE2011 Linux Embebido

Embed Size (px)

Citation preview

  • 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