3.6. Preinstalación de hardware y configuración del sistema operativo

Esta sección le guiará a través de la preinstalación y configuración de hardware, en caso de ser necesaria, previa a la instalación de Debian. Generalmente, involucra comprobar y posiblemente cambiar la configuración de la BIOS/UEFI/firmware del sistema para su sistema. La BIOS/UEFI o el firmware del sistema es el software base usado por el hardware, y es fundamental durante el proceso de arranque (después del encendido).

3.6.1. Selección de dispositivo de arranque

3.6.2. Firmaware ARM

Como ya se ha mencionado antes, lamentablemente no existe un estándar para el firmware del sistema en los sistemas ARM. Incluso puede ser bastante diferente el comportamiento de diferentes sistemas que utilizan nominalmente el mismo firmware. Esto se debe a que una gran parte de los dispositivos que utilizan la arquitectura ARM son sistemas embebidos, para los que los fabricantes suelen crear versiones de firmware muy personalizadas e incluyen parches específicos para cada dispositivo. Lamentablemente, los fabricantes no suelen enviar sus cambios y extensiones a los desarrolladores del firmware principal, por lo que sus cambios no se integran en las nuevas versiones del firmware original.

Como consecuencia, incluso los sistemas recién vendidos suelen utilizar un firmware basado en una versión modificada por el fabricante hace años, cuyo código base ha evolucionado mucho más entretanto y ofrece características adicionales o muestra un comportamiento diferente en ciertos aspectos. Además, el nombre de los dispositivos integrados no es consistente entre las diferentes versiones modificadas por el fabricante del mismo firmware, por lo que es casi imposible proporcionar instrucciones utilizables e independientes del producto para los sistemas basados en ARM.

3.6.3. Configurar la dirección MAC de ethernet en U-Boot

Normalmente, la dirección MAC de cada interfaz ethernet debe ser única a nivel mundial, y técnicamente tiene que ser única dentro del dominio de difusión ethernet. Para conseguirlo, el fabricante suele asignar un bloque de direcciones MAC de un grupo de administración centralizada (por el que hay que pagar una cuota) y preconfigura una de estas direcciones en cada artículo vendido.

En el caso de las placas en desarrollo, a veces el fabricante quiere evitar el pago de estas tasas y, por tanto, no proporciona direcciones únicas globales. En estos casos los propios usuarios tienen que definir las direcciones MAC para sus sistemas. Cuando no se define una dirección MAC para una interfaz ethernet, algunos controladores de red generan una dirección MAC aleatoria que puede cambiar en cada arranque, y si esto sucede, el acceso a la red sería posible incluso cuando el usuario no ha establecido manualmente una dirección, pero, por ejemplo, no funcionaría de forma fiable la asignación de direcciones IP semiestáticas por DHCP basada en la dirección MAC del cliente solicitante obviamente.

Para evitar conflictos con las direcciones MAC existentes asignadas oficialmente, existe un conjunto de direcciones reservadas para las denominadas direcciones administradas localmente . Se define por el valor de dos bits específicos en el primer byte de la dirección (el artículo Dirección MAC en la Wikipedia en inglés ofrece una buena explicación). En la práctica, esto significa que, por ejemplo, cualquier dirección que empiece por ca en hexadecimal (como ca:ff:ee:12:34:56) se puede utilizar como dirección administrada localmente.

En los sistemas que utilizan U-Boot como firmware del sistema, la dirección MAC de ethernet se coloca en la variable de entorno ethaddr. Se puede comprobar en la línea de comando de U-Boot con la orden printenv ethaddr y se puede establecer con el comando setenv ethaddr ca:ff:ee:12:34:56. Después de establecer el valor, el comando saveenv hace que la asignación sea permanente.

3.6.4. Problemas de reubicación Kernel/Initrd/Device-Tree en U-Boot

Puede haber problemas con la reubicación correcta del kernel de Linux, en algunos sistemas con versiones antiguas de U-Boot, el ramdisk inicial y el blob del árbol de dispositivos en la memoria durante el proceso de arranque. En este caso, U-Boot muestra el mensaje Starting kernel ..., pero el sistema se congela después sin más resultados. Estos problemas se han solucionado con las nuevas versiones de U-Boot a partir de la v2014.07.

Si el sistema ha utilizado originalmente una versión de U-Boot anterior a la v2014.07 y se ha actualizado posteriormente a una versión más reciente, el problema podría seguir produciéndose incluso después de actualizar U-Boot. La actualización de U-Boot no suele modificar las variables de entorno de U-Boot existentes y la solución requiere que se establezca una variable de entorno adicional (bootm_size), lo que U-Boot hace automáticamente sólo en instalaciones nuevas sin datos de entorno existentes. Es posible establecer manualmente bootm_size al nuevo valor por defecto de U-Boot ejecutando el comando env default bootm_size; saveenv en el prompt de U-Boot.

Otra posibilidad para evitar los problemas relacionados con la reubicación es ejecutar el comando setenv fdt_high ffffffff; setenv initrd_high 0xffffffff; saveenv en el prompt de U-Boot para deshabilitar completamente la reubicación del ramdisk inicial y el device-tree blob.