| Zeile 13: | Zeile 13: | ||
void exceptionHandler(int exception_number, void *exception_address); // wird benötigt um exception-handler einzurichten</c> | void exceptionHandler(int exception_number, void *exception_address); // wird benötigt um exception-handler einzurichten</c> | ||
| − | Zusätzlich wird die ANSI-C-Funktion: ''strcpy'' benötigt. An einigen Stellen im Code | + | Zusätzlich wird die ANSI-C-Funktion: ''strcpy'' benötigt. An einigen Stellen im Code wird die Funktion ''fprintf'' aufgerufen. Diese sollten auskommentiert oder besser durch Kernel-eigene Äquivalente ersetzt werden. |
| − | Nun muss nur noch eine Verbindung aufgebaut werden. Dazu muss im Kernel die Funktion ''set_debug_traps'' aus der i386-stub.c aufgerufen | + | Nun muss nur noch eine Verbindung aufgebaut werden. Dazu muss im Kernel die Funktion ''set_debug_traps'' aus der i386-stub.c aufgerufen und die RS232-Schnittstelle konfiguriert werden. |
| − | <c>set_debug_traps(); // i386-stub initialisieren | + | Damit der kernel auch darauf wartet bis der User bzw GDB bereit ist ein wird zuletzt noch ein breakpoint gesetzt. |
| + | <c>SetupRS232(baudrate, DATA_BIT_8, NO_PARITY, STOP_BIT_1); //standard-baudrate ist 9600 | ||
| + | set_debug_traps(); // i386-stub initialisieren | ||
asm volatile ("int $3"); // warten bis GDB auf den anderen System gestartet wurde</c> | asm volatile ("int $3"); // warten bis GDB auf den anderen System gestartet wurde</c> | ||
| + | |||
| + | Die standard-Baudrate von 9600 ist etwas knapp bemessen. Bei conditional breakpoints in häufig wiederkehrenden Prozessen wird das System extrem stark ausgebremst. Man sollte eine etwas schnellere Übertragungsrate verwenden. | ||
Auf der kernel-seite ist nun alles Fertig. Jetzt kann man sich ganz einfach mit GDB zu dem Kernel verbinden und ihn debuggen: | Auf der kernel-seite ist nun alles Fertig. Jetzt kann man sich ganz einfach mit GDB zu dem Kernel verbinden und ihn debuggen: | ||
| − | <code> | + | <code>$ gdb |
| − | + | (gdb) set remotebaud 115200 | |
(gdb) target remote /dev/ttyS0 | (gdb) target remote /dev/ttyS0 | ||
</code> | </code> | ||