Creación Sistemas Operativos Embebidos Personalizados Basados En Linux Para Soc Con FPGA Integrada
Total Page:16
File Type:pdf, Size:1020Kb
Proyecto Fin de Carrera Trabajo Fin de Master IngenieríaMaster de Universitario Telecomunicación en Ingeniería Aeronáutica FormatoCreación de Publicación Sistemas Operativos de la Escuela embebidos Técnica Superiorpersonalizados de Ingeniería basados en Linux para SoC con FPGA integrada Autor:Autor: F. Javier Ángel Payán Cea Somet Fons Tutor:Tutor: Juan MaríaJosé Murillo de los Ángeles Fuentes Martín Prats Dep. TeoríaDep. de Ingenieríala Señal y Comunicaciones Electrónica EscuelaEscuela Técnica Técnica Superior Superior de Ingeniería de Ingeniería UniversidadUniversidad de Sevilla de Sevilla Sevilla,Sevilla, 2013 2017 Trabajo Fin de Master Master Universitario en Ingeniería Aeronáutica Creación Sistemas Operativos embebidos personalizados basados en Linux para SoC con FPGA integrada Autor: Ángel Cea Fons Tutor: María de los Ángeles Martín Prats Profesor Titular Dep. Ingeniería Electrónica Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2017 Trabajo Fin de Master: Creación Sistemas Operativos embebidos personalizados basados en Linux para SoC con FPGA integrada Autor: Ángel Cea Fons Tutor: María de los Ángeles Martín Prats El tribunal nombrado para juzgar el trabajo arriba indicado, compuesto por los siguientes profesores: Presidente: Vocal/es: Secretario: acuerdan otorgarle la calificación de: El Secretario del Tribunal Fecha: Resumen n el mundo de la ingeniería la electrónica está cobrando cada vez una mayor importancia debido, E entre otros motivos, a la creciente automatización de procesos, el crecimiento en número y complejidad de los sistemas de aviónica embarcados en las aeronaves y la marcada tendencia hacia el All Electric Aircraft, que requiere la sustitución de sistemas mecánicos por sistemas electrónicos. Aunque suele pasar desapercibido, los sistemas embebidos tienen una importancia capital en el mundo de la aviación, controlando y supervisando procesos de una manera eficiente. El problema de estos sistemas, por lo general, subyace en su limitada potencia de procesamiento. Aquí es donde entra en juego lo que se va a tratar en el presente documento, el cual contendrá información acerca del desarrollo de una distribución de un sistema operativo (Linux) personalizada con Yocto Project, que permita satisfacer las necesidades pertinentes de forma eficiente, lo que nos permite no desaprovechar potencia de cálculo y además personalizar las herramientas y utilidades de las que se quiere dotar al sistema embebido. I Índice Resumen I Comandos VII 1 Introducción1 1.1 Sistemas embebidos1 1.1.1 ZedBoard3 1.2 Linux embebido4 1.2.1 Código abierto (Open source)4 1.2.2 Licencias Open source 5 1.2.3 Los cuatro elementos de Linux embebido5 Toolchain5 2 Toolchain7 2.1 Tipos de Toolchain7 2.2 Elección de la librería de C7 2.3 Crosstool-NG8 2.3.1 Instalación de crosstool-NG8 2.3.2 Anatomía de una toolchain 12 2.3.3 El directorio sysroot, la librería y los archivos de cabecera 14 2.3.4 Librerías, componentes de la librería de C 14 3 Bootloader 19 3.1 ¿Cuál es la función del bootloader? 19 3.2 La secuencia de arranque 19 3.2.1 Fase 1: código ROM 19 3.2.2 Fase 2: SPL 20 3.2.3 Fase 3: TPL 20 3.3 Del bootloader al kernel 21 3.4 Device trees 21 3.4.1 La propiedad reg 23 3.4.2 Phandles e interrupciones 24 3.4.3 Inclusión de archivos en los árboles de dispositivos 24 3.4.4 Elección de un bootloader 26 4 El kernel 29 4.1 ¿Qué es el kernel? 29 III IV Índice 4.2 Elección del kernel 29 4.3 Configuración del kernel 32 4.4 Módulos kernel 33 4.5 Compilando 33 4.5.1 Compilando la imagen del kernel 33 4.5.2 Compilando arboles de dispositivos 36 4.5.3 Compilando módulos kernel 36 4.5.4 Limpiando fuentes del kernel 36 5 El sistema de archivos raiz 39 5.1 Contenido del sistema de archivos raiz 39 5.2 Estructura del directorio 40 5.3 Permisos de acceso POSIX a archivos 40 5.4 Programas para el sistema de archivos raíz 41 5.4.1 El programa init 41 5.4.2 Shell 42 5.4.3 Utilidades 42 5.4.4 Busybox 43 5.4.5 Construyendo Busybox 43 5.4.6 Librerías para el sistema de archivos raiz 45 5.4.7 Nodos de dispositivos 45 5.4.8 El sistema de archivos proc y sys/ 45 5.4.9 Módulos kernel 47 5.5 Transfiriendo el sistema de archivos raíz al dispositivo de destino 47 6 Yocto Project 49 6.1 ¿Qué es Yocto Project? 49 6.2 Instalación de Yocto Project 49 6.3 Configuaración de Yocto Project 51 6.4 Capas 53 6.4.1 Creación de una nueva capa 54 6.5 Modulos kernel 60 6.5.1 Compilando modulos kernel con Yocto Project 61 6.5.2 Drivers 66 6.5.3 Creando un character device driver 70 7 Construyendo con Yocto Poject 81 7.1 Construyendo para la ZedBoard 81 7.1.1 Antes de intentar realizar la construcción 81 7.1.2 Construyendo 83 7.1.3 Creando una capa para la ZedBoard 87 7.1.4 Despliegue en la zedboard 90 7.1.5 Prueba del sistema con QEMU 92 7.2 Construyendo para la enclustra 93 8 Conclusiones 97 9 Futuras líneas de investigación 99 Índice V Índice de Figuras 101 Índice de Tablas 103 Índice de Códigos 105 Bibliografía 109 Comandos En esta lista se incluirán comandos utilizados en el documento para facilitar la lectura a personas que no estén familiarizadas con la terminal de Linux, pero este apartado no se dedicará a explicar con detalle y detenimiento ni el funcionamiento ni la sintaxis de los comandos, para ello buscar información en fuentes externas a este documento. sudo Colocado delante de otros comandos permite ejecutarlos como superusua- rio tar Comando que sirve pare realizar ta- reas de compresión y descompresión cd <destino> Realiza el cambio al directorio que se le indique a continuación (change directory) pwd > Muestra la ubicación del directorio actual (Print Working Directory) make <opciones> Permite ejecutar archivo makefile en el directorio actual mv <opciones> <origen> <destino> Mueve y renombra ficheros o direc- torios entre otras funciones rm <opciones> <archivo1> <archivo2> Permite eliminar directorios y archi- vos dependiendo de las opciones que se le indiquen cp <opciones> <origen> <destino> Copia directorios y archivos origen en el destino atendiendo a las opcio- nes que se le indiquen cat <opciones> <archivo> Lee un archivo y muestra su conteni- do tail <opciones> <archivo> Muestra las últimas líneas de un ar- chivo ls <opciones> <destino> Muestra un listado de directorios y archivos dentro del directorio <des- tino>, y si no se le indica destino el listado lo hace del directorio actual lsmod Muestra un listado de los módulos kernel instalados actualmente en el sistema insmod <módulo kernel> Instala módulo kernel en el sistema VII VIII Comandos rmmod <módulo kernel> Desinstala módulo kernel del siste- ma df Muestra los sistemas de archivos montados, su espacio disponible y el espacio utilizado dmesg Muestra mensajes del kernel git clone <dirección> Realiza una clonación del reposito- rio que se encuentre en la dirección indicada git checkout <rama> Cambia la rama a la que apunta el re- positorio a la indicada en el comando git branch Muestra la rama a la que apunta ac- tualmente el repositorio git branch -r Muestra las ramas disponibles mknod Crea nodo de dispositivo. Es necesa- rio tener permisos de superusuario mount Para montar directorios y archivos. Es necesario tener permisos de su- perusuario umount Para desmontar directorios y archi- vos. Es necesario tener permisos de superusuario sudo apt-get install Realiza la instalación de la aplica- ción indicada a continuación ./<aplicación> Ejecuta la aplicación que se le indi- que source Ejecuta la aplicación que se le in- dique a continuación guardando los cambios realizados en elas variables de entorno tree <opciones> <dirección> Muestra estructura de directorios y ficheros en forma de árbol de la di- rección que se le indique <comando> | grep <caracteres> Toma como entrada la salida del co- mando anterior y muestra los resul- tados que contienen los caracteres indicados fdisk <opciones> Permite formatear particiones y obte- ner información acerca de dispositi- vos del almacenamiento conectados al sistema find <opciones> Comando que, como su propio nom- bre indica, sirve para realizar búsque- das de distinta índole dependiendo de las opciones que se añadan al co- mando 1 Introducción n este capítulo se aclarará la definición de sistema embebido y se mostrarán los componentes E que habitualmente forman parte de los sistemas embebidos. Se introducirá a la ZedBoard como el sistema embebido que se utilizará para el desarrollo del presente proyecto y se hablará sobre lo que es Linux embebido y las partes que lo conforman. 1.1 Sistemas embebidos Un sistema embebido o empotrado (integrado, incrustado) es un sistema de computación diseñado para realizar una o algunas pocas funciones dedicadas, frecuentemente en un sistema de computación en tiempo real. Al contrario de lo que ocurre con los ordenadores de propósito general (como por ejemplo una computadora personal o PC) que están diseñados para cubrir un amplio rango de necesidades, los sistemas embebidos se diseñan para cubrir necesidades específicas. En un sistema embebido la mayoría de los componentes se encuentran incluidos en la placa base (tarjeta de vídeo, audio, módem, etc.) y muchas veces los dispositivos resultantes no tienen el aspecto de lo que se suele asociar a una computadora. Algunos ejemplos de sistemas embebidos podrían ser dispositivos como un taxímetro, un sistema de control de acceso, la electrónica que controla una máquina expendedora o el sistema de control de una fotocopiadora entre otras múltiples aplicaciones. Como ya se ha nombrado anteriormente, estos sistemas suelen disponer de una potencia de cálculo limitada y pueden llevar a cabo generalmente también una variedad de tareas limitadas en comparación a un pc habitual.