Red de conocimientos turísticos - Información de alquiler - ¿Cómo funciona la herramienta de depuración del kernel KGDB?

¿Cómo funciona la herramienta de depuración del kernel KGDB?

La instalación del entorno de depuración de KGDB requiere agregar el parche kgdb al kernel de Linux. Este parche implementa las funciones necesarias para la depuración remota de GDB, incluido el procesamiento de comandos, el procesamiento de capturas y la comunicación en serie. El código auxiliar de depuración es un pequeño fragmento de código en el kernel de Linux. Es el intermediario entre la máquina de desarrollo que ejecuta GDB y el kernel depurado y el código auxiliar de depuración se comunica entre sí a través del protocolo serie GDB, que está basado en mensajes. Protocolo ASCII, que contiene varios comandos de depuración. Cuando se establece un punto de interrupción, KGDB reemplaza el comando en el punto de interrupción con un comando trap y, cuando se ejecuta en el punto de interrupción, el control se transfiere al código auxiliar de depuración. En este punto, el trabajo del código auxiliar de depuración es comunicar el entorno actual a GDB mediante el protocolo de comunicación serie remota y luego recibir comandos de GDB. El comando GDB le dice al código auxiliar de depuración qué hacer a continuación. Cuando el código auxiliar recibe el comando para continuar la ejecución, restaurará el entorno de ejecución del programa y devolverá el control de la CPU al kernel. /p>

(1) Código auxiliar de GDB

El código auxiliar de GDB se denomina código auxiliar de depuración (código auxiliar para abreviar) y es el núcleo del depurador de KGDB. Es una pequeña pieza de código en el kernel de Linux que maneja varias solicitudes del host: GDB y controla el procesador en la placa de destino mientras el kernel está en estado de depuración.

(2) Modificar la función de manejo de excepciones

Cuando ocurre una excepción, el kernel entrega el control al depurador KGDB y el programa ingresa a la función de manejo de excepciones proporcionada por KGDB. Internamente se pueden analizar varios escenarios del programa.

(3) Comunicación en serie

La comunicación entre GDB y el stub se completa a través del protocolo en serie GDB. Este es un protocolo de código ASCII basado en mensajes que contiene varios comandos de depuración. Además del puerto serie, también puede utilizar una tarjeta de red para la comunicación. Tome la configuración de un punto de interrupción del kernel como ejemplo para ilustrar el proceso de trabajo entre KGDB y GDB. Cuando se establece un punto de interrupción, KGDB modifica el código del kernel y reemplaza la instrucción en la ubicación del punto de interrupción con una instrucción de excepción (una instrucción indefinida en ARM). Cuando se produce una excepción durante la ejecución del punto de interrupción, el control se transfiere al controlador de excepciones del código auxiliar. En este punto, el trabajo del stub es transmitir el entorno actual a GDB utilizando el protocolo de comunicación serie GDB y luego recibir comandos de GDB que le indiquen al stub qué hacer a continuación. Cuando el stub recibe el comando para continuar la ejecución, restaurará la instrucción de reemplazo original, restaurará el entorno de ejecución del programa y devolverá el control de la CPU al kernel.