2011-02-08 23 views
13

Estoy intentando hacer la depuración del kernel para mi Nexus One, y he seguido las instrucciones desde http://bootloader.wikidot.com/android:kgdb. Me preguntaba si alguien realmente consiguió que esto funcione. ¿Y alguien ha hecho una solución más actualizada para usar KGDB para depurar el kernel?Android: Kernel Debugging con KGDB

+2

Si bien tener herramientas es bueno y sería genial si funciona, puede tener más suerte resolviendo un problema de compuerta y reanudar con su proyecto mediante el uso cuidadoso de printk's –

+1

Pregunta relacionada: [Android Kernel Debugging] (http : //stackoverflow.com/q/6697754/816008) –

Respuesta

2

sé que ya has hecho una pregunta en la lista de Android Dev Kernel y no obtuvo respuesta, pero ¿sabía usted busca a través de los archivos de mensajes sobre kgdb y depuración ?: http://groups.google.com/group/android-kernel/search?group=android-kernel&q=kgdb&qt_g=Search+this+group

En particular, es posible que que desee ver en este post: http://groups.google.com/group/android-kernel/browse_thread/thread/5233e03391867c98/320beef11e737a62

He aquí algunos otros enlaces aleatorios que pueden ser útiles:

De todos modos, esta es una pregunta interesante, y estoy realmente tener un tiempo difícil encontrar nada en ella. Es posible que desee probar ingresar en el IRC en algún momento (# android-dev o # android-root en freenode) y preguntar a algunas personas por los punteros (publique lo que encuentre aquí) o solicítelo llamando al the xda-developers Android forums.

2

Encontré esta publicación cuando estaba buscando información de KGDB en Android, así que, a pesar de tener algunos años, pensé que valía la pena publicar un enlace a algún trabajo que hice para poner esto en funcionamiento en el Nexus 6 .

http://www.contextis.com/resources/blog/kgdb-android-debugging-kernel-boss/

espero que esto ayude a alguien más en busca de respuestas similares.

Editado siguiente retroalimentación (gracias a todos):

Para conseguir este trabajo que tenía que hacer un cable UART depuración basado en this Accuvant blog. Este es un circuito bastante simple que consiste en un breakout básico FTDI 3.3v (disponible en SparkFun en el momento de la escritura), así como 4 resistencias (2 x 1K Ohm, 1 x 1.2K Ohm y 1 x 100Ohm), y un Conector para auriculares de 4 componentes, con punta, anillo, anillo y manga (TRRS). Las resistencias básicamente proporcionan un divisor de voltaje para reducir los 3.3v a algo un poco más seguro para su teléfono. Al insertar la toma de audio con el otro extremo conectado a la placa de circuito, el subsistema de audio reconoce que hay una tensión (~ 2.8V) en uno de los pines y sabe que proporciona una interfaz UART a través de ese cable. El FTDI breakout se conecta a su PC a través de USB y desde aquí puede acceder a los mensajes de la consola a través de un emulador de terminal como minicom. Sin embargo, ahora tiene una interfaz en serie a través del mismo mecanismo y eso es lo que podemos usar para una conexión KGDB.

Por lo tanto, en este punto se requieren algunos cambios relativamente menores para el controlador de serie del Nexus 6 (msm_serial_hs_lite.c) para admitir KGDB (específicamente, la capacidad de realizar operaciones de E/S de caracteres atómicos). Acabo de portar these changes desde el código de la línea principal de Kernel de Linux como un capítulo llamado Stephen Boyd había hecho el trabajo duro para el controlador de MSM (Qualcomm) en serie msm_serial.c. Sus cambios se pueden encontrar aquí o simplemente busque "msm_serial: agregar soporte para poll_" en Google. El puerto no fue difícil y mi código puede ser found on github.

Aparte de eso, necesita poder construir un kernel personalizado para su N6 que google provides lots of information on.Luego necesita crear una imagen de arranque que contenga las modificaciones de KGDB en el repositorio github. Tomé el kernel stock desde https://developers.google.com/android/nexus/images, lo extraje (usando abootimg -x) y luego usé el siguiente comando para volver a empaquetarlo con mi kernel personalizado (zImage-dtb) y parámetros de línea de comandos adicionales para asegurar que se cargaría KGDB y apuntar a mi serie el puerto de esta manera:

abootimg -u boot.img -k zImage-dtb -c 'cmdline=console=ttyHSL0,115200,n8 kgdboc=ttyHSL0,115200 kgdbretry=4' 

Con mi boot.img creado pude arrancar usando el comando de arranque boot.img fastboot, abrir una adb shell y luego desencadenar un punto de interrupción en el kernel de Android usando el comando:

echo -n g > /proc/sysrq-trigger 

Vale la pena mencionar para completar que necesita privilegios de superusuario para acceder a/proc/sysrq-trigger, por lo que necesita t o tener raíz

Con el teléfono detenido y el cable de depuración conectado, inicie una versión de GDB para ARM en su PC host con su núcleo descomprimido como argumento (por ejemplo, arm-eabi-gdb ./vmlinux). Nota: estoy ejecutando Ubuntu 14.04 y usando arm-eabi-gdb desde el directorio 'prebuilt' en mi repositorio fuente AOSP. Por último, entre los mandatos siguientes:

set remoteflow off 
set remotebaud 115200 
target remote /dev/ttyUSB0 

Si todo va bien este debe romper inmediatamente en el punto de interrupción kgdb (que su escritura a producir/proc/sysrq-trigger) y se puede iniciar la depuración.

+0

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación; siempre puede comentar sus propias publicaciones, y una vez que tenga suficiente [reputación] (http://stackoverflow.com/help/whats-reputation) lo hará poder [comentar cualquier publicación] (http://stackoverflow.com/help/privileges/comment). – Sufian

+0

Hola Sufian. Gracias por sus comentarios. El OP hizo dos preguntas: '¿Alguien ha conseguido que esto funcione?' y '¿alguien tiene una solución más actualizada para usar KGDB para depurar el kernel?' No pude hacer que esto funcionara a través de USB (como se hace referencia en el enlace del OP), pero lo hice funcionar usando un cable de depuración en un dispositivo Android actual, así que pensé que eso satisfizo la segunda pregunta. ¿Te interesa saber si estás en desacuerdo? –

+0

Ese es un punto justo. He editado la publicación para proporcionar más información. Esta es mi primera publicación adecuada así que me disculpo por la falta de información (de hecho, hoy respondí a una pregunta similar y las he solucionado ahora). –