ARM Linux Sistemas empotrados SISTEMAS DIGITALES Master en Inteligencia Ambiental Introduccin 2 ARM (Advanced RISC Machines) es una arquitectura de 32 bits desarrollada por ARM Holdings. Arquitectura RISC. Su simplicidad la hace ideal para aplicaciones de bajo consumo. 2005: 98% de procesadores de telfonos mviles usan al menos un procesador ARM. Los procesadores ARM los desarrolla ARM y tambin todos aquellos que sean titulares de su licencia. En la actualidad ARM no hace procesadores. Slo los disea y licencia sus diseos a fabricantes. SISTEMAS DIGITALES Master en Inteligencia Ambiental Caractersticas 3 Caractersticas del ARM: 1. Arquitectura Load/store. La memoria slo es accesible mediante instrucciones de load/store. El resto de instrucciones slo manejan registros internos. 2. Memoria alineada, los datos deben estar en posiciones consecutivas. 3. 16 registros idnticos de 32 bits. 4. Juego de instrucciones RISC, con tamao fijo de 32 bits. 5. La mayor parte de instrucciones se ejecutan en un slo ciclo. 6. Ejecucin condicional de las instrucciones. 7. Desplazador de barril de 32 bits. 8. Registro de retorno. SISTEMAS DIGITALES Master en Inteligencia Ambiental Introduccin 4 Gestin de procesos Gestin de memoria Sistema de archivos Control de dispositivos Gestin de red Cdigo dependiente de la arquitectura Gestor de memoria Sistemas de ficheros Dispositivos de carcter Subsistema de red Dispositivos de bloque Drivers de tarjetas Interfaz de llamadas al sistema (API, del sistema operativo) Programas de usuario SISTEMAS DIGITALES Master en Inteligencia Ambiental Soporte para punto flotante (1) Muchas arquitecturas y plataformas ARM no tienen la unidad de punto flotante. En ese caso hay que indicar al crear el kernel qu se va a hacer para poder hacer operaciones con nmeros reales. Hay dos soluciones para la emulacin: Hard float: Permitir que los binarios en el espacio de usuario usen instrucciones de punto flotante, y emular en el kernel el comportamiento de dichas instrucciones mediante el uso de la excepcin illegal instruction. Soft float: Aadir la emulacin en el espacio de usuario en el momento de la compilacin, usando la opcin del compilador -msoft-float. La solucin habitual en Linux es hard float. La emulacin hard float es lenta debido al manejo de excepciones y el cambio de contexto implicado. SISTEMAS DIGITALES Master en Inteligencia Ambiental En Linux hay dos emuladores hard float disponibles: NWFPE, NetWinder Floating Point Emulator CONFIG_FPE_NWFPE FastFPE, ms rpido pero no tan completo, no adecuado para aplicaciones cientficas CONFIG_FPE_FASTFPE Algunas familias S pueden realizar operaciones en punto flotante usando el coprocesador matemtico VFP. VFP est disponible en las familias ARM10, ARM11 y Cortex. ARM proporciona soporte para el uso del VFP. Soporte para punto flotante (2) SISTEMAS DIGITALES Master en Inteligencia Ambiental Mezclando hard y soft float La razn de soportar la emulacin en el Kernel es que los binarios pueden usar las ventajas del hardware en el momento que est disponible, sin necesidad de recompilar (el kernel est preparado tanto para la emulacin como para el uso del coprocesador real). Por desgracia, dadas las restricciones impuestas por el Application Binary Interface (ABI) no es posible mezclar ambas emulaciones en el ABI normal. Una aplicacin y todas sus libreras deben ser compiladas para uno u otro caso. Afortunadamente las nuevas especificaciones EABI resuelven el problema. SISTEMAS DIGITALES Master en Inteligencia Ambiental EABI (1) Embedded-ABI (EABI) es el nuevo estndar ABI para la plataforma ARM. EABI especifica formatos estndar par conversin de ficheros, tipos de datos, uso de registros, organizacin de la pila, y paso de parmetros a funciones en programas empotrados. Ventajas: Posibilidad de mezclar cdigo hard y soft float. Permite usar los binarios creados por otros compiladores. Soporte para Thumb. SISTEMAS DIGITALES Master en Inteligencia Ambiental EABI (2) Otros cambios en EABI: La estructura en el empaquetamiento y el alineamiento ha cambiado. No hay alineamiento mnimo en estructuras. El stack para una funcin est alineado a 8 bytes en lugar de 4. El alineamiento para los enteros de 64 bits son 8 bytes. System call interface: El numero de la system call se pasa como parte de la instruccin SWI. El kernel lee y decodifica la instruccin SWI contaminando la cache de datos con instrucciones. El numero de la llamada al sistema se pasa en el registro r7. Los argumentos de 64 bits son alineados a un nmero par en lugar de usar la siguiente posicin libre. SISTEMAS DIGITALES Master en Inteligencia Ambiental EABI en gcc y Linux El soporte para EABI se aadi en la version GCC 4.1.0. Buildroot permite seleccionar el ABI del sistema objetivo (si se va a usar ABI o EABI al construir el kernel). El soporte EABI se aadi en la version del kernel de Linux 2.6.16 CONFIG_AEABI Aade el soporte EABI en el kernel del Linux de forma que las aplicaciones puedan ser compiladas con el nuevo EABI. CONFIG_OABI_COMPAT En un kernel EABI-able, proporciona soporte para el viejo ABI. Solo funciona para binarios no Thumb. Ejecutar un Binario EABI en un Kernel NO EABY no funciona. SISTEMAS DIGITALES Master en Inteligencia Ambiental Introduccin a Thumb Introduccin a Thumb SISTEMAS DIGITALES Master en Inteligencia Ambiental Dos juegos de instrucciones Modo por defecto en ARM: instrucciones de 32 bits Con la revisin ARMV4T ISA, un nuevo juego de instrucciones de 16 bits fue aadido : Thumb mode ARMV4T ISA se usa en ARM7TDMI, ARM9TDMI, ARM7x0T, ARM9xxT La T en el nombre indica que esa arquitectura puede usar Thumb. Cuando un microprocesador est en modo Thumb, usa el juego de instrucciones reducido Thumb. Son instrucciones de 16 bits. La mayora se mapean directamente como instrucciones ARM. En la revisin ARMV5TE ISA, se aadieron mejoras para la conmutacin entre modos ARM y Thumb. Las instrucciones de 16 bits son tiles para aumentar la densidad del cdigo y disminuir el tamao de los ejecutables. SISTEMAS DIGITALES Master en Inteligencia Ambiental Compilar con Thumb Cualquier toolchain para ARM es capaz de generar binario que usan Thumb Opcin -mthumb del compilador GNU C (gcc) int bar(int c, int d) { return c + d; } int foo(int a, int b) { a += 3; b -= 2; return bar(b, a); } arm-linux-gcc -mthumb -c arm-linux-objdump -S 0000000 <bar>: 0: b580 push {r7, lr} 2: b082 sub sp, #8 4: af00 add r7, sp, #0 6: 1d3b adds r3, r7, #4 8: 6018 str r0, [r3, #0] a: 1c3b adds r3, r7, #0 c: 6019 str r1, [r3, #0] e: 1d3b adds r3, r7, #4 10: 1c3a adds r2, r7, #0 12: 6819 ldr r1, [r3, #0] [...] SISTEMAS DIGITALES Master en Inteligencia Ambiental Ganancia en tamao int bar(int c, int d) { return c + d; } int foo(int a, int b) { a += 3; b -= 2; return bar(b, a); } Las instrucciones en Thumb ocupan la mitad de espacio. Ganancia en tamao en un pequeo ejemplo no representativo: Reduccin de 28 bytes, 22% de reduccin de cdigo arm-linux-gcc -c arm-linux-gcc -c -mthumb test.arm.o test.thumb.o $ sizediff test.arm.o test.thumb.o text data bss dec hex filename 124 0 0 124 7c test.arm.o 96 0 0 96 60 test.thumb.o -28 0 0 -28 -1C +/- SISTEMAS DIGITALES Master en Inteligencia Ambiental Codificacin 001 10 Rd 8-bit immediate 15 0 Instruccin Thumb 1110 001 0 Rd 0000 8-bit immediate 01001 0 Rd 31 0 Instruccin ARM Major opcode indica format 3 move/compare/add/sub with immediate value Minor opcode indica add instruction Registros destino y fuente Valor inmediato Condicin: siempre El procesador slo tiene un juego de instrucciones (ARM). Cuando est usando Thumb el procesador (mediante un hardware dedicado, con lo que no se pierde tiempo) expande las instrucciones Thumb de 16 bits almacenadas en memoria a 32 bits, antes de irlas ejecutando. SISTEMAS DIGITALES Master en Inteligencia Ambiental Diferencias ARM - Thumb En modo Thumb se usa un conjunto de registros reducido. En modo Thumb algunas instrucciones, tales como branch o link, precisan 2 instrucciones. Algunas operaciones no se pueden realizar en Thumb: por ejemplo, acceder a los coprocesadores o al registro de estado. 0000000 <bar>: 0: b580 push {r7, lr} [...] 00000020 <foo>: [...] 4e: f7ff fffe bl 0 <bar> [...] SISTEMAS DIGITALES Master en Inteligencia Ambiental Por diversas razones es necesario poder combinar cdigo ARM y cdigo Thumb juntos: Cdigo Thumb que quiere hacer alguna operacin que no se puede hacer en modo Thumb. Cdigo crtico que precisa acceder a todo el espacio de memoria codificado en ARM. Cdigo que usa libreras compiladas en modo ARM. El compilador GNU Compiler proporciona un mecanismo transparente denominado interworking que permite la mezcla de cdigo ARM y Thumb. La arquitectura ARM proporciona instrucciones para pasar de un modo a otro. bx y blx, El bit ms bajo de la direccin determina la conmutacin: Si bit[0] es 0, el procesador pasa o permanece en modo ARM. Si bit[0] es 1, se pasa a modo Thumb. Thumb y ARM interworking SISTEMAS DIGITALES Master en Inteligencia Ambiental Interworking 000081c4 <main>: 81c4: b580 push {r7, lr} 81c6: af00 add r7, sp, #0 [...] 81cc: f005 fb30 bl d830 <__foo_from_thumb> [...] 00008220 <foo>: 8220: e1a0c00d mov ip, sp 8224: e92dd800 push {fp, ip, lr, pc} [...] 8254: e12fff1e bx lr 0000d830 <__foo_from_thumb>: d830: 4778 bx pc d832: 46c0 nop (mov r8, r8) 0000d834 <__foo_change_to_arm>: d834: eaffea79 b 8220 <foo> Funcin main(), compilada en modo Thumb, llama a foo() en modo ARM. GCC genera wrappers alrededor de foo() para cambiar de modo PC es un registro de 16 bits usado como contador de programa LR es el link register y almacena la direccin de retorno SISTEMAS DIGITALES Master en Inteligencia Ambiental Interworking Dos instrucciones b en Thumb. Almacenan direccin de retorno en lr. lr = pc + (immediate << 12) pc = lr + (immediate) lr = addr of next instruction | 1 Cambiar a modo ARM pc tiene el bit mas bajo a 0 para pasar a modo ARM Llamar a la funcin Retornar al modo Thumb lr tiene el bit mas bajo a 1 para pasar a modo Thumb f005 fb30 bl d830 <__foo_from_thumb> 4478 bx pc eaffea79 b 8220 <foo> e12fff1e bx lr SISTEMAS DIGITALES Master en Inteligencia Ambiental Interworking en nuestro sistema Posibilidades: Modos ARM y Thumb independientes en el kernel y en el espacio de usuario. Se puede usar un kernel en modo ARM con un programa en Thumb. La ABI (interfaz kernel programa) permanece igual. Modo completo Thumb en el espacio de usuario, incluyendo libc. uClibc Parece que no soporta el modo Thumb de forma correcta. Thumb en el espacio de usuario, excluyendo glib. SISTEMAS DIGITALES Master en Inteligencia Ambiental Generar toolchain La toolchain que se utiliza para generar el cdigo debe ser capaz de trabajar con interwork, para ello se han de usar las opciones: --enable-interwork en la configuracion de la binutils --enable-interwork en la configuracin de gcc Para habilitar el mecanismo interworking se utiliza la opcin -mthumb-interwork al generar el cdigo. En Uclibc hay que hacer lo siguiente: -mthumb-interwork USE_BX en la opcin de configuracin SISTEMAS DIGITALES Master en Inteligencia Ambiental Compilacin de las aplicaciones Manualmente Aadir la opcin -mthumb al comando de compilacin. CFLAGS+=-mthumb SISTEMAS DIGITALES Master en Inteligencia Ambiental Linux empotrado Hasta ahora hemos visto qu se necesita para crear un sistema empotrado.
pero
Qu se hace realmente para crearlo?
SISTEMAS DIGITALES Master en Inteligencia Ambiental Usar una distribucin Una distribucin proporciona paquetes binarios preparados para usar. Hay distribuciones como Debian que estn disponibles para arquitecturas empotradas (ARM, MIPS, PowerPC). Esto hace relativamente fcil conseguir un sistema funcional pero: El mantenedor del sistema ha realizado una serie de opciones de configuracin que pueden o no pueden coincidir con las opciones necesarias para el usuario (soft float vs. hard float, EABI vs OABI,) No se dispone de control sobre la integracin. (inicializacin, dependencias) Si se desea integrar un parche o cambiar algo es necesario reconstruir el paquete. No hay mecanismos que automaticen esto. SISTEMAS DIGITALES Master en Inteligencia Ambiental Manualmente Es posible compilar, configurar e instalar todos los componentes que precisa tu sistema Linux manualmente. Esto da flexibilidad, pero: Es preciso conocer las dependencias entre componentes. La compilacin cruzada es una tarea tediosa. No hay un mecanismo automatizado para reconstruir el sistema si se desea aadir o corregir algo. SISTEMAS DIGITALES Master en Inteligencia Ambiental Usar mtodos de construccin Hay mtodos de construccin que facilitan la tarea de crear un sistema Linux empotrado. Se automatiza el proceso de descarga, configuracin, compilacin e instalacin de los paquetes. Mtodo sistemtico para reconstruir el sistema. Facilita la integracin de parches o aadir nuevas funcionalidades. El sistema de construccin conoce la mayora de los paquetes de cdigo abierto disponibles: Las dependencias son gestionadas y los problemas de la compilacin cruzada estn resueltos. SISTEMAS DIGITALES Master en Inteligencia Ambiental Buildroot Buildroot < http://www.buildroot.net/ > es un conjunto de makefiles que automatizan el proceso de construir una toolchain cruzada y un sistema Linux empotrado. Inicialmente esta herramienta se cre orientada para uClibc. Durante mucho tiempo la herramienta ha estado sin mantenedor. Pero desde enero de 2009 tienen un mantenedor oficial, Peter Korsgaard. Se libera una nueva versin cada 3 meses. SISTEMAS DIGITALES Master en Inteligencia Ambiental Usuarios de Buildroot Actualmente estan usado esta herramienta: ATMEL para AVR32 development kit Gumstix Armadeus (ARM boards with FPGA) Calao Systems http://www.calao-systems.com/ SISTEMAS DIGITALES Master en Inteligencia Ambiental Configuracin de Buildroot Buildroot usa el sistem Kconfig configuration system Ofrece un interfaz menuconfig-like Salva la configuracion en un fichero .config SISTEMAS DIGITALES Master en Inteligencia Ambiental Arquitecturas Target: arm, armeb, avr32, cris, i386, mips, mipsel, powerpc, superh, superh64, x86_64 Variantes de arquitecturas: Para ARM, por ejemplo: Generica, ARM7TDMI, ARM610, ARM710, ARM720T, ARM920T, Xscale, etc. ABI selection: Para ARM, EABI or OABI Opciones para Target: Opciones de construccin: Herramientas que se deben usar, directorios Documentacin de instalacin?, smbolos de depuracin?, nivel de optimizacin? Configuracin de Buildroot SISTEMAS DIGITALES Master en Inteligencia Ambiental Configuracin de la Toolchain Buildroot puede crear una toolchain (limitada a toolchains en uClibc) o usar otra toolchain externa (de un conjunto de toolchains compatibles) En el caso de crear la toolchain, Buildroot permite seleccionar cosas como: Versin de Kernel headers Versin de uClibc y configuracin Versin de GCC y opciones (Fortran, C++, Java, Objective C, ) Versin de GDB y opciones (gdbserver, gdb on the target, cross-gdb on the host) Opciones generales de configuracin de la toolchain (large file support, RPC support, IPv6 support, locale support, etc.) SISTEMAS DIGITALES Master en Inteligencia Ambiental Seleccin de paquetes Varios cientos de paquetes estn disponibles. Dependencias entre paquetes son gestionadas. Paquetes pincipales: busybox, bash, bzip2, diffutils, flex, native toolchain, grep, bootutils, cups, at, beecrypt, dash, file, gamin, less, lsof, ltrace, memstat, module-init-tools, procps, psmisc, screen, strace, sudo, syslogd, klogd, util- linux, which, etc. Librerias bsicas : libconfig, libconfuse, libdaemon, libelf, libevent, libgcrypt, libiconv, libidn, liblockfile, liboil, libsysfs, etc. SISTEMAS DIGITALES Master en Inteligencia Ambiental Base de datos: MySQL client, sqlite Editores : ed, nano, uemacs, vim Networking: argus, avahi, axel, boa, bind, bridge-utils, DHCP support, dnsmasq, dropbear, ethtool, haserl, ifplugd, iperf, iproute2, ipsec-tools, iptables, kismet, l2tp, lighttpd, linkns, lrzsz, mDNSresponder, mii-diag, mrouted, nbd, ncftp, netcat, netkitbase, netkittelnet, netplug, netsnmp, nfs-utils, ntp, openntpd, openssh, openssl, openvpn, portmap, pppd, pppoe, pptp-linux, proftpd, quagga, isisd, samba, rsync, stunnel, tcpdump, tftpd, thttpd, vsftpd, wireless tools, etc. Hardware/system tools: dm, dmraid, e2fsprogs, fis, libfuse, hal, hdparm, hotplug, i2c-tools, input-tools, iostat, libaio, libraw1394, libusb, lm-sensors, lvm2, mdadm, mtd utils, pciutils, setserial, udev, usbutils, etc. Seleccin de paquetes SISTEMAS DIGITALES Master en Inteligencia Ambiental Audio/video: aumix, flac, gstreamer with plugins, libmad, libmpd, libogg, libtheora, libvorbis, madplay, mpg123, mplayer, speex, vlc, festival Libreras grficas: ncurses, slang, dialog, DirectFB, imagemagick, jpeg, libpng, libungif, pixman, SDL, QT Embedded, Gtk (atk, cairo, pango, glib), fontconfig, Freetype, Matchbox, X.org Kdrive and a few X applications (window managers, etc.) Compresores Gestor de paquetes: ipkg, portage, rpm Interpretes, leguajes: lua, microperl, python, ruby, tcl, php Misc: Libreras XML , Java, juegos Seleccin de paquetes SISTEMAS DIGITALES Master en Inteligencia Ambiental Filesystemy kernel Seleccin del formato del sistema de ficheros raz (root filesystem): cramfs, cloop, ext2, jffs2, ubifs, squashfs, tar, cpio, initramfs, romfs. Tambin es posible crear un raw root filesystem (sistema de ficheros raz sin formato). Configuracin del Bootloader U-Boot soportado Configuracin del kernel Versin, configuracin, parches y formato binario pueden ser especificados (uImage, zImage, bzImage) SISTEMAS DIGITALES Master en Inteligencia Ambiental 36 Ejemplo de construccin SISTEMAS DIGITALES Master en Inteligencia Ambiental Jerarquia de directorios En los fuentes docs/, documentation package/, the configuration items and Makefiles for building the userspace packages project/, the configuration items and Makefiles for the project concept (several projects in the same Buildroot tree) scripts/ various utilities target/linux/, building the Linux kernel target/<fstype>/, generating the root filesystem image target/device/, ready-made configuration for supported boards target/generic/target_skeleton/, the default root filesystem skeleton toolchain/, building a cross-compiling toolchain SISTEMAS DIGITALES Master en Inteligencia Ambiental Using Buildroot in a nutshell Descargar ltima versin estable y obtenerla del repositorio SVN make menuconfig Make raw root filesystem se crea en project_build_ARCH/PROJECT/root/ Imagen root filesystem y kernel se crea en binaries/PROJECT/ La localizacin de los directorios de salida se puede cambiar usando O=/path/to SISTEMAS DIGITALES Master en Inteligencia Ambiental Directorios generados build_ARCH Un directorio para cada paquete que se crea staging_dir, donde se encuentra la toolchain y donde los paquetes son instalados project_build_ARCH/PROJECT autotools_stamps, gestin de dependencias buildroot-config, Ficheros de cabecera relacionados con Buildroot root, El sistema root filesystempara el objetivo toolchain_build_ARCH Donde la toolchain es configurada y creada SISTEMAS DIGITALES Master en Inteligencia Ambiental Alternativas Similares a Buildroot PTXdist, Pengutronix http://www.pengutronix.de/software/ptxdist/index_en.html LTIB, Freescale. Buen soporta para las placas de Freescale http://www.bitshrine.org/ Aproximaciones diferentes OpenEmbedded, Mas flexible pero ms compleja http://www.openembedded.org Gentoo Embedded http://www.gentoo.org/proj/en/base/embedded/handbook/ SISTEMAS DIGITALES Master en Inteligencia Ambiental 41 Bootloaders SISTEMAS DIGITALES Master en Inteligencia Ambiental Bootloaders El bootloader es el software responsable de: La inicializacin bsica del hardware. Cargar una aplicacin binaria (el kernel, en nuestro caso) desde la flash, red, o dispositivo no voltil en la memoria. Ejecutar la aplicacin. Adems de estas funciones bsicas la mayora de los bootloader proporcionan un shell bsico con diversos comandos, para la ejecucin de diferentes operaciones: Inspeccin de memoria Carga de dispositivos Diagnosis hardware SISTEMAS DIGITALES Master en Inteligencia Ambiental Bootloaders en x86 En los sistemas x86 la placa posee la BIOS Este programa se ejecuta automticamente en la CPU despus de un reset y es el responsable de: La inicializacin bsica del sistema. Cargar un pequeo programa en memoria (primer sector del disco duro) para el arranque del sistema operativo. Esta pieza de software es el primer cargador de arranque, que inicia el cargador propiamente dicho (grub, lilo) SISTEMAS DIGITALES Master en Inteligencia Ambiental Bootloaders en arquitecturas embebidas En las arquitecturas embebidas el arranque de bajo nivel es muy dependiente del procesador y de la placa de desarrollo. Algunas placas tienen NOR flash de las cuales la CPU carga las primeras instrucciones despus de un reset. En este caso el cargador de arranque se flasea en la memoria NOR en la posicin adecuada. Algunas CPU tienen integrada un cargador en una ROM interna que automticamente permite el arranque de un pequeo programa almacenado en NAND flash. En este caso se usa un cargador de dos etapas. El primero que se encuentra en la flash en la posicin preprogramada arranca al cargador principal. El cargador en la arquitectura embebidas se ejecuta inmediatamente despus de un reset. Por lo tanto ser el encargado de inicializar todos los dispositivos, incluida la memoria DRAM. El vendedor debe proporcionar la informacin ya que el cargador es muy dependiente de la placa. SISTEMAS DIGITALES Master en Inteligencia Ambiental Cargadores de cdigo abierto mas populares en la actualidad U-Boot, the universal bootloader de Denx Es el ms usado en ARM, tambin se puede usar en PPC, MIPS, x86, m68k, NIOS, etc. http://www.denx.de/wiki/U-Boot RedBoot, basado en RedHat eCos http://sources.redhat.com/redboot/ uMon: MicroMonitor general purpose, multi-OS bootloader http://microcross.com/html/micromonitor.html Bootloaders en arquitecturas embebidas SISTEMAS DIGITALES Master en Inteligencia Ambiental U-Boot U-Boot es un proyecto de software libre Disponible en http://www.denx.de/wiki/U-Boot Documentacin disponible en http://www.denx.de/wiki/U-Boot/Documentation Los ltimos desarrollos estn disponibles a travs la herramienta git: http://git.denx.de/cgi- bin/gitweb.cgi?p=u-boot.git;a=summary La lista de discusin se encuentra en http://lists.denx.de/pipermail/u-boot/ Desde el 2008 se libera una nueva versin (release) cada 2 meses. Las versiones son identificadas por el nombre, que contiene el mes y el ao YYYY.MM. SISTEMAS DIGITALES Master en Inteligencia Ambiental Compilar U-Boot (1) Obtener el cdigo fuente y descomprimir El directorio include/configs/ contienen un fichero de configuracin para cada una de las arquitecturas soportadas: Se definen CPU, perifricos, configuracin de perifricos, mapeo de memoria, caractersticas de U-Boot que se deben incluir, etc.. Hay un fichero .h que determina las constantes de preproceso. Leer el fichero README Si la placa es soportada por U-boot, debera haber un fichero correspondiente a la placa concreta. Por ejemplo include/configs/omap2420h4.h. SISTEMAS DIGITALES Master en Inteligencia Ambiental Compilar U-Boot (2) U-Boot debe ser configurado antes de compilar make BOARDNAME_config Donde BOARDNAME es el nombre del fichero .h (de configuracin) en el directorio include/configs/, sin el .h Una vez configurado U-Boot, hay que asegurarse de que el compilador cruzado est disponible en el PATH export PATH=/usr/local/uclibc-0.9.29-2/arm/bin/:$PATH Finalmente, se compila U-Boot, con el prefijo adecuado a la arquitectura en la que se quiere realizar la carga: Ejemplo Si es arm-linux-gcc: make CROSS_COMPILE=arm-linux- SISTEMAS DIGITALES Master en Inteligencia Ambiental Instalar U-Boot U-Boot debe ser instalado en la memoria flash para poder ser ejecutado por el hardware. Dependiendo del hardware, la instalacin vara En placas con algn monitor especfico de carga, que permite instalar en la flash un segundo bootloader, es preciso usar la documentacin de la placa as como las herramientas recomendadas por el fabricante. Si ya est instalado es posible substituir U-boot por una nueva versin. Ojo al actualizar: Si se produce un problema la placa puede quedar inutilizada. Si la placa dispone de un interfaz JTAG que permite modificar remotamente la memoria flash sin ningn sistema de apoyo es posible recuperar la placa. SISTEMAS DIGITALES Master en Inteligencia Ambiental U-boot prompt Cargado el U-Boot, es posible conectar el sistema remoto al host a travs de una consola serie. Realizada la conexin, al encender la placa en la consola serie se ver algo como esto: 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 # El shell del U-Boot ofrece un conjunto de comandos. A continuacin veremos los ms importantes. SISTEMAS DIGITALES Master en Inteligencia Ambiental Comandos de informacin U-Boot> flinfo DataFlash:AT45DB021 Nb pages: 1024 Page Size: 264 Size= 270336 bytes Logical address: 0xC0000000 Area 0: C0000000 to C0001FFF (RO) Bootstrap Area 1: C0002000 to C0003FFF Environment Area 2: C0004000 to C0041FFF (RO) U-Boot U-Boot> nand info Device 0: NAND 256MiB 3,3V 8-bit, sector size 128 KiB U-Boot> version U-Boot 2009.08 (Nov 15 2009 - 14:48:35) Informacin sobre la flash Informacin flash NAND Informacin U- Boot Esta informacin cambia de una placa a otra (en funcin de la configuracin de compilacin) SISTEMAS DIGITALES Master en Inteligencia Ambiental Variables de entorno (1) U-Boot puede ser configurado a travs de variables de entorno que afectan al comportamiento de los comandos. Mirar la documentacin para la lista completa. El comando printenv muestra todas las variables de entorno, o una sola: u-boot # printenv baudrate=19200 ethaddr=00:40:95:36:35:33 netmask=255.255.255.0 ipaddr=10.0.0.11 serverip=10.0.0.1 stdin=serial stdout=serial stderr=serial u-boot # printenv serverip serverip=10.0.0.2 Configuracin de red Para mostrar una sla variable SISTEMAS DIGITALES Master en Inteligencia Ambiental Variables de entorno (2) El valor de las variables de entorno puede ser cambiado mediante el comando setenv : u-boot # setenv serverip 10.0.0.2 Las variables de entorno son almacenadas en la flash usando el comando saveenv. La localizacin en la flash es definida en tiempo de compilacin a travs del fichero de configuracin. Se pueden usar pequeos scripts para modificar las variables : setenv myscript 'tftp 0x21400000 uImage ; bootm 0x21400000' Para ejecutar el script: run myscript SISTEMAS DIGITALES Master en Inteligencia Ambiental Transferencia de ficheros hacia el target U-Boot es usado principalmente para la carga y arranque de una imagen del kernel, pero permite cambiar la imagen y el root filesystem almacenados en la flash. Los ficheros pueden ser intercambiados entre el host y el target. Mediante una conexin de red. U-Boot contienen un driver Ethernet para esto. El protocolo TFTP puede ser usado para ello. A travs de una conexin serie si no es posible una conexin Ethernet. Target Host U-Boot TFTP cliente TFTP servidor Ethernet SISTEMAS DIGITALES Master en Inteligencia Ambiental Configurar TFTP En un sistema GNU/Linux basado en Debian Instalar el paquete tftpd-hpa (tftp server): Reiniciar el superservidor inetd : sudo /etc/init.d/openbsd-inetd restart Copiar los ficheros al directorio root del servidor TFTP. Ejemplo: cp arch/arm/boot/uImage /var/lib/tftpboot Para comprobar que el servidor funciona instalar el cliente TFTP: apt-get install tftp-hpa Usar para descargar un fichero tftp localhost > get uImage SISTEMAS DIGITALES Master en Inteligencia Ambiental U-boot mkimage La imagen del kernel que U-boot carga debe estar preparada. Es necesario aadir una cabecera especial especfica para U-Boot. Esto se hace mediante la herramienta que proporciona Uboot, mkimage En Debian / Ubuntu: basta con instalar el paquete uboot- mkimage. O, en su defecto, crearla a partir de los fuentes. La imagen especial para el sistema target uImage, creada a partir de un Makefile de los fuentes del kernel, puede ser usada para crear la imagen adecuada para U-Boot. SISTEMAS DIGITALES Master en Inteligencia Ambiental Flasheando una imagen del kernel Compilar el kernel y generar U-Boot header (debe estar instalada mkimage). Ejecutar make uImage Copiar la nueva imagen al directorio raz del servidor TFTP En la placa, mediante el shell de U-Boot, descargar la nueva imagen a memoria (8000 posicin hexadecimal donde se deposita el fichero): u-boot # tftp 8000 uImage Desproteger NOR flash u-boot # protect off 1:0-4 Borrar NOR flash u-boot # erase 1:0-4 Copiar a NOR flash (0x01000000: first sector) u-boot # cp.b ${fileaddr} 1000000 ${filesize} Restaurar proteccin NOR : u-boot # protect on 1:0-4 SISTEMAS DIGITALES Master en Inteligencia Ambiental boot commands Parmetros especficos de arranque del kernel : u-boot # setenv bootargs mem=64M \ console=ttyS0,115200 init=/sbin/init \ root=/dev/mtdblock0 Ejecutar el kernel almacenado en una posicin fsica (RAM o flash): bootm 0x01030000 Misma lnea