Download - U-Boot
NATIONAL POLYTECHNIC INSTITUTECOMPUTING RESEARCH CENTER
IPN-CIC MICROSE Lab
Jonathan Martínez MontesCristóbal Ramírez Lazo
Abraham Josafat Ruíz Ramirez
U-boot
IPN-CIC MICROSE Lab 8
Contenido
1. ¿QUÉ ES U-BOOT?2. MONITOR3. BOOTSTRAP4. ARRANQUE
IPN-CIC MICROSE Lab 3
¿Qué es un Boot loader?
Cuando el procesador está encendido, la memoria no tiene alojado al sistema operativo, así que se necesita un software especial para llevar el sistema operativo a la la memoria a partir de los medios de comunicación en el que reside .
Este software es normalmente una pequeña pieza de código llamado el gestor de arranque . En un PC de escritorio , el gestor de arranque reside en el registro de inicio maestro (MBR ) del disco duro y se ejecuta después de Basic Input Output System de la PC (BIOS ) realiza tareas de inicialización del sistema .
Como mínimo, un gestor de arranque para un sistema embebido realiza estas funciones :La inicialización del hardware, especialmente el controlador de memoriaProporcionar parámetros de arranque para el sistema operativoInicio del sistema operativo
IPN-CIC MICROSE Lab 8
¿Que es U-Boot?
U-Boot es un gestor de arranque multiplataforma de código 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 8
Las 10 reglas de oro de diseño de U-Boot
Las 10 reglas de oro de diseño de U-Boot: • 1. Mantenerlo Pequeño • 2. Mantenerlo Rápido• 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 Código genérico es el Código de Buen
IPN-CIC MICROSE Lab 10
MONITOR
Monitor
• U-Boot tiene un intérprete de comandos llamado monitor. Este intérprete 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, administración de memoria y actualización de un sistema embebido (firmware).
• Comandos personalizados pueden ser creados modificando el código fuente de U-Boot.
IPN-CIC MICROSE Lab 10
MONITOR Comandos Incorporados
Comandos Incorporados
• Para una lista completa y breve descripción 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 volátil.
• 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 conexión serial, el tiempo de espera antes del auto boot, etc.
• Las variables tienen que ser almacenadas en memoria no volátil, 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 mayúsculas y minúsculas.• 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 después del otro.
IPN-CIC MICROSE Lab 10
MONITOR Imágenes del Kernel
Imágenes del Kernel
• U-Boot permite descargar imágenes del Kernel usando Ethernet o USB.
• La memoria flash no es necesaria para probar un nuevo Kernel.
• Esto previene el deterioro de la memoria flash, debido a múltiples ciclos de borrado y escritura.
IPN-CIC MICROSE Lab 10
MONITOR Números
Números
• El formato por defecto para los números es hexadecimal.
• Si se escribe en la consola el numero 30100000 será interpretado como 0x30100000.
IPN-CIC MICROSE Lab 9
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 específicas del procesador y carga la imagen del kernel a la memoria persistente
Kernel Image – Etapa final
IPN-CIC MICROSE Lab 9
Boot Process
IPN-CIC MICROSE Lab 9
Boot Process
Boot processDespués 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 interrupción, de excepciones, los clocks y la SDRAM.1.2 Descomprime el código de U-Boot desde la memoria flash y lo copia a la RAM1.3 Pasa el control de ejecución 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-volátil.2.3 Después de un pocos segundos (delay_time), automáticamente carga el kernel pre-instalado.
IPN-CIC MICROSE Lab 9
Boot Process
uImage
IPN-CIC MICROSE Lab 9
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 dirección de carga- U-Boot brinca a la enctrada especificada por el header de uImage, linux empieza en este punto
IPN-CIC MICROSE Lab 9
Boot Process
Boot process
1. Corre start.S 2. Corre board.c3. Corre main_loop
(main.c)
IPN-CIC MICROSE Lab 9
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 más importantes son:
config.mkContiene deficiones de comandos para varias operaciones del dispositivo flash específico (con el tamaño correcto de la memoria flash y el tipo de memoria flash soportado)
u-boot.binEl archivo ELF después de la compilación, el cual tiene que ser grabado en la flash
IPN-CIC MICROSE Lab 9
Boot Process
flash.cContiene definiciones de comando para varias operaciones del dispositvo flash específico
start.cEl primer archivo (en ensamblador) para el arranque de la
computadora
spd_sdram.cInicializa y configura la DDR cuando la DIMM o SODIMM es usada
flash.hContiene información específica de la flash, incluyendo identificación de fabricante, máscaras, flags e identificaciones del dispositivo
IPN-CIC MICROSE Lab 9
Boot Process
1. 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)2. Do critical init when reboot (not from mem)3. Relocate andesboot to ram4. Setup stack5. Jump to second stage (board_init_r)
IPN-CIC MICROSE Lab 9
Boot Process
cpu/n1213/start.S
Setup Vector
cpu/n1213/start.SSetup SP for
Early Board Setup Environment (ASM->C)
lib/board.cboard_init_f()
Early Devices Setup
Calculate Addresses (SP, Dest, GD) for Relocation
cpu/n1213/start.S
Copy Binary to RAM
Fix Relocation
Fix GOT
Clear BSS
cpu/n1213/start.SSetup SP for
Common Board Setup
cpu/n1213/start.SSetup GD & Final Setup
lib/board.cboard_init_r()
Setup Mem for dlmalloc()
Setup Board Data
Setup Board FLASH
Load Default Environments
Setup Environment env_relocate();
Jump into Main loop
Setup SoC and Board Specific Devices
board_init()cpu/n1213/ag101/low_levelinit.S
cpu/n1213/ag101/watchdog.S
Turnoff Watchdog
Setup Memory
Memory REMAP
Setup Memory Controller or on-chip SRAM
cpu/n1213/start.S
Setup Vector
cpu/n1213/start.SSetup SP for
Early Board Setup Environment (ASM->C)
lib/board.cboard_init_f()
Early Devices Setup
Calculate Addresses (SP, Dest, GD) for Relocation
cpu/n1213/start.S
Copy Binary to RAM
Fix Relocation
Fix GOT
Clear BSS
cpu/n1213/start.SSetup SP for
Common Board Setup
cpu/n1213/start.SSetup GD & Final Setup
lib/board.cboard_init_r()
Setup Mem for dlmalloc()
Setup Board Data
Setup Board FLASH
Load Default Environments
Setup Environment env_relocate();
Jump into Main loop
Setup SoC and Board Specific Devices
board_init()cpu/n1213/ag101/low_levelinit.S
cpu/n1213/ag101/watchdog.S
Turnoff Watchdog
Setup Memory
Memory REMAP
Setup Memory Controller or on-chip SRAM
cpu/n1213/start.S
Setup Vector
cpu/n1213/start.SSetup SP for
Early Board Setup Environment (ASM->C)
lib/board.cboard_init_f()
Early Devices Setup
Calculate Addresses (SP, Dest, GD) for Relocation
cpu/n1213/start.S
Copy Binary to RAM
Fix Relocation
Fix GOT
Clear BSS
cpu/n1213/start.SSetup SP for
Common Board Setup
cpu/n1213/start.SSetup GD & Final Setup
lib/board.cboard_init_r()
Setup Mem for dlmalloc()
Setup Board Data
Setup Board FLASH
Load Default Environments
Setup Environment env_relocate();
Jump into Main loop
Setup SoC and Board Specific Devices
board_init()cpu/n1213/ag101/low_levelinit.S
cpu/n1213/ag101/watchdog.S
Turnoff Watchdog
Setup Memory
Memory REMAP
Setup Memory Controller or on-chip SRAM
IPN-CIC MICROSE Lab 9
Comandos de Arranque
U-Boot ejecuta un código situado en la memoria RAM, aunque también se puede leer en otros medios de comunicación. El proceso de arranque se lleva a cabo normalmente en dos pasos:
•La lectura de la imagen del sistema operativo de los medios de comunicación (Ethernet, flash, USB) en la memoria RAM .
•Salta a la primera instrucción de la imagen en la memoria RAM.
IPN-CIC MICROSE Lab 9
La lectura de imágenes en la memoria RAM
La lectura de imágenes en la memoria RAM
•De Ethernet La forma más común para arrancar una imagen durante el desarrollo es mediante la transferencia usando TFTP a través de la interfaz Ethernet. Para ello, utilice el comando tftpboot, donde:
La dirección de la RAM en el que colocar la imagen (loadAddress) El nombre del archivo de imagen (bootfilename)
# Tftpboot <loadAddress> <bootfilename>
La transferencia TFTP se produce entre la dirección serverip (host) y la dirección ipaddr (destino).
IPN-CIC MICROSE Lab 9
La lectura de imágenes en la memoria RAM
• Desde USB
Otra manera de arrancar una imagen es leyéndolo 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 partición primaria del disco flash USB en la dirección loadAddress de la RAM.
Si no se especifica ninguna partición, se asume que la partición 1.
IPN-CIC MICROSE Lab 9
La lectura de imágenes en la memoria RAM
• From flash
Para el arranque independiente, el dispositivo puede leer la imagen de la memoria flash, evitando la dependencia de ningún 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 dirección sourceAddress en loadAddress.
Para flash memories NAND, commandos especiales deben ser utilizados:#nand read <loadAddress> <sourceAddress> <count>
Este commando copia count bytes de la dirección sourceAddress en loadAddress.
IPN-CIC MICROSE Lab 9
Arrancar las imágenes en la memoria RAM
Después de que la imagen se transfiere a la RAM, se puede arrancar de dos maneras, dependiendo del sistema operativo:
Para imágenes de Windows CE: # ir <loadAddress>
Para las imágenes de Linux: # bootm <loadAddress>
donde loadAddress (en ambos casos) es la dirección en la memoria RAM en la que reside la imagen.
IPN-CIC MICROSE Lab 9
Direct Booting
Para simplificar el proceso, la versión 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 partición.Media es flash, tftp o usb.
Ejemplo:#dboot linux flash
IPN-CIC MICROSE Lab 10
Motivación