diseÑo de plataformas de computo basadas en fpgas

35
DISEÑO DE PLATAFORMAS DE COMPUTO BASADAS EN FPGAS Oviedo Marcos <[email protected] m> Linux Embebido (1era Parte)

Upload: tate-kaufman

Post on 02-Jan-2016

46 views

Category:

Documents


0 download

DESCRIPTION

DISEÑO DE PLATAFORMAS DE COMPUTO BASADAS EN FPGAS. Oviedo Marcos . Linux Embebido (1era Parte). Agenda. Diseño embebido en una FPGA (SoC) Estrategia de aprendizaje Arquitectura de alto nivel del SW control Linux Kernel Versiones Requerimientos para ejecutar el kernel - PowerPoint PPT Presentation

TRANSCRIPT

DISEÑO DE PLATAFORMAS DE COMPUTO BASADAS EN

FPGAS

Oviedo Marcos<[email protected]>

Linux Embebido (1era Parte)

2 /Oviedo /

04/20/23

Agenda• Diseño embebido en una FPGA (SoC)• Estrategia de aprendizaje• Arquitectura de alto nivel del SW control• Linux Kernel• Versiones • Requerimientos para ejecutar el kernel• Proceso de booteo del kernel• Compilación del kernel• Root filesystem• Toolchain de crosscompilación• Herramientas• Practico

3 /Oviedo /

04/20/23

Diseño embebido en una FPGA (SoC)• Desarrollo del sistema embebido basado en

microprocesador.– Desarrollo de software de control.– Desarrollo de arquitectura de hardware que soporte el sistema

embebido

• Desarrollo del componente acelerador/aplicación especifica implementado en hardware.

• Desarrollo del canal de comunicación hardware/software.

4 /Oviedo /

04/20/23

Diseño embebido en una FPGA (SoC) (continuación)

• El sistema embebido desarrollado esta compuesto por un microprocesador (hard-core/soft-core), un conjunto de componentes de hardware necesarios para el funcionamiento del mismo y el sw de control necesario.

• Un sistema embebido es un sistema de computación diseñado para cumplir una o mas funciones dedicadas, en muchos casos con requerimientos de tiempo real.

– Esto es una gran diferencia con una computadora de propósito general, la cual esta diseñada para satisfacer un gran rango de usuarios finales.

5 /Oviedo /

04/20/23

Diseño embebido en una FPGA (SoC) (continuación)

• El Hardware de los sistemas embebido es generalmente diferente al hardware de los sistemas tradicionales

– Diferentes Arquitecturas de CPUs: ARMS, MIPS, Powerpc, Microblaze, etc.– El almacenamiento permanente es en dispositivos FLASH con capacidad limitada.– El almacenamiento dinámico en RAM también tiene capacidad limitada.– Buses de interconexión generalmente no encontrados en las PCs de escritorio:

Xilinx Crossconnect, I2C, CAN, SPI, etc.– Facilidades de debugging generalmente no disponibles en PCs de escritorio: JTAG,

puerto serial, GPIOs, LEDs, etc.

• El software de control del sistema operativo puede ser cualquier tipo de binario ejecutable por el procesador.

– Una sabia eleccion es utilizar un sistema operativo

6 /Oviedo /

04/20/23

Estrategia de aprendizaje

• Vamos ha abordar el tema en 3 secciones (1 o mas clases por sección)

– GNU Linux generalidades– Linux kernel arquitectura – detalles– Kernel drivers

• Asignaciones practicas– Individuales o en grupo– Entre semana y semana, comunicación por maillist.– Algunas a ver durante el horario del martes.

7 /Oviedo /

04/20/23

Arquitectura de alto nivel del SW control

APLICACION 1 APLICACION 2

LIBRERIA 1 LIBRERIA 2

LIBRERIA STANDARD C

KERNEL

BOOTLOADER

HARDWARE

8 /Oviedo /

04/20/23

Arquitectura de alto nivel del SW control (continuación)• Hardware

– Soporte para el procesador que ejecuta el Sw del sistema embebido.

• Booloader– Es el punto de ejecución inicial (reset vector) del hardware,

responsable por la inicialización básica, carga y ejecucion del kernel.

• Linux Kernel– Contiene las diversas funcionalidades del kernel y provee servicios

a las aplicaciones de espacio de usuario (userspace)

• Libreria estandard de C– Es la interface entre el kernel y las aplicaciones de userspace

• Librerias y aplicaciones– Código desarrollado para implementar algoritmos en particular.

Interactúan con el kernel a través de la librería standard de C.

9 /Oviedo /

04/20/23

Linux Kernel

• Linux es un kernel utilizado por un sistema operativo

– Maneja recursos del sistema y la comunicación entre los componentes del sistema.

– Provee una capa de abstracción a la interacción de bajo nivel con los dispositivos del sistema (memoria, procesadores, dispositivos de I/O).

– Provee mecanismos para la implementación de procesos de usuarios, llamadas a sistema, comunicaciones entre procesos, etc.

10 /Oviedo /

04/20/23

Linux Kernel (continuación)

• Desarrollado por Linux Torvalds como un kernel open source para remplazar el kernel de Minix

– Liberado en 1991 originalmente solo para x86

• Actualmente Linux corre en mas de 30 arquitecturas

– Implementaciones de 32 y 644 bits– Licenciado como GPL v2

• GNU Linux se puede encontrar en todo tipo de dispositivos, desde teléfonos celulares hasta cluster de computadoras de alta performance

– http://www.top500.org/stats

11 /Oviedo /

04/20/23

Linux Kernel (continuación)

• Técnicamente Linux es solamente el kernel del sistema operativo.

• Un sistema que utiliza herramientas del proyecto GNU y esta basado en Linux tiene que ser llamado un sistema GNU-Linux.

• Una distribución de linux es básicamente un conjunto de kernel, librerías y código de soporte para bootear y correr un sistema GNU Linux en una plataforma determinada.

12 /Oviedo /

04/20/23

Versiones del kernel del Linux• Existe un solo repositorio para mantener el código del kernel (git.kernel.org).

– Las versiones de kernel tomadas de kernel.org se conoces como vainilla kernels.

– 2.6.<par>: Kernel estable– 2.6.<impar>: Menos estable que el anterior– 2.<par>.x: NuevoRelease. Grandes cambios.– 2.<impar>.x: Release inestable.

13 /Oviedo /

04/20/23

Versiones de GNU-Linux

• Existe un solo kernel pero muchos usuarios.

• Algunos de estos usuarios desarrollan ramas alternativas del kernel destinados a distintos sectores de la industria

– Enterprise, Embedded y Carrier-Grade linux

• La rama enterprise esta destinada a usuarios de escritorio o empresas– Compuesto por empresas como Red hat, Novell, Ubuntu, etc.

14 /Oviedo /

04/20/23

Versiones de GNU-Linux (continuación)

• La rama carrier-grade (CGL) es otro sabor de linux destinado a equipos de telecomunicaciones y de servicio critico.

– Compuesto por empresas como Montavista, WindRiver, etc.

• La rama de embedded esta destinada a usuarios de sistemas embebidos.

– Compuesto por empresas/grupos como LynuxWorks, Openmoko, OpenWrt, etc.

15 /Oviedo /

04/20/23

Requerimientos para ejecutar el kernel

• Los requerimientos para volver funcional un kernel Linux es utilizar una arquitectura soportada y tener un file system con las aplicaciones necesarias para utilizarlo.

•En Linux los sistemas de archivos están dispuestos de tal forma que forman un sistema jerárquico.

• En los sistemas embebidos el sistema de archivo raíz (root filesystem) contiene las librerías, aplicaciones y datos necesarios para que bootee el sistema.

• Construir el root file system es una de las tareas principales del sistema embebido

16 /Oviedo /

04/20/23

Proceso de booteo del kernel

• Encendido o reset del hardware

• El CPU del sistema embebido salta al vector de reset

– En este vector/dirección reside el firmware de inicialización (bootloader, bios, etc).

• El firmware coloca la imagen comprimida del kernel de Linux en RAM, apunta el IP/PC al inicio de la seccion ejecutable de la imagen y la ejecuta

– Hay muchas maneras a través de las cuales se puede obtener una imagen de Linux

17 /Oviedo /

04/20/23

Proceso de booteo del kernel (continuación)

• El kernel de linux se autodescomprime en RAM (vmlinuz a vmlinux), se realoca y salta al código boot-strap especifico de cada arquitectura (head.S).

– Este código parsea y utiliza un conjunto de parámetros de inicialización pasados a través del bootloader.

• Las secciones arquitectura-especifica del kernel se ejecutan primero y preparan el contexto de ejecución del resto del kernel.

• Luego de algunos procesos de inicialización genéricos se llama a start_kernel() ubicada en init/main.c.

18 /Oviedo /

04/20/23

Proceso de booteo del kernel (continuación)• Dentro de start_kernel() se desencadenan la inicializacion y configuracion de todos los subsistemas - Inicialización de dispositivos.

- Configuración de interrupciones

- Inicialización de múltiples CPUs

- Inicialización del manejo virtual de memoria

- Inicialización del subsistema del scheduler

- Se inicializan todos los drivers compilados como built-in en el kernel.

- Inicialización de subsistema de red

- Se inicializa el subsistema de archivos

- Se monta el root filesystem

- Se inicializa el scheduler

- Se crean dos threads del kernel: idle e init.

19 /Oviedo /

04/20/23

Proceso de booteo del kernel (continuación)

• El thread idle se ejecuta cada vez que el scheduler no tiene trabajo para asignarle al procesador/procesadores.

– En algunas arquitecturas este thread tiene el codigo necesario para "apagar" cpus o ponerlos en modo bajo consumo

• Con el root filesystem montado, EI thread init tiene el código necesario para buscar y ejecutar alguno de estos binarios

– <path_configurable> = pasado como parámetro del kernel– /sbin/init– /etc/init– /bin/init– /bin/sh

20 /Oviedo /

04/20/23

Proceso de booteo del kernel (continuación)

• El binario init realiza el resto de la inicialización

– Ejecuta los scripts de inicialización del filesystem.– Configura red, monta filesystems adicionales, etc.– Ejecuta los scripts de runlevel.– Ejecuta getty para futura interaccion con el

usuario

21 /Oviedo /

04/20/23

Compilación del kernel

• Para compilar el kernel necesitamos tener un toolchain para la arquitectura de destino.

• Lo primero es obtener las fuentes– Release oficiales de Kernel.org– SVN proyecto googlecode– Git kernel.org

• Luego hay que ubicar los crosscompiladores de C/C++ en el toolchain y determinar si están en el path

– El prefix de los compiladores se pasara como argumento al makefile de compilación.

– Es necesario determinar cual sera la arquitectura de destino.

22 /Oviedo /

04/20/23

Compilación del kernel (continuación)• Luego hay que exportar la variable INSTALL_MOD_PATH con un destino para los modulos a compilar.

– mkdir modules && cd modules && export INSTALL_MOD_PATH=`pwd`

• Se configura el kernel para soportar los dispositivos del sistema embebido. Para configurar el kernel se ejecuta el target menuconfig– make ARCH=ppc CROSS_COMPILE=powerpc-linux-uclibc

menuconfig

23 /Oviedo /

04/20/23

Compilación del kernel (continuación)• Para limpiar una compilación anterior

– make ARCH=ppc CROSS_COMPILE=powerpc-linux-uclibc clean

• Para compilar una configuración– make ARCH=ppc CROSS_COMPILE=powerpc-linux-uclibc

• Para compilar he instalar los módulos en el directorio especificado– make ARCH=ppc CROSS_COMPILE=powerpc-linux-uclibc modules_install

• Una vez compilado, el binario que será utilizado para bootear el kernel se encuentra en alguno de los directorios de arch/<arquitectura>/boot

– Para PPC en: arch/ppc/boot/images/zImage.elf– Para X86 en: arch/x86/boot/bzImage

24 /Oviedo /

04/20/23

Root filesystem

• El conjunto de archivos a partir del directorio /

– Todos los programas de userspace, los archivos, los devices nodes y otros archivos especiales se encuentran en el root filesystem.

• Los filesystem extras se pueden montar a partir del root filesystem.

– Algunos pueden ser temporarios como /tmp– Otros generados en tiempo de ejecucion (Virtual filesystems):

/proc, /dev, /sys.

25 /Oviedo /

04/20/23

Toolchain de crosscompilación• Suite de compilación que se ejecuta en el entorno de desarrollo pero que genera código para la arquitectura del sistema embebido

• Si el sistema embebido tiene los recursos de procesamiento, es posible generar un suite de compilación nativa

• Para generar un toolchain de crosscompilación necesitamos:

– Generar los compiladores– Generar las librerías de soporte (libc, openssl, etc)– Generar el rootfilesystem acorde al escenario que

querramos

26 /Oviedo /

04/20/23

Creación del root filesystem

• Existen algunas distribuciones comerciales para sistemas embebidos que traen herramientas para crear/customizar el filesystem.

– Existe herramientas desarrolladas y soportadas por la comunidad como OpenEmbedded y Buildroot.

• Se puede crear el filesystem a mano – dd para crear el filesystem– mount para montarlo– crear estructura de directorios y copiar binarios/archivos

necesarios adentro– configurar scripts de inicializacion

27 /Oviedo /

04/20/23

Crosscompiladores

• Se utiliza GCC compilado para otra arquitectura.

– Puede ser nativamente (corre en la procesador de destino) o en modo crosscompilación (corre en x86 y genera código para procesador de destino)

• GCC es una suite de compilación desarrollada por Richard Stallman.– Por estos días incluye compiladores ylinkers para C, C++,

JAVA, Fortran, ADA, etc.– Incluye herramientas de debugging como gdb.

28 /Oviedo /

04/20/23

Buildroot

• Buildroot es una herramienta que permite generar crosccompiladores, librerías de soporte, aplicaciones y root file systems para diferentes arquitecturas.

– http://buildroot.uclibc.org/

• Provee un entorno de configuración parecido al del kernel.

• Permite generar imágenes con el contenido del filesystem

• Permite trabajar con versiones actuales de las aplicaciones

29 /Oviedo /

04/20/23

Arquitectura de alto nivel del SW control

APLICACION 1 APLICACION 2

LIBRERIA 1 LIBRERIA 2

LIBRERIA STANDARD C

KERNEL

BOOTLOADER

HARDWARE

30 /Oviedo /

04/20/23

Libreria Glibc

• Libreria de C estandar del proyecto GNU– http://www.gnu.org/software/libc/

• Diseñada para performance, cumplimiento del estandar y portabilidad

• Se pueden encontrar en todo sistema GNU

• Por lo general, demasiado grande para sistemas embebidos

• Por ejemplo, un hello world ocupa 12 KB linkeado dinamicamente y 350KB linkeado estaticamente

31 /Oviedo /

04/20/23

Libreria uClibc

• Libreria estandar de C diseñada para sistemas embebidos.

– http://www.uclibc.org/

• Soporta toda las features de la Glibc.

• Debian woody la usa.

• En algunas funcionalidades el espacio reducido se obtiene sacrificando performance, en otro casos se reduce código duplicado, duplicación de datos, etc.

• Por ejemplo, el hello world anterior ocupa 2 KB linkeado dinámicamente y 18KB linkeado estaticamente

32 /Oviedo /

04/20/23

Busybox

• La mayoría de los comandos de Linux y servicios en un solo ejecutable.

– http://www.busybox.net/

• Footprint reducido: Menos de 1MB compilado estáticamente con glibc y menos de 500 KB compilado estáticamente con uClibc.

• Funcionalidades configurables.

• Ampliamente utilizado en la industria.

33 /Oviedo /

04/20/23

Arquitectura de alto nivel del SW control

APLICACION 1 APLICACION 2

LIBRERIA 1 LIBRERIA 2

LIBRERIA STANDARD C

KERNEL

BOOTLOADER

HARDWARE

34 /Oviedo /

04/20/23

Gracias!

Preguntas?

35 /Oviedo /

04/20/23

Practico