¿Cómo funciona la herramienta de depuración del kernel KGDB?
(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.