So,
Ich will eigentlich nur einmal versuchen, wie weit ich komme mein eigenes OS zu programmieren. Ich habe schon einiges an C/C++ Erfahrung, bin also kein kompletter Noob.
Weil ich auch direkt in C loslegen wollte habe ich mir GRUB runtergeladen, ein virtuelles Diskettenlaufwerk erstellt und es darauf installiert - klappt prima.
Ich habe ein kleines C-Programm erstellt, dass lediglich aus einer void main, einer Endlosschleife und dem Multiboot Header besteht.
Dann kompiliere und linke ich das Programm mit gcc und ld ins ELF-Dateiformat. Das packe ich mit auf die Diskette und starte...
GRUB erkennt den Kernel und meldet keinen Fehler. Wenn ich ihn dann allerdings booten will beendet Bochs. In der bochsout.txt steht:
00002667277i[BIOS ] int15: Func 24h, subfunc 01h, A20 gate control not supported
00002673180i[BIOS ] int13_harddisk: function 41, unmapped device for DL=80
00002677695i[BIOS ] int13_harddisk: function 08, unmapped device for DL=80
00002682227i[BIOS ] *** int 15h function AX=00C0, BX=0000 not yet supported!
00002686707i[BIOS ] *** int 15h function AX=5300, BX=0000 not yet supported!
00002691122i[BIOS ] *** int 15h function AX=5304, BX=0000 not yet supported!
00009653031i[CPU ] write_virtual_checks(): no write access to seg
00009653031e[CPU ] exception(): 3rd (13) exception with no resolution, shutdown status is 00h, resetting
00009657356i[BIOS ] rombios.c,v 1.103.2.2 2004/02/02 22:39:22 cbothamy Exp $
00010100046i[KBD ] reset-disable command received
00012141464i[BIOS ] FATAL: floppy recal:f07: ctrl not ready
00012141763p[BIOS ] >>PANIC<< BIOS panic at rombios.c, line 1558
Ein Disketten-lesefehler also?? Ich habe doch keine Diskette erstellt. Vorher hatte ich es mit richtigen Disketten probiert und diesen Fehler bekommen, desshalb bin ich aufs virtuelle Laufwerk umgestiegen, aber immernoch dasselbe!
Oder gibt es eine andere Erklärung für den Fehler?
Mein Programm:
void _main();
// Multiboot Header von Lowlevel
const unsigned MultibootHeader[12] __attribute__ ((section(".text"))) =
{
0x1BADB002,
0x00000000,
0xE4524FFE,
(unsigned) MultibootHeader,
(unsigned) _main,
0x00000000,
0x00000000,
(unsigned) _main,
0x00000000,
0x00000050,
0x00000019,
0x00000000
};
void _main()
{
while(1)
{
// Eindlosschleife
}
}
ich benutzer Windows XP.