2022/09/28

Nerdearla 2022 Open de todo, la previa

El taller en realidad no es tan taller, ¿cuántas personas del ámbito de nerdearla tienen una edu-ciaa-fpga, el entorno armado e interés en hacer un taller de esto? Mmmh, poquita. En realidad es una charla larga, es que hay mucho tema pero aprovecho para que quien tenga la edu-ciaa-fpga y ganas, pueda ir probando en el momento, tipo taller.

Tal como he contado mi experiencia en https://seguridad-agile.blogspot.com/2021/09/h4ck3d-2021-configuracion-basica.html, el proceso para poder generar el bitstream es larguísimo. Para facilitar la vida de quien lo haga, he tomado la virtual que uso habitualmente y le apliqué un proceso de limpieza, sanitización y compresión para ahorrar ancho de banda por un lado y para ahorrar espacio en el disco de quien la instale por el otro.


En mis últimos proyectos similares he utilizado para las virtuales Ubuntu Server con xorg y openbox, pero puede ser demasiado minimalista para otras personas, así que en lugar de rehacerlo con Ubuntu Server, reduciendo aún más el tamaño de la imagen, me concentré en quitar. El proceso de limpieza fue eliminar toda aplicación superflua, caches, logs, los repositorios utilizados para la construcción de las toolchains, lo que sea, esto quizás lo detalle en otro post uno de estos días.

Las precauciones que he tomado al exportar es cambiar la contraseñas y fundamentalmente eliminar de .ssh la key que uso para github. Tras el proceso de zerofill y compactación, no debería quedar ningún rastro forense, pero como no tengo garantías, de todos modos también eliminé la key en github.

Reformulando, eliminé la key en github para no tener ningún problema de robo de credenciales y de modo secundario la purgué en la imagen para que nadie que no ha leído esto la encuentre y piense que fuí descuidado. Y fundamentalmente para predicar con el ejemplo.

El repo consideré borrarlo también y que hicieras git clone, pero de un modo u otro tenías que bajarlo, así que lo dejé.


Durante la charla/taller lo que iré mostrando es el proceso asumiendo que ya tenés todo instalado y funcionando, comprenderás que no voy a poder en ese momento resolver ningún problema. Para poder participar del taller probando los ejemplos, es necesario que ejecutes la siguiente secuencia de operaciones, que terminaría en la grabación del bitstream a la placa y como control deberías tener algunos leds cambiantes en la placa y en la terminal serial un menú.

 

Pasos

 

Asumo que si estás jugando con FPGA y más edu-ciaa-fpga, ya tenés bastante experiencia con linux y virtualización. Aún así, cualquier problema que tengas agregalo a los comentarios abajo e iré completando el instructivo.

 

El anfitrión

 

Tenés que agregar tu usuarios a estos grupos:

$ sudo addgroup "$USER" vboxusers

$ sudo addgroup "$USER" dialout

 

Instalá el Extension Pack si no lo tenés.


La imagen

 

La imagen exportada a OVA ocupa unos 3GB y está en un drive.

La virtual importada ocupa al menos 9.3 GB, con el uso no debería crecer mucho, pero considerá que la partición es de 30 GB. Es un Linux Mint 19 o 20, lo cual provée un entorno gráfico agradable.

Desde VirtualBox elegí "File", "Import Appliance"

Yo la uso con 8GB de RAM, pero seguro que anda con menos, mucho menos, tipo 3GB.

Configurá networking en modo bridge 

 

Arranque


Luego la arrancás, el usuario es "Charly", la clave "educiaa", abrís una terminal y averiguás la IP:

$ ip a

El repo está en:

$ cd ~/Desktop/repo/github/cpantel/evilcodesequence

 

El bitstream

 

$ make PROGRAM=fulldemo system 

 

El flasheo

 

Para evitar tener que conectar la placa a la virtual, que es bastante sencillo pero puede ser fuente de inconvenientes, el flasheo se hará desde el anfitrión si es linux, si es windows, vas a tener que hacerle funcionar el USB y flashear desde la VM, vemos luego.

En el anfitrion, ejecutar una sola vez:


$ scp charly@192.168.1.xx:/usr/local/bin/iceprog .


Luego, para cada nueva regeneración del bistream:


$ scp charly@192.168.1.xx:/home/charly/Desktop/REPO/github/cpantel/evilCodeSequence/BUILD/top.bin .

$ ./iceprog top.bin

 

si dice 

 

./iceprog: error while loading shared libraries: libftdi.so.1: cannot open shared object file: No such file or directory

 

Es por que te falta

 

$ sudo apt install libftdi1


Si optaras por conectar directamente la placa a la VM


$ make PROGRAM=fulldemo flash


Considerá que flashear desde el anfitrión que es MUCHO MUCHO más rápido.

Luego, usando tu programa favorito a /dev/ttyUSB1 con velocidad 9600, tendrías que ver algo como esto:

 

Menu
Menu

Jugá con las opciones, mejor la (1) LEDS pues el resto está a medio implementar en la imagen.

Contactame ANTES del taller si algo no te funciona, durante el taller no va a haber tiempo.

Hay otras maneras de obtener un entorno equivalente, ya sea que lo hagas vos de cero o que uses docker, es irrelevante siempre y cuando puedas compilar el programa, construir el bitstream y flashearlo, proveo la virtual como una facilidad.



2022/07/19

Recuperación fallida pantalla bangho, premio consuelo webcam

Me habían regalado una bangho b-n0x1, que tenía de interesante dos slots MiniPCIE, (creo), uno ocupado por WiFi, el otro libre. La prendí, tenía un windows roto, la olvidé. Meses despues la quise prender y nada, murió algo y pasé a modo carroñero.

Disco ok, memoria veremos, teclado se me soltó la tecla de enter, lo más interesante la pantalla, a su lado una webcam...

 

Recuperación fallida


Gracias a un cierto esfuerzo y la generosa colaboración de Pablo Llanos en este hilo de embebidos, pasé de no saber absolutamente nada a saber porqué no puedo usar la pantalla, resumo:

La pantalla es una HannStar HSD100IFW1-A00, que se comunica con LVDS. Por medio de tres pares de cables se transmite:


g[0], r[5], r[4], r[3], r[2], r[1], r[0]
b[1], b[0], g[5], g[4], g[3], g[2], g[1]
de,   vs  , hs  , b[5], b[4], b[3], b[2
]


 
siendo supongo de Display Enable, vs Vertical Sync y hs Horizontal Sync. No importa mucho el detalle pero cuento mi idea, que era, a la usanza de los primeros video juegos, tener algo así como un Video Sync Generator y mediante lógica combinacional generar algo. Pero la frecuencia es de 45MHz, multiplicada por esos 7 bits de más arriba, 315 MHz, completamente fuera de mi alcance generar, tratar adecuadamente, medir o diagnosticar.
 
Luego pensé que si la disposición hubiese sido:
 

de,  g[0], r[5], r[4], r[3], r[2], r[1]
vs,  b[1], b[0], g[5], g[4], g[3], g[2]
hs,  b[5], b[4], b[3], b[2], r[0], g[1]


con las señales de control separadas, podrían haber posibilidades de trabajar a 90MHz, pero eso es en un universo alternativo.

En realidad no es que no sabía nada, estuve adaptando unos ejemplos de verilog que generan VGA, me he hecho un PMOD VGA e implementé un render de VGA en TCL para la salida de una simulación de FPGA, pero de esto nuevo no tenía ni la menor idea.

 

Premio consuelo


Me quedó la cámara web, con un chip que dice ser Aveo AV301W, una datasheet aparentemente compatible que dice "Delock industry USB 2.0 CMOS Kameramodul 1.3", no recuerdo el camino de navegación que me llevó hasta ahí, pero creo recordar que fue por la imagen.

 

Aveo AV301W
Aveo AV301W

 

Este módulo implementa comunicación USB, asi que tomé un cable USB roto, aposté a que la falla estaba cerca del conector del lado del dispositivo, corté, agregue un PCB para poder disociar la soldadura de la correcta conexión, miré los pinouts fijo, soldé y listo.

 

Del lado del cable, elegí "imágenes" en https://www.google.com/search?q=usb+pinout. Dejo como referencia con ASCII Art, viéndolo desde arriba:

 - D+ D-  +

[] [] [] []

 4  3  2  1


En el módulo:


Pin#Signal Name
1+5v
2USB_D-
3USB_D+
4BTN
5GND


BTN es un botón opcional para disparar capturas, no me molesté en conectarlo

Lo enchufé en una vieja Sarmiento y nada.

Superado por tanta derrota, abandoné el proyecto.

Semanas despues, reviví el proyecto.

El motivo de este resucitamiento fue una confluencia de astros: por un lado alguien ofreció hardware en embebidos32, lo que me llevó a cybercirujas, que me puso nuevamente en sintonía con el modo recuperador. Por el otro, con motivo a un proyecto candidato a H4CK3D 2022, estaba viendo una excelente clase de USB a cargo de Pablo Gómez y ví en un diagrama que D+ va con D+ y D- con D-, no como en UART que Rx va con Tx y Tx con Rx y me pregunté si lo había conectado bien. Al revisar, estaba bien conectado, pero no había soldado correctamente el pin de alimentación. 

Corregí, volví a conectar la cámara a la vieja Sarmiento y listo, anda.

Para llevar la sinergía al máximo, hallé tirado en la calle hace meses, sino años, un gabinete de webcam, en perfecto estado.

 

A medio armar


Que de premio extra traía un micrófono:

 

Micrófono
Micrófono


Le hice unas ranuritas, pístola de plástico caliente y listo.

El único problema es que el cable es un poco corto y en la máquina donde más serviría conectarla, con un alargador no anda, en otra si.