u-boot

37
NATIONAL POLYTECHNIC INSTITUTE COMPUTING RESEARCH CENTER IPN-CIC MICROSE Lab Jonathan Martínez Montes Cristóbal Ramírez Lazo Abraham Josafat Ruíz Ramirez U-boot

Upload: yosh-ruiz

Post on 20-Jan-2016

43 views

Category:

Documents


0 download

DESCRIPTION

Pequeña descripcion del proceso del bootloader UBoot

TRANSCRIPT

Page 1: 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

Page 2: U-Boot

IPN-CIC MICROSE Lab 8

Contenido

1. ¿QUÉ ES U-BOOT?2. MONITOR3. BOOTSTRAP4. ARRANQUE

Page 3: U-Boot

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

Page 4: U-Boot

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.

Page 5: U-Boot

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

Page 6: U-Boot

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.

Page 7: U-Boot

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.

Page 8: 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).

Page 9: U-Boot

IPN-CIC MICROSE Lab 10

MONITOR Comandos Incorporados

Page 10: U-Boot

IPN-CIC MICROSE Lab 10

MONITOR Comandos Incorporados

Page 11: U-Boot

IPN-CIC MICROSE Lab 10

MONITOR Comandos Incorporados

Page 12: U-Boot

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).

Page 13: U-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.

Page 14: U-Boot

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.

Page 15: U-Boot

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.

Page 16: U-Boot

IPN-CIC MICROSE Lab 10

MONITOR Variables

Page 17: U-Boot

IPN-CIC MICROSE Lab 10

MONITOR Variables

Page 18: U-Boot

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.

Page 19: U-Boot

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.

Page 20: U-Boot

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.

Page 21: U-Boot

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

Page 22: U-Boot

IPN-CIC MICROSE Lab 9

Boot Process

Page 23: U-Boot

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.

Page 24: U-Boot

IPN-CIC MICROSE Lab 9

Boot Process

uImage

Page 25: U-Boot

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

Page 26: U-Boot

IPN-CIC MICROSE Lab 9

Boot Process

Boot process

1. Corre start.S 2. Corre board.c3. Corre main_loop

(main.c)

Page 27: U-Boot

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

Page 28: U-Boot

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

Page 29: U-Boot

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)

Page 30: U-Boot

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

Page 31: U-Boot

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.

Page 32: U-Boot

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).

Page 33: U-Boot

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.

Page 34: U-Boot

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.

Page 35: U-Boot

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.

Page 36: U-Boot

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

Page 37: U-Boot

IPN-CIC MICROSE Lab 10

Motivación