Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: Arktus am 04. November 2008, 09:54
-
So, ich habe vieles probier abter nicht brauchbares ist bei rausgekommen.
Ich wollte mir einen CrossCompiler basteln der mit den Aktuelen Paketen versorgt ist.
Ich versuche schon seit einer Woche mein TuT OS zu Compilieren aber es haut einfach nicht hin, es kommen immer wieder fehler Meldungen raus. Könnte mir einer von euch eine Genau anleitung geben wie ich den den zusammen bauen soll ? Die hier in der Wiki Klappt net da kommen bei mir immer nur Fehlermeldungen raus.
OS: Vista
Danke im Voraus. MFG Arktus
-
Was für Fehlermeldungen?
Brauchst du wirklich einen Cross Compiler? Sowohl MinGW als auch Cygwin sind mit etwas Gebastel gut zu benutzen.
-
Hat sich jetzt erledigt, habe mir Ubuntu Image für den VMWare Player besorgt und code fürs erste da, habe nun auch was hinbekommen.
Der Kernel aus dem Tut http://lowlevel.brainsware.org/wiki/index.php/C-Kernel_mit_Grub
kernel.asm
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
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
kernel.c
int main() {
// Pointer zum Videospeicher
char *video = (char*)0xB8000;
// String zum Ausgeben
char *hello = "Willkommen";
// 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);
return 0;
}
Und es leuft ^^
Dan habe ich den Kernel aus dem Tut http://lowlevel.brainsware.org/wiki/index.php/C-Kernel_starten
Wenn ich den jedoch erstelle kommt bei mir in GRUB der Fehler das die kein gültiges format wäre.
Kann mir jmd posten wie und wo ich in eine der beiden ASM Files die Magicnumber und das andere da poste muss damit er ihn als Kernel erkennt da ich glaube das es daran liegt und ich gerne mit dem Code aus diesem Tut weiterarbeiten möchte.
Danke für die Antworten im voraus.
PS: Ich glaube auch das sich mingw gut als cross compiler eignet das ich ihn ja für c und c++ verwende aber ich weiss net wie man den umbaut da ich soetwas noch nie gemacht habe und google mir nur halbe sache auspuckt wo alles veraltet oder nur zum teil erklärt ist.
MfG Arktus
-
Dan habe ich den Kernel aus dem Tut http://lowlevel.brainsware.org/wiki/index.php/C-Kernel_starten
Wenn ich den jedoch erstelle kommt bei mir in GRUB der Fehler das die kein gültiges format wäre.
Ja, der ist auch nicht für GRUB, sondern für einen eigenen Bootloader gedacht. Vergiß dieses Tut einfach: Du brauchst dir diese Umstände in den Assemblerdateien nicht machen, das macht alles GRUB für dich. Letztendlich landen ja sowieso beide Beispiele in einem C-Kernel, der Hello World ausgibt - nur ist das mit GRUB etwas kürzer.
-
Achso, GRUB lädt für mich allso den PM und ich muss dan nur noch die GDT basteln ?
Was brauche ich alles für den PM damit ich anfangen kann mir trieber für die Tastatur zu schreiben
-
Schau dir mal den Artikel OS-Dev für Einsteiger (http://lowlevel.brainsware.org/wiki/index.php/OS-Dev_für_Einsteiger) im Wiki an. Du dürftest im Moment relativ genau in der Mitte des Artikels stehen.