U-boot
Jonathan Martnez Montes Cristbal Ramrez Lazo Abraham Josafat Ruz Ramirez
IPN-CIC
MICROSE Lab
Contenido
IPN-CIC
MICROSE Lab
Qu es un Boot loader?
IPN-CIC
MICROSE Lab
Que es U-Boot?
U-Boot es un gestor de arranque multiplataforma de cdigo abierto que proporciona apoyo para centenares tarjetas embebidas y muchos CPU, incluyendo PowerPC, ARM, XScale, MIPS, Coldfire, NIOS, Microblaze y x86.
IPN-CIC
MICROSE Lab
Las 10 reglas de oro de diseo de U-Boot: 1. Mantenerlo Pequeo 2. Mantenerlo Rpido 3. Mantenerlo Simple 4. Mantenerlo Portable 5. Mantenerlo Configurable 6. Mantenerlo Debuggable 7. Mantenerlo til 8. Mantenerlo Mantenible 9. Mantenerlo hermoso 10. Mantenerlo abierto El lema de las reglas de oro Cdigo genrico es el Cdigo de Buen
IPN-CIC MICROSE Lab 8
MONITOR
Monitor
U-Boot tiene un intrprete de comandos llamado monitor. Este intrprete sirve para crear un proceso de arranque personalizado.
IPN-CIC
MICROSE Lab
10
MONITOR
Comandos U-Boot
Comandos U-Boot
U-Boot tiene un conjunto incorporado de comandos para iniciar (booting) el sistema, administracin de memoria y actualizacin de un sistema embebido (firmware). Comandos personalizados pueden ser creados modificando el cdigo fuente de U-Boot.
IPN-CIC
MICROSE Lab
10
MONITOR
Comandos Incorporados
Comandos Incorporados
Para una lista completa y breve descripcin de los comandos incorporados, se recomienda usar la ayuda del propio monitor (help).
IPN-CIC
MICROSE Lab
10
MONITOR
Comandos Incorporados
IPN-CIC
MICROSE Lab
10
MONITOR
Comandos Incorporados
IPN-CIC
MICROSE Lab
10
MONITOR
Comandos Incorporados
IPN-CIC
MICROSE Lab
10
MONITOR
Variables
Variables
U-Boot usa variables de entorno que pueden leer o escribir un dispositivo no voltil. Las variables se usan para crear guiones (scripts) de los comandos y para configurar el proceso de arranque (boot).
IPN-CIC
MICROSE Lab
10
MONITOR
Variables
Las variables configuran cosas como el baud rate de la conexin serial, el tiempo de espera antes del auto boot, etc. Las variables tienen que ser almacenadas en memoria no voltil, como EEPROM o Flash.
IPN-CIC
MICROSE Lab
10
MONITOR
Variables
Los valores de las variables de fabrica son almacenados en el binario de U-Boot. Se pueden recuperar con el comando envreset.
IPN-CIC
MICROSE Lab
10
MONITOR
Variables
Las variables de entorno se almacenan como cadenas. Son sensibles a maysculas y minsculas. Variables personalizadas pueden ser creadas siempre y cuando se disponga de suficiente espacio en la memoria.
IPN-CIC
MICROSE Lab
10
MONITOR
Variables
IPN-CIC
MICROSE Lab
10
MONITOR
Variables
IPN-CIC
MICROSE Lab
10
MONITOR
Scripts
Scripts
Un script esta hecho con variables que contienen un conjunto de comandos que son ejecutados uno despus del otro.
IPN-CIC
MICROSE Lab
10
MONITOR
IPN-CIC
MICROSE Lab
10
MONITOR
Nmeros
Nmeros
El formato por defecto para los nmeros es hexadecimal. Si se escribe en la consola el numero 30100000 ser interpretado como 0x30100000.
IPN-CIC
MICROSE Lab
10
Boot Process
Boot process RBL - ROM Boot Loader, inicializa el procesador y lee de la memoria externa a la memoria RAM interna el SPL SPL Secondary Program Loader (UBL, XLoader) carga la siguiente etapa U-Boot U-Boot Habilita varias funcionalidades especficas del procesador y carga la imagen del kernel a la memoria persistente Kernel Image Etapa final
IPN-CIC
MICROSE Lab
Boot Process
IPN-CIC
MICROSE Lab
Boot Process
Boot process Despus del reset - Carga U-Boot bootloader en varios pasos: 1. El procesador realiza: 1.1 Ejecuta la primera fase del bootstrap que configura los vectores de interrupcin, de excepciones, los clocks y la SDRAM. 1.2 Descomprime el cdigo de U-Boot desde la memoria flash y lo copia a la RAM 1.3 Pasa el control de ejecucin al U-Boot 2. El U-Boot realiza: 2.1 Configura las direcciones Ethernet, Flash y consola serial. 2.2 Carga las configuraciones grabadas como variables de entorno en la memoria no-voltil. 2.3 Despus de un pocos segundos (delay_time), automticamente carga el kernel pre-instalado.
IPN-CIC MICROSE Lab 9
Boot Process
uImage
IPN-CIC
MICROSE Lab
Boot Process
Boot process (Memory Map) - SPL es cargado a la Memoria Ram Interna - U-Boot is cargado primero a la Memoria DDR - U-Boot carga la uImage - U-Boot realiza el checksum y relocaliza (si es requerido) el kernel encontrado en el uImage a la direccin de carga - U-Boot brinca a la enctrada especificada por el header de uImage, linux empieza en este punto
IPN-CIC
MICROSE Lab
Boot Process
IPN-CIC
MICROSE Lab
Boot Process
U-Boot File Estructure U-Boot contiene board, common, cpu, disk, doc, drivers, dtt, examples, fs, include, etc. Pero, cuando compilamos U-Boot exitosamente, de los archivos ms importantes son: config.mk Contiene deficiones de comandos para varias operaciones del dispositivo flash especfico (con el tamao correcto de la memoria flash y el tipo de memoria flash soportado) u-boot.bin El archivo ELF despus de la compilacin, el cual tiene que ser grabado en la flash
IPN-CIC
MICROSE Lab
Boot Process
flash.c Contiene definiciones de comando para varias operaciones del dispositvo flash especfico start.c El primer archivo (en ensamblador) para el arranque de la computadora
IPN-CIC
MICROSE Lab
Boot Process
1.
2. 3. 4. 5.
bootstrap 1.1 reset - start of u-boot 1.2 to superuser mode - as is when reset 1.3 Do lowlevel_init - (this will jump out to lowlevel_init.S in SoC) - (lowlevel_init) 1.4 Do Memory Remap if it is necessary. 1.5 Turn off watchdog timer - (this will jump out to watchdog.S in SoC) - (turnoff_watchdog) Do critical init when reboot (not from mem) Relocate andesboot to ram Setup stack Jump to second stage (board_init_r)
IPN-CIC
MICROSE Lab
Boot Process
lib/board.c board_init_r() Setup SoC and Board Specific Devices board_init() Setup Mem for dlmalloc()
cpu/n1213/ag101/low_levelinit.S
Setup Board Data Setup Board FLASH Setup Environment env_relocate(); Load Default Environments
Memory REMAP
cpu/n1213/ag101/watchdog.S
Turnoff Watchdog cpu/n1213/start.S Setup SP for Early Board Setup Environment (ASM->C)
IPN-CIC
MICROSE Lab
Comandos de Arranque
U-Boot ejecuta un cdigo situado en la memoria RAM, aunque tambin se puede leer en otros medios de comunicacin. El proceso de arranque se lleva a cabo normalmente en dos pasos:
La lectura de la imagen del sistema operativo de los medios de comunicacin (Ethernet, flash, USB) en la memoria RAM . Salta a la primera instruccin de la imagen en la memoria RAM.
IPN-CIC
MICROSE Lab
La lectura de imgenes en la memoria RAM De Ethernet La forma ms comn para arrancar una imagen durante el desarrollo es mediante la transferencia usando TFTP a travs de la interfaz Ethernet. Para ello, utilice el comando tftpboot, donde: La direccin de la RAM en el que colocar la imagen (loadAddress) El nombre del archivo de imagen (bootfilename)
IPN-CIC
MICROSE Lab
Desde USB Otra manera de arrancar una imagen es leyndolo desde un dispositivo de almacenamiento flash USB. El USB debe estar formateado en el sistema de archivos FAT. Para leer una imagen desde un disco flash USB, escriba: # usb reset # fatload usb <dev>[:partition] <loadAddress> <bootfilename> Este comando lee el archivo bootfilename de la particin primaria del disco flash USB en la direccin loadAddress de la RAM.
IPN-CIC
MICROSE Lab
From flash Para el arranque independiente, el dispositivo puede leer la imagen de la memoria flash, evitando la dependencia de ningn hardware externo. Para memorias flash NOR, hacer esto con los comandos de memoria: #cp.[b/w/l] <sourceAddress> <loadAddress> <count> Ese comando copia copia count bytes , words o long words (dependiendo del sufijo utilizado : b,w,l) de la direccin sourceAddress en loadAddress. Para flash memories NAND, commandos especiales deben ser utilizados: #nand read <loadAddress> <sourceAddress> <count> Este commando copia count bytes de la direccin sourceAddress en loadAddress.
IPN-CIC
MICROSE Lab
Despus de que la imagen se transfiere a la RAM, se puede arrancar de dos maneras, dependiendo del sistema operativo: Para imgenes de Windows CE: # ir <loadAddress> Para las imgenes de Linux: # bootm <loadAddress> donde loadAddress (en ambos casos) es la direccin en la memoria RAM en la que reside la imagen.
IPN-CIC
MICROSE Lab
Direct Booting
Para simplificar el proceso, la versin Digi's U-Boot incluye el commando dboot, el cual lee una imagen de un medio y ejecuta en la RAM en un solo paso. La sintaxis del commando es: #dboot <os> <media> Donde os is linux o cualquier nombre de particin. Media es flash, tftp o usb. Ejemplo: #dboot linux flash
IPN-CIC
MICROSE Lab
Motivacin
IPN-CIC
MICROSE Lab
10