| Zeile 1: | Zeile 1: | ||
| − | In diesem Tutorial werde ich beschreiben wie man einen in [[C]] programmierten [[Kernel]] mithilfe von [[ | + | In diesem Tutorial werde ich beschreiben wie man einen in [[C]] programmierten [[Kernel]] mithilfe von [[GRUB]] bootet. |
== Hinweis für Windowsianer == | == Hinweis für Windowsianer == | ||
| Zeile 42: | Zeile 42: | ||
FLAGS equ 0 | FLAGS equ 0 | ||
| − | MAGIC equ 0x1BADB002 ; Magicnumber - Erkennungsmerkmal für | + | MAGIC equ 0x1BADB002 ; Magicnumber - Erkennungsmerkmal für GRUB |
CHECKSUM equ -(MAGIC + FLAGS) ; Checksum | CHECKSUM equ -(MAGIC + FLAGS) ; Checksum | ||
| Zeile 64: | Zeile 64: | ||
* Die Flags können geändert werden, am besten schaut man sich die [[Multiboot]]-Spezifikation an. | * Die Flags können geändert werden, am besten schaut man sich die [[Multiboot]]-Spezifikation an. | ||
* Den Stack kann man natürlich an eine beliebige Stelle setzen, aber an der 2MB-Grenze wird er uns nicht stören. | * Den Stack kann man natürlich an eine beliebige Stelle setzen, aber an der 2MB-Grenze wird er uns nicht stören. | ||
| − | * Es wird die Adresse der [[Multiboot]]-Structure nicht umsonst an den C-Kernel übergeben. Am besten liest man so ziemlich am Anfang des Kernels die Informationen aus ihr. In der [[Multiboot]]-Structure steht z.B wie viel Speicher der Rechner hat, oder welche Module von | + | * Es wird die Adresse der [[Multiboot]]-Structure nicht umsonst an den C-Kernel übergeben. Am besten liest man so ziemlich am Anfang des Kernels die Informationen aus ihr. In der [[Multiboot]]-Structure steht z.B wie viel Speicher der Rechner hat, oder welche Module von GRUB mitgeladen wurden. |
== Zusammenbauen == | == Zusammenbauen == | ||
| Zeile 120: | Zeile 120: | ||
Wenn man später mehr Dateien hat, können diese natürlich auch dazugelinkt werden. Man sollte den fertigen Kernel jetzt in einer Datei namens ''kernel.bin'' haben. | Wenn man später mehr Dateien hat, können diese natürlich auch dazugelinkt werden. Man sollte den fertigen Kernel jetzt in einer Datei namens ''kernel.bin'' haben. | ||
| − | == | + | == GRUB-Image erstellen == |
| − | Wir müssen jetzt natürlich noch ein Disketten-Image erstellen und dann [[ | + | Wir müssen jetzt natürlich noch ein Disketten-Image erstellen und dann [[GRUB]] und unseren [[Kernel]] draufladen. |
=== Floppy-Image erstellen === | === Floppy-Image erstellen === | ||
| − | Wir erstellen uns erstmal ein Floppy-Image und formatieren es mit [[ext2]]. Es können auch andere [[Dateisysteme]] benutzt werden, z.B [[FAT]], man muss nur drauf achten, dass [[ | + | Wir erstellen uns erstmal ein Floppy-Image und formatieren es mit [[ext2]]. Es können auch andere [[Dateisysteme]] benutzt werden, z.B [[FAT]], man muss nur drauf achten, dass [[GRUB]] dieses [[Dateisystem]] unterstützt. |
Mit ''dd'' erzeugen wir ein 1,44MB großes Floppy-Image: | Mit ''dd'' erzeugen wir ein 1,44MB großes Floppy-Image: | ||
| Zeile 138: | Zeile 138: | ||
$ cp kernel.bin floppy/ | $ cp kernel.bin floppy/ | ||
| − | [[ | + | [[GRUB]] muss auch noch drauf. Hierzu legen wir einen Ordner namens ''grub'' auf der Diskette an und kopieren ''stage1'' und ''stage2'' aus ''/boot/grub'' auf die Diskette. |
$ mkdir floppy/grub | $ mkdir floppy/grub | ||
$ cp /boot/grub/stage1 floppy/grub | $ cp /boot/grub/stage1 floppy/grub | ||
$ cp /boot/grub/stage2 floppy/grub | $ cp /boot/grub/stage2 floppy/grub | ||
| − | Wir brauchen natürlich noch eine | + | Wir brauchen natürlich noch eine GRUB-Konfigurationsdatei. Diese sollte folgendermaßen aussehen: |
default 0 | default 0 | ||
timeout 10 | timeout 10 | ||
| Zeile 154: | Zeile 154: | ||
Jetzt können wir das Floppy-Image schon wieder unmounten | Jetzt können wir das Floppy-Image schon wieder unmounten | ||
$ umount floppy/ | $ umount floppy/ | ||
| − | aber | + | aber GRUB muss noch in den Bootsektor |
$ /usr/sbin/grub | $ /usr/sbin/grub | ||
Und dann folgendes eingeben: | Und dann folgendes eingeben: | ||
| Zeile 162: | Zeile 162: | ||
quit | quit | ||
| − | Fertig ist unser | + | Fertig ist unser GRUB-Image! Man kann es jetzt noch mit |
$ dd if=floppy.img of=/dev/fd0 | $ dd if=floppy.img of=/dev/fd0 | ||
auf eine Floppydisk kopieren und damit booten. Wenn alles klappt seht ihr "Hello World" auf dem Bildschirm. | auf eine Floppydisk kopieren und damit booten. Wenn alles klappt seht ihr "Hello World" auf dem Bildschirm. | ||
| Zeile 178: | Zeile 178: | ||
* [[GRUB-Image erstellen]] | * [[GRUB-Image erstellen]] | ||
* [[Multiboot]] | * [[Multiboot]] | ||
| − | * [[ | + | * [[GRUB]] |
| − | * [[ | + | * [[GRUB auf CD]] |
[[Kategorie:Tutorials]] | [[Kategorie:Tutorials]] | ||