Por qué su hardware necesita un depurador de código abierto

| |

COMPARTE EL ARTÍCULO!!!

Trabajar directamente con el hardware es difícil. Cada proyecto trae consigo preguntas mundanas sobre qué compilador usar, con qué protocolos de comunicación trabajar y cómo cargar código. Los desarrolladores también necesitan averiguar cómo depurar el sistema activo sin afectar al programa que se está ejecutando.

En el pasado, esto requería un software caro y propietario, pero gracias al hardware básico y a proyectos como OpenOCD, el desarrollo de programas que se ejecutan directamente en hardware embebido es más fácil que nunca.

Cuando se trabaja con sistemas muy pequeños, es posible que no estén disponibles las características agradables en las que los programadores han confiado. En un sistema de este tipo, cuando algo sale mal, el sistema puede terminar en un estado desconocido en el que la única solución es reiniciar el hardware. De este modo, el sistema vuelve a funcionar, pero se eliminará cualquier información que pueda llevar al diagnóstico del problema. Los depuradores de hardware proporcionan información sobre lo que está haciendo una CPU, incluso si parece estar congelada.

A diferencia de los depuradores de software como gdb (que utilizan ganchos del sistema operativo o parchean el programa en ejecución para reemplazar el código válido por instrucciones especiales que hacen que el sistema operativo notifique al depurador de un evento), los depuradores de hardware aprovechan los pines especiales del chip que hablan directamente con el núcleo. Al utilizar una conexión especialmente diseñada, los depuradores de hardware proporcionan a los desarrolladores las mismas herramientas en las que normalmente confían cuando desarrollan bajo un sistema operativo. Un buen entorno de depuración de hardware permite a un desarrollador entrar e inspeccionar el estado actual del programa, ver (y a veces cambiar) las variables, establecer puntos de vigilancia o puntos de interrupción y, en general, obtener una comprensión más profunda de un sistema en funcionamiento.

Los fabricantes de chips de gama alta suelen tener un entorno de desarrollo recomendado que incluye un sistema operativo, una cadena de herramientas de compilación y una caja de depuración específica. A veces se trata de una solución interna, y con frecuencia estas herramientas son muy costosas y su uso es muy engorroso. Cada proveedor de chips tiene su propio entorno, que tiene la tendencia a llenar los estantes con hardware de depuración exótico. El acceso a la documentación y a las herramientas de hardware/software está frecuentemente limitado por acuerdos de confidencialidad y contratos costosos, lo que significa que sólo las grandes empresas pueden cosechar los beneficios de la depuración en vivo.

Foto de Sean Cross, CC BY-SA 2.0

OpenOCD es un depurador en chip de código abierto. Sólo hay un puñado de protocolos de depuración comunes, y el más común es JTAG. OpenOCD habla JTAG, y puede aprovechar una amplia gama de cajas JTAG comunes para permitir la depuración de una amplia variedad de hardware. OpenOCD tiene su propio lenguaje de programación basado en TCL y su propio intérprete de comandos, pero también proporciona una conexión gdbserver que permite que cualquier cosa que hable en gdb pueda hablar con hardware real. Esto significa que es posible depurar software usando cualquier cosa, desde gdb en sí, hasta DDD, Eclipse e IDA Pro. JTAG requiere cuatro cables, pero algunos chips ARM más nuevos usan una variante de dos cables. El protocolo es el mismo, y algunos chips hablan ambos. Si una placa tiene cabezales estándar de .1″ y funciona a 3.3V, puede ser posible utilizar simplemente cables volantes sin soldar nada en absoluto.

Foto de Sean Cross, CC BY-SA 2.0

Si usted tiene un raspberry Pi, usted tiene las características de una caja JTAG conectada en red. Raspbian tiene una versión reciente de openocd disponible, así que está a sólo «apt-get install openocd» de distancia. El paquete soporta una variedad de hardware, incluyendo cables FTDI genéricos, el Buspirate, el GPIO genérico y el cabezal GPIO de Frambuesa Pi específico de la plataforma. El cableado de las cosas es principalmente una cuestión de conectar los cables entre el dispositivo bajo investigación y el hardware que está haciendo la investigación, como el cabezal GPIO.

Una vez que todo está cableado y configurado, OpenOCD ofrece una visión potente de lo que está haciendo exactamente el hardware. El programa ofrece un servidor «telnet» en el puerto 4444, a través del cual se puede controlar todo. El dispositivo que se está investigando puede ser detenido y cualquier área de la memoria puede ser leída o modificada. Los periféricos de hardware se asignan con frecuencia a la memoria, lo que significa que es posible hablar directamente con el hardware introduciendo valores en la memoria. Para las fichas soportadas, OpenOCD aprovecha esta ventaja para permitir la reflexión de las fichas, ya sea introduciendo programas en la memoria y ejecutándolos (por ejemplo, en la serie de fichas Kinetis) o manipulando los registros de flash directamente (por ejemplo, en la familia STM32)

.

Al desarrollar código para plataformas embebidas como STM32, OpenOCD resulta aún más práctico con su integración de gdb. Además del servidor telnet en el puerto 4444, se abre un puerto compatible con gdbserver en el puerto 3333, lo que permite a gdb comunicarse con el hardware. Si gdb dispone de un archivo ELF embebido común, puede crear puntos de interrupción en las funciones, paso a paso línea a línea, y capturar ciertos tipos de señales lanzadas por el hardware de destino. Usando el comando estándar «load», gdb es capaz de reflejar la placa también, lo que puede acelerar los ciclos de código/compilación/prueba.

Si se configura correctamente, OpenOCD puede incluso proporcionar alguna medida de integración RTOS. gdb soporta la depuración de programas con múltiples subprocesos, y OpenOCD puede informar a gdb de varios procesos que se ejecutan en el hardware de destino mapeándolos como subprocesos. Si el objetivo tiene habilitados los símbolos de depuración y está ejecutando ChibiOS, ThreadX, FreeRTOS, eCos o Linux, gdb listará los procesos bajo su tabla «info threads», y el usuario puede cambiar entre tareas seleccionando el hilo por número.

El paquete OpenOCD es una adición extremadamente potente a la caja de herramientas de hardware abierto. Su versatilidad significa que casi cualquier cosa que pueda mover los pines es capaz de convertirse en un depurador de hardware, y la amplia disponibilidad de hardware básico significa que estas poderosas herramientas están disponibles para aquellos que no tienen un presupuesto de un millón de dólares en investigación y desarrollo. Cuando se combina con hardware abierto y sistemas operativos embebidos abiertos, las causas de raíz de los misteriosos bloqueos y bloqueos se vuelven obvias. Al dedicar menos tiempo a la búsqueda de estos problemas mundanos, el desarrollo para plataformas restringidas se vuelve más agradable, lo que permite al desarrollador pensar más en nuevas funciones o ideas interesantes y, en general, divertirse más.

Hardware abierto

Una colección de artículos sobre el estado actual y futuro del hardware abierto.

COMPARTE EL ARTÍCULO!!!

Previous

Frambuesa Pi Zero: a un precio de 5 dólares por ordenador

Así es como System76 abre el hardware

Next

Deja un comentario

shares