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.