<Anterior | Contenido | Siguiente>
El arranque de red en sistemas que utilizan el firmware U-Boot consta de tres pasos: a) configurar la red, b) cargar las imágenes (kernel / ramdisk inicial / dtb) en la memoria yc) ejecutar realmente el código cargado previamente.
Primero debe configurar la red, ya sea automáticamente a través de DHCP ejecutando
setenv autoload sin dhcp
o manualmente configurando varias variables de entorno
setenv ipaddr máscara de red setenv
setenv serverip setenv dnsip
setenv gatewayip
Si lo prefiere, puede hacer que estas configuraciones sean permanentes ejecutando
guardarenv
Luego, debe cargar las imágenes (kernel / ramdisk inicial / dtb) en la memoria. Esto se hace con el comando tftpboot, que debe proporcionarse con la dirección en la que se almacenará 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 sobre qué direcciones se pueden usar para esto.
En algunos sistemas, U-Boot predefine un conjunto de variables de entorno con direcciones de carga adecuadas: kernel_addr_r, ramdisk_addr_r y fdt_addr_r. Puede comprobar si están definidos ejecutando
printenv kernel_addr_r ramdisk_addr_r fdt_addr_r
Si no están definidos, debe consultar la documentación de su sistema para conocer los valores adecuados y configurarlos manualmente. Para sistemas basados en Allwinner SunXi SOC (p. Ej., Allwinner A10, nombre de arquitectura "sun4i" o Allwinner A20, nombre de arquitectura "sun7i"), puede utilizar, por ejemplo, los siguientes valores:
setenv kernel_addr_r 0x46000000 setenv fdt_addr_r 0x47000000 setenv ramdisk_addr_r 0x48000000
Cuando se definen las direcciones de carga, puede cargar las imágenes en la memoria desde el servidor tftp previamente definido con
tftpboot $ {kernel_addr_r} tftpboot $ {fdt_addr_r}
tftpboot $ {ramdisk_addr_r}
La tercera parte es configurar la línea de comandos del kernel y ejecutar el código cargado. U-Boot pasa el contenido de la variable de entorno "bootargs" como línea de comando al kernel, por lo que cualquier parámetro para el kernel y el instalador, como el dispositivo de la consola (consulte la Sección 5.3.1) o las opciones de preconfiguración (consulte la Sección 5.3.2). .XNUMX y Apéndice B) - se puede configurar con un comando como
setenv bootargs console = ttyS0,115200 rootwait panic = 10
El comando exacto para ejecutar el código previamente cargado depende del formato de imagen utilizado. Con uImage / uInitrd, el comando 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}: $ {} $ {fdt_addr_r}
Nota: Al arrancar imágenes estándar de Linux, es importante cargar la imagen del disco ram inicial después del kernel y el dtb, ya que U-Boot establece la variable en el tamaño del último archivo cargado y el comando bootz requiere el tamaño de la imagen del disco ram. para que funcione correctamente. En caso de arrancar un kernel específico de una plataforma, es decir, un kernel sin árbol de dispositivos, simplemente omita el parámetro $ {fdt_addr_r}.
Documentación