I'm from Germany and I'm just a beginner in OS Development.
So I searched the Internet and found a (German) tutorial.
So I have a kernel.asm and a kernel.c from the tutorial. I use GRUB as Bootloader.
Here the files:
kernel.asm
Code: Select all
global loader ; loader für Linker sichtbar machen
extern main ; main-Funktion des C-Kernels
FLAGS equ 0
MAGIC equ 0x1BADB002 ; Magicnumber - Erkennungsmerkmal für Grub
CHECKSUM equ -(MAGIC + FLAGS) ; Checksum
section .text
align 4
align 4
MultiBootHeader:
dd MAGIC ; Magic number
dd FLAGS ; Flags
dd CHECKSUM ; Checksum
loader:
mov esp,0x200000 ; Stack an die 2MB-Grenze platzieren
push eax ; Multiboot Magicnumber auf den Stack legen
push ebx ; Adresse der Multiboot-Structure auf den Stack legen
call main ; main-Funktion des C-Kernels aufrufen
cli ; falls der Kernel bis hier her kommt, CPU anhalten
hlt
Code: Select all
int main()
{
// Pointer zum Videospeicher
char *video = (char*)0xB8000;
// String zum Ausgeben
char *hello = "Hello World";
// Zuerst den Speicher leeren
for(video+=4000; video !=(char*)0xB8000 ;video--)
*video=0;
// String ausgeben
while (*hello)
{
*video = *hello;
video++;
*video = 0x07;
video++;
hello++;
}
// jetzt wo wir schon im Kernel drin sind, wollen wir auch nicht mehr raus ;)
//while (1); da mit GRUB geladen->nicht nötig
return 0;
}
Code: Select all
ENTRY (loader)
SECTIONS{
. = 0x00100000;
.text :{
*(.text)
}
.rodata ALIGN (0x1000) : {
*(.rodata)
}
.data ALIGN (0x1000) : {
*(.data)
}
.bss : {
_sbss = .;
*(COMMON)
*(.bss)
_ebss = .;
}
}
But I'm searched and searched and found a lot of code for rebooting, but mostly in assembler (not good for kernel.c ) and nothing work.
Please help me to find a reboot function for my code because I want to understand these stuff and so I want to add something to see what happens. But only error aren't so great. So please help me and sorry for my (possibly) bad english.
Thanks a lot
The beginner