A ver el, repo git clonado que yo tengo es git://git.denx.de/u-boot.git.
Hay que definir la variable de entorno CROSS_COMPILE con el PATH del directorio donde tengas las utilidades de compilación cruzada, por ejemplo,
Código: Seleccionar todo
export CROSS_COMPILE=/home/jsanchez/src/Raspberry-Pi/arm-none-eabi/bin/arm-none-eabi-
luego:
Código: Seleccionar todo
make [rpi_defconfig | rpi_2_defconfig | rpi_3_32b_defconfig] (según tengas la PI B/B+, la PI-2 o la PI-3)
make
Ahora solo tienes que copiar el archivo u-boot.bin a la SD donde tengas también los archivos de arranque estándar (bootcode.bin, fixup.dat, start.elf), con el nombre adecuado al modelo de PI (kernel.img, kernel7.img).
U-Boot inicializa el subsistema USB, y la red. Las entradas/salidas de consola las pone duplicadas en el framebuffer y en el puerto serie, cualquiera de los dos vale. Puedes conectar tranquilamente un teclado USB sin problemas.
Una vez que arranque, el comando 'help' te da una lista de comandos utilizables. Hay varios comandos que permiten enviar la imagen por el puerto serie usando X-Modem, Y-Modem, Kermit o en formato S-Record (comandos load*). También permite cargar un binario desde la SD, pero eso es lo que intentamos evitar, claro.
Para poder cargar por red, tienes que tener un servidor TFTP accesible. La IP a la PI se le puede dar fija o dejar que la pille por DHCP. Yo he acabdo por ponerlas fijas, es más cómodo y rápido, por ejemplo:
Código: Seleccionar todo
setenv ipaddr 192.168.1.5
setenv serverip 192.168.1.10 (la dirección de mi servidor TFTP)
saveenv (para guardar la configuración en un archivo en la SD)
printenv (para ver las variables existentes)
El asunto ahora es que u-boot necesita un binario con una cabecera especial que le dice las características de ese binario. Una vez que tienes el
kernel.img que quieres ejecutar, hay que usar una utilidad que se habrá creado en el directorio 'tools' de uboot, llamada
mkimage de la siguiente forma:
Código: Seleccionar todo
mkimage kernelv6.img -A arm -O linux -T standalone -C none -a 0x8000 -e 0x8000 -d kernel.img -n piBacteria
El parámetro '-a' le dice la dirección final de ubicación del binario y el '-e' le dice la dirección de arranque. En '-d' se pone la imagen binaria a convertir y que finalmente se llamará kernelv6.img (ese nombre es el que yo le pongo, podría llamarse pepitoperez.img si así lo deseas). Copias ese kernelv6.img al directorio que sirvas por TFTP y en la línea de comandos de u-boo pones,
Código: Seleccionar todo
tftp kernelv6.img (para cargar la imagen desde el server)
bootm (para arrancar la imagen cargada)
Este es un breve resumen de las posibilidades más básicas de u-boot, que admite más, claro. Recordarte que, hasta donde yo he podido detectar, u-boot deja configurada en otra dirección la tabla de excepciones que debería estar en 0x00000000 y el Strict Alignment Fault Cheking Enabled. Por ambas razones piBacteria no funcionará. Todo programa que espere la tabla de excepciones en 0x00000000 tampoco funcionará (la mayoría).
No creo que tengas problemas con esta breve guía, pero si los tienes, levanta la mano...