| Zeile 72: | Zeile 72: | ||
void Video::write(const char *cp){ | void Video::write(const char *cp){ | ||
while (*cp != '\0'){ | while (*cp != '\0'){ | ||
| − | put(* | + | put(*cp++); // Für jedes einzelne Zeichen wird put() aufgerufen |
} | } | ||
} | } | ||
| Zeile 93: | Zeile 93: | ||
</cpp> | </cpp> | ||
| − | === Startup. | + | === Startup.c === |
Um die Konstruktoren bzw. die Destruktoren von globalen/statischen Objekten aufzurufen (siehe auch [[C++#globale.2Fstatische_Objekte|C++]]), werden diese beiden Funktionen später mit in den Kernel gelinkt und in der asmKernel.asm aufgerufen: | Um die Konstruktoren bzw. die Destruktoren von globalen/statischen Objekten aufzurufen (siehe auch [[C++#globale.2Fstatische_Objekte|C++]]), werden diese beiden Funktionen später mit in den Kernel gelinkt und in der asmKernel.asm aufgerufen: | ||
| Zeile 133: | Zeile 133: | ||
global loader ; Unser Einsprungspunkt | global loader ; Unser Einsprungspunkt | ||
extern main ; main() aus Kernel.cpp | extern main ; main() aus Kernel.cpp | ||
| − | extern destructors ; aus Startup. | + | extern destructors ; aus Startup.c |
| − | extern constructors ; aus Startup. | + | extern constructors ; aus Startup.c |
FLAGS equ 0 | FLAGS equ 0 | ||
| Zeile 173: | Zeile 173: | ||
gcc -m32 -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -ffreestanding -fno-exceptions -fno-leading-underscore -c -o Kernel.o Kernel.cpp | gcc -m32 -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -ffreestanding -fno-exceptions -fno-leading-underscore -c -o Kernel.o Kernel.cpp | ||
| − | Startup. | + | Startup.c: |
| − | gcc -m32 | + | gcc -m32 -nostdlib -fno-builtin -ffreestanding -fno-leading-underscore -std=c99 -c -o Startup.o Startup.c |
| Zeile 215: | Zeile 215: | ||
Nur noch ein kurzer Aufruf von LD, und wir haben unseren fertigen Kernel in der Hand (bzw. Maus ;-)): | Nur noch ein kurzer Aufruf von LD, und wir haben unseren fertigen Kernel in der Hand (bzw. Maus ;-)): | ||
| − | ld -T link.txt -o kernel.bin asmKernel.o Startup.o Video.o | + | ld -T link.txt -o kernel.bin asmKernel.o Startup.o Video.o Kernel.o |
Und fertig ist unser Kernel! Wie der Kernel nun mitsamt GRUB auf einer Diskette landet, kann im Artikel [[C-Kernel_mit_GRUB|C-Kernel mit GRUB]] nachgelesen werden, dort verfährt man einfach analog. | Und fertig ist unser Kernel! Wie der Kernel nun mitsamt GRUB auf einer Diskette landet, kann im Artikel [[C-Kernel_mit_GRUB|C-Kernel mit GRUB]] nachgelesen werden, dort verfährt man einfach analog. | ||