By: Fabio Hernández
INTRODUCCIÓN:
El presente documento pretende mostrar la manera de generar software para una imagen de Linux implementada en la De0nano SOC, para ello se hará un pequeño marco teórico, luego se explicaran los recursos que se necesitan para realizar el tutorial y por ultimo se hará la explicación para generar un programa utilizando periféricos.
Este tutorial tiene el siguiente orden:
Marco teórico:
ARM CORTEX A9
Linux.
Descripción de periféricos.
Memory Map Cyclone V SOC.
Desarrollo:
Linux Test
First Hello World
Accediendo a GPIOs
Conversión a ejecutable para el Linux S.O.
MARCO TEÓRICO:
ARM CORTEX A9: El procesador ARM Cortex-A9 tiene arquitectura RISC (Reduced Instruction Set Computer). Esta aritmética y operadores lógicas se realizan a través de registros de propósito general. Los datos se mueven entre la memoria y estos registros por medio de instrucciones de carga y almacenamiento.
El tamaño de las palabras del procesador es de 32 bits, donde el bit más significativo es el que se encuentra mas a la izquierda y los menos significativos mas a la derecha de la palabra.
Actualmente la arquitectura ARM, con diseños en los que se integran más de 30.000 transistores, está presente en un gran número de dispositivos electrónicos utilizados por usuarios particulares y profesionales, y a diario se venden más de 16 millones de productos basados en esta arquitectura de ARM Holdings.
LINUX: la palabra linux actualmente puede hacer referencia a un núcleo de sistema operativo o a un sistema operativo, dependiendo del contexto. Linux se empezó a crear en 1991 por un joven llamado Linus Torvalds quien mediante simples ideas y con la ayuda de muchas personas lanzó la versión 0.01 de Linux de manera gratuita y a través del tiempo paso de tener 10239 lineas de código a tener mas de 14000000 y su código fuente puede ser descargado de manera gratuita en la red. Linux es famoso por su terminal en la cual se introducen diferentes comandos para tener control del sistema operativo, entre los comandos mas importantes se encuentran:
CAT: cat (de concatenar), es una utilidad que nos permite visualizar el contenido de un archivo de texto sin la necesidad de un editor. Para utilizarlo solo debemos mencionarlo junto al archivo que deseamos visualizar:
$ cat prueba.txt
LS: ls (de listar), permite listar el contenido de un directorio o fichero. La sintaxis es:
$ ls /home/directorio
CD: cd (de change directory), es como su nombre lo indica el comando que necesitarás para acceder a una ruta distinta de la que te encuentras. Por ejemplo, si estas en el directorio /home y deseas acceder a /home/ejercicios, seria:
$ cd /home/ejercicios
Si estas en el directorio /home y deseas acceder a /home/ejercicios, seria:
$cd ..
CP: cp ( de copy o copiar), copia un archivo o directorio origen a un archivo o directorio destino. Por ejemplo, para copiar el archivo prueba.txt ubicado en /home a un directorio de respaldo, podemos usar:
$ cp/home/prueba.txt /home/respaldo/prueba.txt
MV: mv (de move), mueve un archivo a una ruta específica, y a diferencia de cp, lo elimina del origen finalizada la operación. Por ejemplo:
$ mv /home/prueba.txt /home/respaldos/prueba2.txt
RM: rm (de remove), es el comando necesario para borrar un archivo o directorio. Para borrar el archivo prueba.txt ubicado en /home, ejecutamos:
$ rm /home/prueba.txt
chmod: chmod convierte un archivo en un archivo de escritura, de lectura, de escritura y lectura, o de escritura lectura y ejecución de acuerdo al número introducido en el comando, para mayor información vaya a este enlace: https://www.maketecheasier.com/file-permissions-what-does-chmod-777-means/
Usted puede encontrar mas de 400 comandos en el siguiente enlace:
http://blog.desdelinux.net/mas-de-400-comandos-para-gnulinux-que-deberias-conocer/
DESCRIPCIÓN DE LOS PERIFÉRICOS: la siguiente imagen muestra los periféricos conectados a la Ciclone V SOC a los cuales se puede tener acceso mediante un sistema operativo que se implemente en el ARM.
A continuación se explicara cada uno de ellos:
LTC 2x7 Header: es un header de 14 pines, que es usado principalmente para comunicaciones con tarjetas de la empresa Linear Technology. es conectado mediante puertos SPI Master e I2C del HPS, también se pueden usar como GPIO, SPI, o I2C con el HPS, la conexión entre el HPS y el LTC se muestra a continuación:
Push-buttons & LEDs: Similar a la FPGA, el HPS también tiene sus propios switchs, buttons, LEds que pueden ser controladas desde la programación interna del HPS. Tenga en cuenta que el push-button al que se puede tener acceso es llamado User push Button y el LED es llamado USER LED. Como se muestra en la imagen:
Gigabit Ethernet: La de0nano SOC soporta transferencias de datos vía Gigabit Ethernet a través de un chip externo Micrel KSZ9031RN PHY que soporta interfaces RGMII MAC, la conexión RJ-45-Ethernet Chip-HPS se muestra a continuación:
UART: La de0nano SOC tiene una interfaz UART conectada con el HPS. esta interfaz no soporta control de señales por HW. La interfaz física es implementada con un conversor UART-USB a través de un FT232R chip como se muestra a continuación:
Memoria DDR3: La memoria DDR3 tiene una capacidad de 1GB con un ancho de banda para datos de 32 bits, las señales deben ser conectadas a través de un controlador dedicado con una velocidad de 400 MHz.
Micro SD Card Socket: La de0nano SOC tiene una interfaz para una tarjeta Micro SD, con x4 lineas de datos. Esto sirve como un almacenamiento interno para el HPS, pero también puede servir como el boot de un sistema operativo como se hace en una Raspberry Pi. La siguiente imagen muestra la conexión entre la SD y el HPS.
MEMORY MAP CYCLONE V SOC:
DESARROLLO:
Linux Test:
Lo primero que se debe realizar es verificar que la tarjeta SD esté insertada en la ranura correspondiente dentro en la De0nano SOC, esta SD tiene una imagen de Linux de fabrica, luego debe conectar el cable USB que antes conectaba para programar la FPGA en el puerto llamado UART, como se muestra en la siguiente imagen:
Siguiente conectar el cable USB al computador, ir al administrador de dispositivos y tener el cuenta el número del nuevo puerto COM que se ha generado.
Luego abra el Putty y configure como se muestra en la siguiente imagen:
Oprima HPS_WARM_RST_N, se cargará el la imagen de Linux grabada en la SD y se visualizara lo siguiente:
Inicie sesión como root, y escriba ls, esto mostrará los archivos que se encuentran en el directorio donde usted se encuentra
Usted puede ver los dispositivos que se encuentran conectados al sistema operativo y su dirección de memoria en escribiendo lo siguiente
FIRST HELLO WORLD.
Para ello debe abrir el programa Eclipse for DS-5 e ir a file--> New Project --> C project y seleccionar GCC 4X como se muestra en la siguiente imagen:
Vaya a la carpeta del proyecto que se generó, dele click derecho --> properties --> c/c++ build --> settings --> Includes y añada un nuevo path como se indica en la imagen:
Vaya a la ruta donde se encuentra la carpeta Altera instalada y añada los directorios que se muestra a continuación: (
Ahora vaya a a miscellaneus y copie el texto -lm -lpthread y de click en ok como se muestra en la imagen:
Agregue un nuevo archivo .c y llamelo main.c como se muestra a continuación:
En el archivo main.c escriba el código que se muestra a continuación y construya el proyecto (Build project) :
Usted habrá notado que se generó una nueva carpeta llamada binaries con un archivo binario principal, este archivo es el que se debe portar al sistema operativo con el fin de ejecutar el programa que hemos escrito, para ello vaya a la carpeta, usted puede encontrar la ruta del archivo como se muestra en la siguiente imagen:
Conecte el cable Ethernet de la FPGA al Router, utilize el programa XAMPP (https://www.apachefriends.org/es/index.html), copie el archivo de la dirección encontrada en el paso anterior a la carpeta htdocs (por lo general la ruta es C:\xampp\htdocs) en esta carpeta se encuentran los documentos que se compartiran en el "host" que se crea con el XAMPP, ahora abra XAMPP y dele en start a Apache y MySQL como se muestra a continuación:
para probar que todo este bien abra su explorador y escriba localhost en la barra de direcciones, debe salir algo como esto:
Vaya la aplicación cmd de windows y escriba ipconfig y encuentre la dirección ip de su equipo como se muestra a continuación:
Vaya Putty nuevamente y escriba lo siguiente:
Ahora dele beneficios de ejecutable al archivo que acabo de descargar de la siguiente manera:
Ejecute el programa y compruebe que imprima Hello from ARM CORTEX A9 en la consola:
Como puede ver hemos generado nuestro primer programa :).