docs: en/es/fr sync: src/* docs: en/es/fr sync: code/* docs: en/es/fr sync: common/* docs: en/es/fr sync: config/* Also add TODO to backtranslate linuxcnc2hal_fr.adoc, or make anything with it... docs: en/es/fr sync: drivers/* docs: en/es/fr sync: examples/* docs: en/es/fr sync: gcode/* docs: en/es/fr sync: getting-started/* docs: en/es/fr sync: gui/* docs: en/es/fr sync: hal/* docs: en/es/fr sync: install/* docs: en/es/fr sync: integrator/* docs: en/es/fr sync: ladder/* docs: en/es/fr sync: lathe/* docs: en/es/fr sync: motion/* docs: en/es/fr sync: plasma/* docs: en/es/fr sync: remap/* docs: en/es/fr sync: tooldatabase/* docs: en/es/fr sync: user/* docs: en/es/fr sync: Master_* docs: en/es/fr sync: README* docs: en/es/fr sync: help/* docs: en/es/fr sync: get ready for po4a migration Don't run man pages test on adoc files Rename *.po files to all lower case for consistency Ignore glossaries as they're still way out of sync Ignore fr/en files with missing master en files
66 lines
2 KiB
Text
66 lines
2 KiB
Text
:lang: en
|
|
|
|
= RT Faults
|
|
|
|
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.
|
|
|
|
// vim: set syntax=asciidoc:
|