Me gustaría hacer una pregunta, un poco estúpida, pero me inquieta.
¿Qué posibilidades nos da U-boot en los routers?
Según yo, llevar OpenWRT en dispositivos con memorias NAND y CPU Broadcom. Claro, se puede usar CFE, pero por temas legales CFE no puede ser incluido dentro de una imagen de firmware por problemas legales, y por el hecho de ser (en varios casos) codigo cerrado.
En mi caso, en el dispositivo que estoy consultando yo, Technicolor (o thomson) tiene un CFE custom, que no permite hacer partir OpenWRT ya que no se sabe hacia que sector de la memoria NAND apunta el CFE. Además, como es codigo cerrado, es dificil de modificar.
La idea seria compilar imagenes que ya vengan con el bootloader, y en este caso u-boot es codigo abierto. Ergo, sin problemas legales.
Eso me parece que es.
Voy a explicar un poco el principal problema de BCM63xx y la NAND (esta explicación es válida para los BCM63268, puesto que los BCM6328/BCM6368 suelen hacerlo de otras formas):
- El bootrom carga en memoria el primer bloque de la NAND (cferom) y lo ejecuta. Este cferom no es más que un SPL (Secondary Program Loader), que se encarga de decidir si se va a utilizar la primera o la segunda imagen de la NAND.
- El cferom abre el sistema de ficheros de la imagen escogida y carga en memoria el cferam.XXX ubicado en dicha partición, que sería la parte principal del CFE.
- cferam se ejecuta esperando una posible interrupción del usuario o bien carga el kernel almacenado en la partición y lo ejecuta.
Como habréis podido deducir, esto implica que para generar imágenes que se puedan almacenar en la NAND de estos dispositvos, necesitamos crear una imagen que consistiría en un sistema de ficheros JFFS2 que contenga el cferam.XXX único del dispositivo, el kernel y el propio sistema de ficheros.
El problema es que incluir el cferam.XXX en una imagen generada desde LEDE/OpenWrt suele conllevar problemas legales
Por otro lado, tendríamos que lidiar con el hecho de utilizar JFFS2 para la NAND, lo que no es nada adecuado ya que acabaría cargándose la NAND a largo plazo (lo recomendable es usar ubifs).
La idea es generar una imagen que únicamente flashearíamos una vez y que contenga únicamente el u-boot.bin camuflado como cferam.XXX, de forma que en lugar de arrancar el kernel de la misma imagen, podría hacerse desde otra partición que ya no tendría que ser JFFS2.
Por último, decir que u-boot también es útil para probar diferentes periféricos del router antes de añadir soporte en LEDE/OpenWrt para el mismo, puesto que se puede alterar fácilmente la memoria y, por tanto, facilitar diferentes procesos como encontrar los gpios del router, los LEDs...
Saludos!