Estos días me ha dado por investigar en temas ensambladores y me he enganchado a RISC-V.
Os recomiendo este curso de Obijuan sobre RISC-V en la URJC que es una maravilla. Además de poder realizar las prácticas en la FPGA Alhambra (algo más complicado si no disponemos de este dispositivo) se puede optar por el simulador RARS que permite ir viendo los cambios que se producen en los diferentes registros del procesador de manera muy intuitiva. Los ejercicios y la forma amena y sencilla de explicar lo complicado por parte de Juan hace que se avance mucho y rápido. Es un gran trabajo.
Bien, pues me he puesto a trastear también con el ensamblador de ARM-v6, que aunque tiene un ISA diferente se puede aprovechar bastante los conocimientos adquiridos en el curso de RISC-V.
Tengo una Raspberry Pi Zero por casa que dispone de un procesador ARM-v6 y la ha configurado sin teclado, ni ratón ni conexión previa a internet para poder realizar los programas directamente sobre este dispositivo. Paso a contar cómo lo he hecho.
1º.- He instalado la versión Lite de Raspbian. He utilizado el programa Balena Etcher que no necesita ninguna instalación salvo la de descargar el programa y guardarlo en cualquier directorio de tu máquina. Si queréis más información de cómo instalar Raspbian en una Raspberry Pi podéis seguir los pasos que se indican en Configuramos Raspberry Pi 3 de este mismo blog.
2º.- Una vez creadas las dos particiones en la microSD, desconectamos la microSD de nuestro ordenador y la volvemos a conectar para poder acceder a la partición /boot
3º.- En esta partición boot, y para activar el ssh en la raspberry Pi, creamos el fichero ssh. Un fichero de texto vacío. Sí, raspbian al iniciarse y comprobar que existe este fichero activa el servidor ssh en la Raspbery Pi, fácil.
4º.- Mi Raspberry Pi Zero es el modelo antiguo que no dispone de conexión Wifi, por lo que he instalado el dispositivo EDUP EP-N8508GS y he necesitado un adaptador USB-miniUSB.
5º.- Activar la conexión Wifi en este dispositivo en la Raspberry Pi Zero también ha sido muy sencillo, basta con crear el fichero wpa_supplicant.conf también en la partición /boot. Este fichero debe contener la siguiente información:
country=ES
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="NOMBRE DE LA WIFI"
scan_ssid=1
psk="PASSWORD DE LA WIFI"
key_mgmt=WPA-PSK
}
Si quisierais poder conectaros a más de una red Wifi basta con añadir otro network={..} con la información de esa otra red
6º.- Conectamos la tarjeta microSD en la Raspberry Pi, la alimentación y YA…
En la imagen también aparece el conector miniHDMI-HDMI pero en este caso no tiene ninguna utilidad
7º.- Ahora comprobamos que la conexión SSH funciona. Lo primero que tendremos que obtener es la IP donde se ha conectado la Raspberry Pi. Para eso yo utilizo el comando nmap 192.168.1.1/24 -p 22
Obviamente tendrás que cambiar la dirección de red que proporcione tu servidor dhcp y tendrás que tener instalado nmap. Esto último, y hablando de ubuntu, es muy sencillo: sudo apt install nmap
Si todo ha ido bien, debe aparecerte algo similar a esto:
En mi caso la dirección es la 158. También puedes hacer que tu servidor dhcp haga que para la mac de tu dispotivio siempre mantenga esa dirección IP lo que facilitará el resto de accesos.
Realizamos la conexión:
Os recomiendo, una vez realizada la primera conexión, ejecutar sudo raspi-config y cambiar el nombre del host así como la contraseña de acceso…
8º.- Yo trabajo con atom que permite acceder de manera remota a la Raspberry Pi desde tu ordenador de trabajo o portátil lo que hace mucho más sencillo que el tener que estar trabajando con nano todo el tiempo. Para ello se debe instalar en atom el package remote-atom
Después de esto habrá que instalar rmate. Para ello, en la Raspberry Pi, se debe ejecutar lo siguiente:
sudo curl -o /usr/local/bin/rmate https://raw.githubusercontent.com/aurora/rmate/master/rmate
sudo chmod +x /usr/local/bin/rmate
Cuando queramos acceder a un fichero guardado en la RaspberryPI desde atom:
1.- Nos conectamos a la Raspbery Pi de la siguiente manera:
ssh -R 52698:localhost:52698 pi@<direcciónip1deturaspberry>
Obviamente esto solo hay que hacerlo la primera vez que queremos conectarnos a la Raspberry PI
2.- Desde Atom accedemos al menú Packages y pinchamos en StartServer:
También habrá que hacerlo una única vez.
3.- Cada fichero que queramos abrir en la Raspberry Pi tendremos que ejecutar:
rmate <fichero>
y nos aparecerá una nueva pestaña en nuestro atom.
A partir de aquí empieza el trabajo con el esamblador de ARM
Objetivos:
1.- Conexión baremetal en la Raspberry Pi. Estoy interesado en programar sin Sistema Operativo. A ver qué tal.
2.- Realización de utilidades en ensamblador para poder acceder a ellas desde Python o cualquier otro lenguaje de alto nivel
Un saludo