Soy nuevo en el desarrollo de kernel y me gustaría saber cómo ejecutar/depurar el kernel de linux usando QEMU y gdb. De hecho, estoy leyendo el libro de Robert Love, pero desafortunadamente no ayuda al lector sobre cómo instalar las herramientas adecuadas para ejecutar o depurar el kernel ... Entonces, lo que hice fue seguir este tutorial http://opensourceforu.efytimes.com/2011/02/kernel-development-debugging-using-eclipse/. Estoy usando eclipse como un IDE para desarrollar en el kernel, pero primero quería que funcione en QEMU/gdb. Así que lo que hice hasta ahora era:¿Cómo depurar el kernel de Linux con GDB y QEMU?
1) para compilar el kernel con:
make defconfig (then setting the CONFIG_DEBUG_INFO=y in the .config)
make -j4
2) Una vez que la compilación ha terminado corro Qemu usando:
qemu-system-x86_64 -s -S /dev/zero -kernel /arch/x86/boot/bzImage
la que lanzar el núcleo en estado "detenido"
3) por lo tanto tengo que usar gDB, trato el siguiente comando:
gdb ./vmlinux
que se ejecuta correctamente pero ... Ahora no sé qué hacer ... Sé que tengo que usar la depuración remota en el puerto 1234 (puerto predeterminado utilizado por Qemu), usando el vmlinux como el archivo de tabla de símbolos para la depuración.
Así que mi pregunta es: ¿qué debo hacer para ejecutar el kernel en Qemu, adjuntar mi depurador y así lograr que trabajen juntos para hacer mi vida más fácil con el desarrollo del kernel.
Gracias mucho funciona :). Acabo de terminar de leer el libro que trata sobre DDD, eclipse y gdb publicado por la prensa no almidonada, pero no hubo depuración remota en este libro. Mi kernel ahora se está iniciando, pero parece que lleva tiempo cargarlo (ya que Qemu parece usar solo 1 hilo en mi máquina) y ahora está bloqueado en:? kernel_thread_helper + 0x0/0x10. ¿Es la forma en que el kernel se usa para cargar? Quiero decir, ¿no deberíamos tener un símbolo del sistema una vez que está cargado? Gracias –
me funciona. Sin embargo, no sé cómo forzar kernel stop en punto de interrupción después de llamar a la primera continuación. Por ejemplo, pongo un punto de interrupción en la función start_kernel pero nunca se detiene allí. Alguna idea ? – ARH