Encontrar información del número de línea para fallos en componentes de tiempo real

1. Obtenga una versión de LinuxCNC que imprima la dirección de instrucción que falla
   (se incluye en esta versión de LinuxCNC)

2. Incluya información de depuración en sus módulos. Para módulos incorporados,
   debajo de la definición de EXTRA_CFLAGS en Makefile, agregue
      EXTRA_CFLAGS += -g
   Para módulos independientes, agregue la misma línea justo encima de la línea
      ifeq ($(BUILDSYS),kbuild)
   y (re)compile el componente

3. Ejecute hal hasta que ocurra el fallo. NO SALGA DE LA SESIÓN HAL TODAVÍA. 
   Primero se debe encontrar el inicio del módulo (paso 5).

4. Anote la dirección IP (puntero de instrucción) en dmesg. p.ej.:
      RTAPI: Task 1[c2800000]: Fault with vec=14, signo=11 ip=c93dc01a.
                                                              ^^^^^^^^
5. Encuentra el módulo que contiene la IP que provoca el fallo.
   $ cat /proc/modules
   motmod 142230 0 - Live 0xc93df000
   falla 1626 1 motmod, Live 0xc93dc000
   hal_lib 30517 2 motmod,fault, Live 0xc93d5000

   Ahora puedes salir de hal/emc2.

6. Reste el inicio del módulo de la IP con fallo (en este caso, 0x1a)
   Entre otras formas de hacer esto, puedes usar el shell:
      $ printf "0x%x\n" $((0xc93dc01a-0xc93dc000))
      0x1a

7. Use addr2line para descubrir la línea del código fuente:
      $ addr2line -e emc2-dev/src/fault.ko 0x1a
      /usr/src/linux-headers-2.6.32-122-rtai/hal/components/fault.comp:9
   Ignora cómo el nombre del directorio es incorrecto y mira si esto te ayudó
   localizar el problema:
      fault.comp:9          *(int*)0 = 0;
   ¡Si! Parece que era eso.

   Tenga en cuenta que incluso si no agrega el argumento de dirección a addr2line
   con 0x, se espera un número hexadecimal, y obtendrá un error
   en la información del número de línea. Tenga cuidado de usar siempre direcciones
   hexadecimales con addr2line.