5.1. Arranque del instalador en 32-bit hard-float ARMv7

5.1.1. Formatos de imagen de arranque

En los sistemas basados en ARM, en la mayoría de los casos, se utiliza uno de los dos formatos de imágenes de arranque: a) núcleos Linux estándares en formato zImage (vmlinuz) conjuntamente con discos de RAM inicial estándares de Linux (initrd.gz), o bien b) núcleos en formato uImage (uImage) conjuntamente con los discos de RAM inicial correspondientes (uInitrd).

uImage y uInitrd son formatos de imagen diseñados para el «firmware» U-Boot, utilizados en muchos sistemas basados en ARM (sobre todo de 32 bits). Las versiones anteriores de U-Boot solo pueden arrancar archivos en el formato uImage/uInitrd y, por tanto, suelen emplearse en sistemas ARM más antiguos. Las versiones más recientes de U-Boot permiten además arrancar núcleos Linux estándares e imágenes de discos RAM, aunque la sintaxis de las órdenes necesarias para hacerlo es algo distinta de la utilizada para arrancar uImages.

En los sistemas que utilizan un núcleo multiplataforma, además del núcleo y el disco de RAM inicial se necesita lo que se denomina un archivo de árbol de dispositivos (también conocido como «device-tree blob» o dtb). Este archivo es específico para cada sistema admitido y contiene la descripción del «hardware» concreto de cada sistema. Este dtb lo debería suministrar el «firmware» del equipo, aunque en la práctica a menudo hace falta cargar uno nuevo.

5.1.2. Configuración de consola

El tarball de netboot (Sección 5.1.3.2, “Tarball precompilado de netboot”), y las imágenes del instalador para tarjetas SD (Sección 5.1.5, “Utilizar imágenes precompiladas para tarjetas SD con el instalador”) utilizan la consola predeterminada (específica para la plataforma) que establece U-Boot en la variable console. En la mayoría de los casos, se trata de la consola serie, por lo que en esas plataformas, de manera predeterminada, necesita un cable de consola serie para utilizar el instalador.

En las plataformas que también admiten un terminal de vídeo, puede modificar la variable console de U-Boot si quiere que el instalador se inicie en la consola de vídeo.

5.1.3. Arrancar desde TFTP

El arranque a través de la red requiere que tenga una conexión de red y un servidor de arranque TFTP (y probablemente también un servidor DHCP, RARP o BOOTP para la configuración automática de la red).

En la Sección 4.3, “Preparación de los ficheros para el arranque a través de red usando TFTP” se describe la configuración del servidor para permitir el arranque a través de la red.

5.1.3.1. Arranque TFTP en U-Boot

El arranque desde la red en sistemas que usan el firmware de U-Boot consiste en tres pasos: a) configurar la red, b) cargar las imágenes (kernel/initial ramdisk/dtb) en la memoria y c) ejecutar el código cargado previamente.

Primero tiene que configurar la red, bien automáticamente mediante DHCP ejecutando

setenv autoload no
dhcp

o de manera manual definiendo varias variables de entorno

setenv ipaddr <dirección IP del cliente>
setenv netmask <máscara de red>
setenv serverip <dirección IP del servidor TFTP>
setenv dnsip <dirección IP del servidor de nombres>
setenv gatewayip <dirección IP de la pasarela predeterminada>

Si lo prefiere, puede hacer que estos cambios sean permanentes ejecutando

saveenv

Después tiene que cargar las imágenes (kernel/initial ramdisk/dtb) en la memoria. Esto se lleva a cabo con la orden tftpboot, a la que debe indicar la dirección donde debe almacenarse la imagen en la memoria. Desafortunadamente, el mapa de memoria puede variar de un sistema a otro, por lo que no existe una regla general que determine las direcciones que puede utilizar.

En algunos sistemas, U-Boot predefine un conjunto de variables de entorno con las direcciones de carga apropiadas: kernel_addr_r, ramdisk_addr_r y fdt_addr_r. Puede comprobar si se encuentran definidas ejecutando

printenv kernel_addr_r ramdisk_addr_r fdt_addr_r

Si no se han definido, tiene que consultar la documentación de su sistema para obtener estos valores y establecerlos manualmente. En sistemas basados en Allwinner SunXi SOC (p. ej., el Allwinner A10, nombre de arquitectura sun4i o el Allwinner A20, nombre de arquitectura sun7i), puede, p. ej., utilizar los siguientes valores:

setenv kernel_addr_r 0x46000000
setenv fdt_addr_r 0x47000000
setenv ramdisk_addr_r 0x48000000

Cuando se definan direcciones de carga, puede cargar las imágenes en la memoria desde el servidor tftp definido anteriormente con

tftpboot ${kernel_addr_r} <nombre del archivo de la imagen del núcleo>
tftpboot ${fdt_addr_r} <nombre del archivo de dtb>
tftpboot ${ramdisk_addr_r} <nombre del archivo de la imagen de inicio de ramdisk>

La tercera parte consiste en configurar la línea de órdenes del núcleo y ejecutar el código cargado. U-Boot pasa el contenido de la variable de entorno bootargs como línea de órdenes al núcleo, por lo que cualquiera de los parámetros para el núcleo y el instalador - como el dispositivo de consola (consulte Sección 5.3.1, “Consola de arranque”) o las opciones de preconfiguración (consulte Sección 5.3.2, “Parámetros del instalador de Debian” y Apéndice B, Instalar automáticamente utilizando preconfiguración) - pueden establecerse con una orden como

setenv bootargs console=ttyS0,115200 rootwait panic=10

La orden exacta para ejecutar el código cargado previamente depende del formato usado para la imagen. Con uImage/uInitrd, la orden es

bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}

y con imágenes nativas de Linux es

bootz ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r}

Nota: al arrancar imágenes de Linux estándares, es importante cargar la imagen del disco RAM inicial después del núcleo y el «dtb» a medida que U-Boot define en la variable «filesize» el valor del tamaño del último archivo cargado y la orden «bootz» solicita el tamaño de la imagen del disco RAM para que esta funcione adecuadamente. Si está arrancando un núcleo específico para una plataforma (un núcleo sin árbol de dispositivos, por ejemplo), omita el parámetro ${fdt_addr_r}.

5.1.3.2. Tarball precompilado de netboot

Debian proporciona un tarball precompilado ( .../images/netboot/netboot.tar.gz ) que solo tiene que desempaquetar en su servidor tftp y contiene todos los archivos necesarios para iniciar el arranque de red. También incluye un script de arranque que automatiza todos los pasos para cargar el instalador. Las versiones más modernas de U-Boot contienen una característica para el arranque automático de tftp que se activa cuando no existe ningún dispositivo de almacenamiento local para el arranque (MMC/SD, USB, IDE/SATA/SCSI) y carga este script desde el servidor tftp. Para poder utilizar esta opción, es necesario disponer de un servidor DHCP en la red que proporcione la dirección del servidor tftp al cliente.

Si desea activar la característica de arranque automático de tftp desde la línea de órdenes de U-Boot, puede utilizar la siguiente orden:

run bootcmd_dhcp

Para cargar manualmente el script de arranque que proporciona el tarball, de manera alternativa puede ejecutar las siguientes órdenes en el símbolo de arranque de U-Boot:

setenv autoload no
dhcp
tftpboot ${scriptaddr} /debian-installer/armhf/tftpboot.scr
source ${scriptaddr}

5.1.4. Arranque desde un dispositivo de memoria USB con U-Boot

Las versiones más modernas de U-Boot disponen de soporte USB y permiten arrancar desde dispositivos de almacenamiento masivo USB como memorias USB. Desafortunadamente, los pasos exactos necesarios para esta opción pueden variar un poco de un dispositivo a otro.

La versión v2014.10 de U-Boot incluye una gestión de la línea de órdenes común y un mecanismo de arranque automático. Esto permite construir imágenes genéricas de arranque que funcionan en cualquier sistema que implemente este mecanismo. El debian-installer permite la instalación desde una memoria USB en ese tipo de sistemas, pero desafortunadamente no todas las plataformas han adoptado aún ese mecanismo.

Para crear una memoria USB arrancable para instalar Debian, desempaquete el tarball para la instalación desde disco duro (consulte Sección 4.2.1, “Dónde encontrar los archivos de instalación”) en una memoria USB con formateada con un sistema de archivos permitido por la versión de U-Boot de su dispositivo. Las versiones más modernas de U-Boot suelen funcionar con FAT16 / FAT32 / ext2 / ext3 / ext4. Después copie el archivo de la imagen ISO del primer CD o DVD de instalación de Debian en la memoria USB.

El mecanismo de arranque automático en las versiones modernas de U-Boot funciona de manera semejante a las opciones de orden de inicio de la BIOS/UEFI de los PC, dado que, por ejemplo, comprueba una lista de dispositivos de arranque posibles proveniente de una imagen de arranque válida y arranca el primero que encuentra. Si no hay ningún sistema operativo instalado, enchufar el dispositivo USB y encender el sistema debería bastar para que se inicie el instalador. Puede asimismo iniciar el proceso de arranque desde USB desde el indicador de U-Boot en cualquier momento; para ello ejecute la orden run bootcmd_usb0.

Uno de los problemas que pueden sobrevenir cuando arranque desde una memoria USB utilizando una consola serie puede ser el desajuste de la tasa de baudios de la consola. Si se ha definido una variable de consola en U-Boot, el script de arranque debian-installer automáticamente pasa este valor al núcleo para definir el dispositivo de consola primario y, si procede, la tasa de baudios. Desafortunadamente, la gestión de la variable de consola difiere de una plataforma a otra - en algunas plataformas, la variable de consola incluye la tasa de baudios (como console=ttyS0,115200) pero en otras plataformas, la variable de consola solo contiene el dispositivo (como console=ttyS0). En este último caso, se obtiene una salida de consola confusa cuando la tasa de baudios predeterminada difiere entre la de U-Boot y la del núcleo. Las versiones más modernas de U-Boot a menudo utilizan un valor de 115200 baudios mientras que el núcleo todavía utiliza de manera predeterminada el valor tradicional de 9600 baudios. En este caso, debe establecer de manera manual la variable de consola para que contenga la tasa de baudios correcta para su sistema y después iniciar el instalador con la orden run bootcmd_usb0.

5.1.5. Utilizar imágenes precompiladas para tarjetas SD con el instalador

En determinados sistemas, Debian facilita imágenes para tarjetas SD que contienen tanto U-Boot como el debian-installer. Estas imágenes son de dos tipos: una para descargar los paquetes de «software» desde la red (disponible en .../images/netboot/SD-card-images/ ) y otra para llevar a cabo instalaciones sin conexión mediante un CD/DVD de Debian (disponible en .../images/hd-media/SD-card-images/ ). Para ahorrar espacio y ancho de banda de red, las imágenes se dividen en dos partes: una dependiente del sistema denominada firmware.<tipo-sistema>.img.gz y otra independiente del sistema denominada partition.img.gz.

Para crear una imagen completa desde dos partes en sistemas Linux, puede utilizar zcat de la siguiente manera:

zcat firmware.<system-type>.img.gz partition.img.gz > complete_image.img

En sistemas Windows, primero tiene que descomprimir las dos partes por separado, utilizando, p. ej., 7-Zip, y después concatenar las partes descomprimidas ejecutando la orden

copy /b firmware.<system-type>.img + partition.img complete_image.img

en una ventana del intérprete de órdenes CMD.exe de Windows.

Guarde la imagen resultante en una tarjeta SD, p. ej., ejecutando la siguiente orden en un sistema Linux:

cat complete_image.img > /dev/SD_CARD_DEVICE

Después de introducir la tarjeta SD en el sistema donde se va a proceder con la instalación e iniciarlo, el instalador se carga desde la tarjeta SD. Si utiliza la variante de instalación desde disco duro para instalaciones fuera de línea, debe proporcionar al instalador acceso al primer CD/DVD de Debian desde un medio distinto, que puede ser, p. ej., una imagen ISO CD/DVD en una memoria USB.

Cuando el instalador llegue al paso de la partición de los discos (consulte Sección 6.3.4, “Particionado y elección de punto de montaje”), podrá eliminar o reemplazar cualquiera de las particiones que existan previamente en la tarjeta. Una vez que el instalador se ha iniciado, se ejecuta completamente desde la memoria principal del sistema y no necesita acceder nuevamente a la tarjeta SD, por lo que puede utilizar toda la tarjeta para instalar Debian. La forma más sencilla para crear un esquema de particionado apropiado en la tarjeta SD, es permitir que el instalador genere automáticamente una para usted (consulte Sección 6.3.4.2, “Particionado guiado”).