Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: niknett am 09. January 2010, 11:00

Titel: Grub Error 17 in Qemu
Beitrag von: niknett am 09. January 2010, 11:00
Hi,

ich habe die Tutorials in eurem Wiki durch gemacht. Nun scheitere ich jedoch, den Kernel irgendwo auszuprobieren. Daher habe ich den Wiki über GRUB-Image erstellen gelesen.
In Qemu wurde dann auch GRUB geladen, nur GRUB erkennt meinen Kernel nicht. Es sagt immer: Error 17: Cannot mount selected Partition.
Dann habe ich das Tutorial mal weitergelesen und noch das Menü für GRUB hinzugefügt, doch das übergeht GRUb einfach.
Ich benutzen Linux. Und das Image hat 4 Dateien: /kernel.krn /grub/stage1 /grub/stage2 /grub/menu.lst.
Wenn ich ihn GRUB bin gebe ich ein: kernel /kernel.krn

Was mache ich falsch?
Titel: Re: Grub Error 17 in Qemu
Beitrag von: kevin am 09. January 2010, 11:21
Benutzt du das Image auch tatsächlich als Floppy? Ich glaube nämlich, irgendwie so eine Fehlermeldung gab es, wenn man es als Festplattenimage benutzt. GRUB kann nicht mit unpartitionierten Festplatten umgehen.
Titel: Re: Grub Error 17 in Qemu
Beitrag von: niknett am 09. January 2010, 12:19
ich weiss nicht wie ich es benutze. Ursprünglich wollte ich den kernel direkt laden, mit qemu -kernel kernel.krn.
Das funktioniert aber nicht, da der pc mit dem ich arbeite zu wenig RAM hat. Dann habe ich es mit -no-kqemu ausprobiert, das erkennt er dann aber auch nicht.
Darum gebe ich jetzt einfach: qemu -no-kqemu img, dabei ist img das image. Und dann kommt eben dieser Error. Wie würde ich es als Floppy einbinden?
Titel: Re: Grub Error 17 in Qemu
Beitrag von: bluecode am 09. January 2010, 12:24
-fda img
siehe auch hier (http://www.qemu.org/qemu-doc.html)
Titel: Re: Grub Error 17 in Qemu
Beitrag von: niknett am 09. January 2010, 12:36
Danke es klappt.

Ich habe aber noch eine Frage, warum wird mehr als Hello World! ausgegeben, erst noch einige Zahlen und noch ein: Starting Up...
Ist das von GRUB?
Titel: Re: Grub Error 17 in Qemu
Beitrag von: bluecode am 09. January 2010, 12:57
GRUB macht einige Ausgaben, die natürlich stehen bleiben, wenn du nicht den Bildschirm löscht, d.h. mit 0 oder sowas überschreibst. Aber es könnte natürlich auch sein, dass deine Ausgabefunktion kaputt ist und deswegen weitere Sachen ausgegeben werden. Insofern würde ich dir raten den Bildschirm zu löschen.
Titel: Re: Grub Error 17 in Qemu
Beitrag von: niknett am 09. January 2010, 13:34
Ich schreibe jetzt gerade die Funktionen, nach denen in Teil 4 verlangt wird, zum Bildschirm clearen und Dinge auszugeben.
Wie wichtig ist dabei diese stdarg.h?

Wenn ich ein char in Form des at-Zeichens(@) im C-Quellcode habe, würd das dann auch in das richtige Codepage 437 Zeichen umgewandelt, oder muss ich das in der Funktion erledigen?
Titel: Re: Grub Error 17 in Qemu
Beitrag von: bluecode am 09. January 2010, 14:26
Ich schreibe jetzt gerade die Funktionen, nach denen in Teil 4 verlangt wird, zum Bildschirm clearen und Dinge auszugeben. Wie wichtig ist dabei diese stdarg.h?
Die brauchst du sobald du variable Argumetnlisten (das "..." in der Argumentliste, auch Ellipsis genannt, wie bei pritnf) verwendest.

Zitat
Wenn ich ein char in Form des at-Zeichens(@) im C-Quellcode habe, würd das dann auch in das richtige Codepage 437 Zeichen umgewandelt, oder muss ich das in der Funktion erledigen?
@ gehört zu den ASCII-Zeichen, insofern hast du damit überhaupt kein Problem.
Titel: Re: Grub Error 17 in Qemu
Beitrag von: niknett am 09. January 2010, 14:34
Mal eine vielleicht ganz andere Frage, wie spreche ich die I/O Ports an?
Mit einer outb Funktion?
Aber wie schreibe ich die? Ich möchte nämlich den dämlichen Cursor wegbekommen, weiss aber nicht wie Ich diese Ports anspreche.
Kann mir jemand helfen?
Titel: Re: Grub Error 17 in Qemu
Beitrag von: bluecode am 09. January 2010, 14:43
siehe wiki (http://lowlevel.brainsware.org/wiki/index.php/Inline-Assembler_mit_GCC)
Titel: Re: Grub Error 17 in Qemu
Beitrag von: niknett am 09. January 2010, 15:25
Das heißt die outb Funktion sollte in Assembler geschrieben werden?
Aber ich verstehe immer noch nicht wie ich die Register laden muss, damit ich Ports anspreche und welche Befehle ich überhaupt brauche.
Dazu finde ich leider nirgends etwas.
Titel: Re: Grub Error 17 in Qemu
Beitrag von: Cool-Andy am 09. January 2010, 15:32
Zitat
Das heißt die outb Funktion sollte in Assembler geschrieben werden?

Ja, normalerweise macht man das via Inline-Assembler
Titel: Re: Grub Error 17 in Qemu
Beitrag von: niknett am 09. January 2010, 16:26
Ok, ich habe gesucht und was gefunden out oder outb?
Ich habe nun eine Funktion damit geschrieben:void outb(int port, int data)
{
asm("outb %0,%1" :: "a" (data), "d" (port));
}
Das ist jedoch noch nicht alles so richtig, oder?
Titel: Re: Grub Error 17 in Qemu
Beitrag von: Cool-Andy am 09. January 2010, 16:57
Ich würde auf jeden Fall noch ein "volatile" nach asm hängen:
asm volatile ...
Ich weiß nicht ob man das muss. Bei Inline-Assembler habe ich es mir aber angewöhnt, weil wegen diesem Schlüsselwort bei mir schon viel Zeit für Fehlersuche drauf gegangen ist.  :-D
Titel: Re: Grub Error 17 in Qemu
Beitrag von: niknett am 09. January 2010, 17:04
Also der Fehler liegt bei mir irgendwie daran, dass der Assembler Code falsch ist. Der Compiler meldet: suffix or operands invalid for `out'.
Aber ich verstehe nicht wie die OPeranden aussehen sollen.
Titel: Re: Grub Error 17 in Qemu
Beitrag von: bluecode am 09. January 2010, 18:30
asm volatile("outb %%al, %%dx" :: "d" (port), "a" (value));
Titel: Re: Grub Error 17 in Qemu
Beitrag von: kevin am 09. January 2010, 20:34
Also der Fehler liegt bei mir irgendwie daran, dass der Assembler Code falsch ist. Der Compiler meldet: suffix or operands invalid for `out'.
Aber ich verstehe nicht wie die OPeranden aussehen sollen.
Ich glaube, das Problem ist, dass die Datentypen nicht passen. Also outb hätte gern ein Byte, aber int data sind 32 Bit. Eventuell muss die Portnummer auch genau 16 Bit sein. bluecodes Variante sollte auf jeden Fall funktionieren.