miércoles, 13 de septiembre de 2017

RIoT Os - Primeros Pasos en Debian



Init:

Para comenzar con las primeras pruebas en Debian de este OS orientado a IoT, necesitaremos tener instalado el siguiente paquete:

# apt-get install bridge-utils

Luego clonamos el git:

$ git clone https://github.com/RIOT-OS/RIOT 

Posteriormente nos situamos en el directorio RIOT/examples para crear nuestro primer proyecto.

Una vez dentro de RIOT/examples hacemos:

$ cp -R default miprimerriot

De esta manera copiamos todo el contenido de "default" a "miprimerriot", lo cual nos servirá de template para un primer uso.

Nos ubicamos en el directorio "miprimerriot" y abrimos el archivo Makefile

$ nano Makefile

Veremos el contenido del make, pero la línea que nos interesa es la siguiente:

# name of your application
APPLICATION = default


La línea anterior define el nombre del archivo como bien dice su título.

La cambiamos a:

# name of your application
APPLICATION = miprimerriot


Ahora cerramos el Makefile y abrimos el archivo main.c, siempre dentro de nuestro directorio "miprimerriot", y buscamos las siguientes líneas


char line_buf[SHELL_DEFAULT_BUFSIZE];
shell_run(NULL, line_buf, SHELL_DEFAULT_BUFSIZE);


Nos situamos en la línea shell_run, y modificaremos el argumento NULL y le pasaremos un array de shell_command_t, el cual contendrá el nombre del comando, una descripción del comando y la función a invocar cuando lancemos el comando por medio del shell interactivo de Riot.

En mi caso quedó así:

char line_buf[SHELL_DEFAULT_BUFSIZE];
shell_run(shell_commands, line_buf, SHELL_DEFAULT_BUFSIZE);


y previo a la definición de main en el mismo archivo insertaremos:

static int wakeUpNeo(int argc, char **argv) {
    /* Suppress compiler errors */
    (void)argc;
    (void)argv;
    printf("Wake up Neo...\n");
    return 0;
}

const shell_command_t shell_commands[] = {
    {"wake", "imprime Wake up Neo...", wakeUpNeo},
    { NULL, NULL, NULL }
}; 


Lo que se hizo es añadir al shell un comando llamado wake, que cuando lo invoquemos llamará a la función wakeUpNeo y por consola nos imprimirá "Wake up Neo...". 
También se añadió un comando NULL,NULL,NULL, indicando el final de la lista de comandos.

Si bien no es un comando que realice una operación importante, es un buen punto de partida.

Estableciendo la red:


Como Riot está principalmente ideado para funcionar en red, necesitaremos crear una red virtual dentro de nuestra PC, para interconectar las distintas instancias de Riot.

Para esto las instancias de Riot necesitan de tap_devices. Cada Riot necesitará de un tap.
Luego para que cada tap se conecte, necesitará de un tapbridge, el cual unirá las instancias de Riot a través de  su tap.

En el clon realizado del git ya disponemos de un script que creará el bridge y 2(dos) tap's para los primeros ensayos.

Nos situamos en el directorio y ejecutamos:

 # .../RIOT/dist/tools/tapsetup/tapsetup -c

ello nos creará lo necesario.

Haciendo que haga...


Nos situaremos en el directorio de nuestro proyecto y lanzaremos (con los dedos cruzados):

$ make

Si todo fue bien tendremos dentro de nuestro proyecto a bin/native/miprimerriot.elf al cual ejecutaremos de la siguiente manera:

# ./bin/native/miprimerriot.elf tap0

Con lo anterior lo lanzamos y le asignamos el tap0.

Podríamos hacer lo propio con otra instancia:

# ./bin/native/miprimerriot.elf tap1

Luego de lanzada alguna instancia veremos una salida en consola de datos de inicialización y valores a analizar en otra entrada de blog.

Si presionamos enter y tipeamos "help" nos mostrará los comandos disponibles y entre ellos estará "wake" lo tipeamos y se ejecutará.

T'T




Este artículo se realizó siguiendo los pasos de la guía  en inglés, publicada en la wiki de Riot en git