Thursday, August 25, 2011

Parcheando GDB 7.3 para debug remoto

Esta vez voy a mostrar como parchear GDB 7.3 con el fin de debuguear de forma remota un kernel corriendo sobre la maquina virtual QEMU. Cuando corremos GDB e intentamos debuguear de forma remota nos retorna el siguiente mensaje de error:

Remote packet too long: 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ...

No estoy muy seguro del origen del problema pero parece que es por el tamaño de los registros. Cuando la máquina virtual salta de modo real a modo long o protegido, los registros cambian su tamaño pero GDB no detecta esta situación. Asi, cuando GDB recibe un paquete más grande que el esperado, tira este error. De esta manera, el parche implementado solo se encarga de incrementar el buffer de recepción cuándo suceden aquellos casos.
El primer paso es bajarse el source de GDB 7.3 desde http://www.gnu.org/s/gdb/download/, no estoy seguro si funciona en versiones más viejas pero supongo que si.
Una vez bajado y descomprimido, editar el archivo gdb-7.3/gdb/remote.c, línea 5693. Aqui nos encontramos con el procedimiento process_g_packet. Ahora será necesario buscar y reemplazar el código original por las siguientes líneas:

/* Further sanity checks, with knowledge of the architecture. */
//if (buf_len > 2 * rsa->sizeof_g_packet)
// error (_("Remote 'g' packet reply is too long: %s"), rs->buf);
if (buf_len > 2 * rsa->sizeof_g_packet)
{
rsa->sizeof_g_packet = buf_len;
for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
{
if (rsa->regs[i].pnum == -1)
continue;
if (rsa->regs[i].offset >= rsa->sizeof_g_packet)
rsa->regs[i].in_g_packet = 0;
else
rsa->regs[i].in_g_packet = 1;
}
}

Finálmente, solo resta compilar:

$ ./configure
$ make

Esto debería ser suficiente para ejecutar GDB correctamente.

Matias E. Vara
www.torokernel.org

Tuesday, August 23, 2011

Toro en el Congreso de Micro-electronica (UNLP)

Presentaré un artículo referido al nucleo dedicado TORO en el Congreso de Microelectrónica a desarrollarse en la Universidad Nacional de La Plata, Facultad de Ingeniería. La presentación será el dia Jueves 8 de Septiembre a las 16.20 hs en la Sala A. La web del evento es http://www.ing.unlp.edu.ar/uea2011/ para mayor información. Saludos!

Matias E. Vara
www.torokernel.org

Saturday, July 30, 2011

Toro en Ubuntu 11.04!

Finalmente es posible compilar TORO en Linux Ubuntu 11.04. Supongo que de aquí en más trabajaré solo sobre esta plataforma. También he dejado de utilizar SVN para comenzar con GIT.
En el wiki pueden encontrar el procedimiento para instalar y testear TORO en ubuntu. He realizado algunos cambios en la estructura del proyecto con el fin de facilitar la comprensión y permitir un mejor crecimiento del proyecto. Saludos.

Matias E. Vara
www.torokernel.org

Friday, June 24, 2011

Toro bootloader

Como puedo empezar?. El bootloader es un proyecto en sí mismo. Si se quiere escribir un OS por Hobby, no hay que empezar por el bootloader claramente. Lleva tiempo, el debug es oscuro y te vas a decepcionar rápidamente. Terminás, no haciendo nada y dejando el proyecto de escritura de un OS. Creo que lo más importante e interesante ocurre dentro del kernel, es decir, una vez que el SO ya ha sido cargado en memoria. De todas formas, hay gente loca por ahi que aun quiere armarse su propio bootloader. Dirigido a ese tipo de personas he comenzado a escribir un poco de documentación sobre el Toro's bootloader en el wiki. Espero que lo encuentren interesante y aprecien el esfuerzo hecho (si, no me gusta escribir documentación, pero reconozco lo importante que es ;) ). El conocimiento es tal, si y solo si, es comunicado.

Matias E. Vara
www.torokernel.org