Compilar U-BOOT y PRE-LOADER en Altera Quartus

Cuestiones generales sobre uso de Quartus y diseño digital con él (las cuestiones que sean específicas de UnAmiga, dirigirlas a "Desarrollo" del foro UnAmiga)
Responder
Avatar de Usuario
jepalza
Spartan 3
Mensajes: 216
Registrado: 14 Ago 2018, 18:51

Compilar U-BOOT y PRE-LOADER en Altera Quartus

Mensaje por jepalza » 02 Oct 2020, 05:57

He logrado (al fín!) compilar con éxito un U-BOOT y un PRELOADER en la placa Chameleon96 (aunque con resultados decepcionantes).

Explico los pasos, dentro de lo que he podido averiguar, ademas de una pequeña intro de lo que he aprendido con esta FPGA.

Si tocamos o modificamos algo dentro del QSYS en Quartus, y regeneramos los VHD (o verliog), el quartus, al compilar de nuevo los fuentes, nos da un aviso al estilo de esto:

Código: Seleccionar todo

Warning (11713): The configuration of the Hard Processor Subsystem (HPS) within this design has changed.
The Preloader software that initializes the HPS requires an update.
Using 'hps_isw_handoff/CV96_QSYS_hps_0/' , run the Preloader Support Package Generator to update your Preloader software
Significa que para que nuestro diseño FPGA funcione, necesitamos recompilar como mínimo el Preloader (y opcionalmente el U_BOOT, arranque).

Las FGPA con SOC-ARM integrado (o al revés, las SOC-ARM con FPGA integrada), al iniciarse, necesitan conocer el estado de los pines I/O de comunicación con los periféricos, como el HDMI, la FPGA, la DDR, etc. , ademas de poder cargar el sistema operativo (OS). Para ello, al arrancar, cargan primero el U-BOOT desde la SD, y seguido el Pre-Loader. El Preloader es el encargado de configurar la FPGA (en este caso la Cyclone-V-SOC) para que se comporte como queremos. Por ejemplo, si hemos cambiado la velocidad, o si hemos redirigido un pin HPS (Hard System Processor) hacia la FPGA. Las FPGA SOC-ARM, según he podido comprobar, reservan una buena cantidad de pines para uso propio de la CPU, y el resto, lo dejan para la FPGA. De eso modo, la FPGA sigue pudiéndose programar directamente en VHDL o Verilog, dentro del Quartus usando los pines directos a periféricos o al exterior. En cambio, los pines reservados por el HPS o CPU-ARM, son, lógicamente, exclusivos de ella. Pero hay forma de derivarlos a la FPGA, usando la aplicacion que viene con Quartus, llamada QSYS, en la cual, un pin podemos convertirlo en LOAN-IO y darle acceso a la FPGA. Al hacer esto, es cuando obligamos al Quartus a tener que recompilar el Preloader.

Para compilar el preloader, se necesitan una aplicación aparte. (nota: en windows solo, para linux, es otra historia)

Instalamos "SoCEDSSetup-17.1.0.590-windows.exe" para el SOC FPGA (en mi caso, de la 17.1) bajado de la página de Intel (se necesita registro)
yo instale TODO, incluidos drivers y un rollo llamado "ECLIPSE", pero creo que no hace falta, y según he leído, es para compilar con ventanas, al estilo Windows.

Como ya he dicho, si Quartus da el aviso indicado al inicio, de recompilar el Preloader, entonces, deberíamos tener una carpeta llamada:
"hps_isw_handoff" dentro de nuestra capreta principal y dentro de ella, otra llamada (en el caso del CV96)
"CV96_QSYS_hps_0" con los fuentes del nuevo PRELOADER.

Para compilarlo, primero debemos abrir un proceso de comandos CYGWIN, en los menus de WIN10, buscando en los menus del INTEL QUARTUS:
"SoC EDS Command Shell" , se nos abre un proceso de comandos, con acceso CYGWIN (siempre que se haya instalado bien el SOC FPGA indicado al inicio)

Escribimos "bsp-editor" y ejecutamos.
Se arranca el creador de BSP.
Damos a "nuevo" en los menus, y vamos a la carpeta donde tengamos los fuentes creados por QUARTUS, por ejemplo:
E:\CV96\Chameleon96\src\hps_isw_handoff\CV96_QSYS_hps_0 (ruta completa, que se puede copiar/pegar)
dejamos la carpeta de salida por defecto (casilla activada "use defaults location"), que crea automáticamente las rutas de salida en nuestra ruta principal.
damos a "OK", nos salen un PORRON de opciones, como ejecutar desde SD, o crear RESET y docenas de cosas mas.
YO NO INDIQUE NADA, TODO POR DEFECTO.... que genera ficheros para copiar en la SD. Estas opciones, aún tengo que revisarlas, son muchas.
Asi que, damos a "GENERATE"
Al acabar de generar los ficheros, se crea una carpeta: "software\spl_bsp" dentro de la principal nuestra (con un fichero dentro, llamado "settings.bsp") donde van los ficheros a compilar "de verdad", junto al "makefile".
Salimos del "bsp-editor" desde el menu (si no, no nos deja hacer nada mas en el cygwin, esta pillado por el proceso del BSP-EDITOR)

vamos a la ruta recien creada "software\spl_bsp" y ejecutamos "make" ... ---->>

*** ATENCION!! ***
Si al ejecutar "make" nos salta con este aviso:
tar: Error opening archive: Failed to open '/cygdrive/e/altera/quartus/17.1/embedded/host_tools/altera/preloader/uboot-socfpga.tar.gz'
make: *** [uboot-socfpga/.untar] Error 1

Ocurre por que WINDOWS 10 tiene su propia version de TAR.EXE en la carpeta WINDOWS\SYSTEM32
que interfiere con el TAR de CYGWIN. Se podria borrar, pero es mejor hacer:
export PATH=/bin:$PATH
en el proceso de comandos CYGWIN. (lo que hacemos es anteponer la búsqueda de comandos "cygwin" a la de windows)
*** FIN DE ATENCION!! ***


... ---->> esperamos un rato, unos 5 minutos y cientos de líneas de cosas inteligibles.
al acabar, deberiamos tener los compilados en una carpeta nueva llamada: "uboot-socfpga"
y el binario resultante: "preloader-mkpimage.bin" que deberia ser el que se copia en la SD

ahora, por ultimo, y como algo opcional, creamos el "U-BOOT"
"make uboot"
esperamos otro rato, otros 3 minutos y cientos de líneas de cosas inteligibles.
al terminar, deberiamos obtener el fichero "u-boot.img" (incluso el .BIN) dentro de la carpeta:
".\software\spl_bsp\uboot-socfpga"

tras esto, podemos pasar a grabar tanto el U-BOOT como el Preloader (o solo el preloader, opcional):
usaremos la aplicacion "alt-boot-disk-util" en cygwin.
vamos a la ruta donde están los archivos compilados
"cd /cygdrive/e/CV96/Chameleon96/src/software/spl_bsp"
y programamos la SD, con ambos UBOOT y PRELOADER en la unidad "K" (mi SD)
alt-boot-disk-util -b ./uboot-socfpga/u-boot.bin -p preloader-mkpimage.bin -a write -d k

en cygwin, para conocer qué unidades tiene windows asignadas, podemos hacer:
ls /cygdrive/
veremos las letras de cada unidad.
en cygwin se emplean añadiendo "/cygdrive/" a la letra, por ejemplo "ls /cygdrive/c" para ver el disco C:

si al grabar los ficheros a la unidad SD, nos dice que no ha sido posible, quizás sea por que necesitamos entrar en la ventana cygwin con permisos de administrador. (ya sabéis, boton derecho, ejecutar como administrador)

Si ademas, nos da este error:
"0xa2 partition not found"
significa que la SD no está formateada ni preparada para Linux, sino que se ha formateado en FAT o NTFS. Esto no lo explico, son cosas de linux.
Pero yo, para no volverme loco, he usado una imagen que viene con la placa Chameleon96, para crear una SD ya preparada, con la particion 0xA2, y sobre ella, he grabado los ficheros.

Todo este rollo kilométrico, para compilar. Pero aún queda mucho camino, por ejemplo, qué es cada opción del BSP-EDITOR, cómo se cambian los pines en QSYS para que la FPGA los vea como suyos, o como modificar los fuentes UBOOT y PRELOADER para que trabajen a nuestro gusto.

Avatar de Usuario
jepalza
Spartan 3
Mensajes: 216
Registrado: 14 Ago 2018, 18:51

Re: Compilar U-BOOT y PRE-LOADER en Altera Quartus

Mensaje por jepalza » 02 Oct 2020, 06:17

Esto que comento ahora, es exclusivo de las placas Chameleon96, pero viene a complementar el proceso de compilado.
En caso de que queramos volver al u-boot original (o preloader), o modificar los originales (los fuentes) del fabricante de la placa tenemos estas opciones:

para volver a grabar los originales en la SD, los obtenemos del fichero de desarrollo que viene con la placa (el que se descarga de la web, previo registro), fichero llamado "CV96B - Chameleon96.zip" (es el que descargué yo al principio de las investigaciones), dentro de la carpeta "03 - Compiled SD Images\03.02 Card Contents", fichero "buildroot_card_files.tgz", y dentro tenemos los ficheros a grabar, que son "preloader-mkpimage.bin" y "u-boot.img".

para recompilar los originales, podemos descargar el SVN de su web:
http://novtech.ddns.net/svn/Customer/chameleon96
con usuario "chameleon96" y clave "Chameleon2017@NovTech"
Están en la carpeta "uboot-custom"

Yo me he bajado el SVN entero, pero no sé si será de mucha utilidad, son unos 400 megas.

Responder

Volver a “Quartus”