Hallo,
für eine kommende Lehrveranstaltung an unserer Universität soll ich mich ins Thema "Programmieren von OS" einarbeiten. Habe jetzt auch schon einige Tutorials durch und auch schon in einige Projekte eingelesen (Potatoes, prettyOS, geekOS, pintOS, usw.)
Die Wahl des OS wird wahrscheinlich auf Potatoes fallen (in Ansi C geschrieben, Doku für doxygen, nicht allzu "kompliziert und groß", ...)
Nun habe ich aber das Problem, dass auf meinem StandPC Potatoes beim Booten hängen bleibt.
Hier einmal der Link zu Potatoes:
http://potatoes-project.tk/Wenn ich auf meinem StandPC Potatoes starte (auch, wenn ich die fertige .img Dateien downloade und starte), bleibt er bei "Creating FS" hängen.
Habe das ganze einmal debuggt und bin auf folgenden Fehlerverlauf gestoßen:
create_fs() => init_bmap() => mark_block() => wrt_block() => hd_write_sector() => repoutsw()
Repoutsw ist eine in Assembler (in der Datei src\kernel\io\utils.s) geschrieben Funktion:
repoutsw:
cld
mov ecx, [esp+12] ;value
mov esi, [esp+8] ;source buffer
mov edx, [esp+4] ;dest address
rep outsw
ret
An dieser Stelle "hängt" sich das OS auf. Also er macht an dieser Stelle nicht weiter.
Beim Aufruf der Funktion, wird in der ersten Zeile in ECX 256 geschrieben, weshalb "rep outsw" 256 mal wiederholt wird. Schreibe ich z.b. mit mov ecx, 5 den Wert 5 in das Register, hängt er sich nicht auf. Erst wenn der Wert > 7 wird, hängt er sich auf.
Woran kann das liegen? Kann die Anweisung zu schnell sein? Ich habe auch schon versucht das ganze mit jump-to-label Anweisungen abzuändern und "nop"-code einzufügen, um den IO-Ports mehr Zeit zu geben, nur es hat nicht funktioniert.
Das gleiche Probleme habe ich bei der Anweisung rep insw.
Das Problem habe ich auch schon in osdev.org gepostet, dort konnte aber niemand den wirklichen Fehlergrund finden, deshalb hoffe ich, dass vielleicht hier mir jemanden helfen kann.
Mein StandPC ist ein Dualcore x86, auf dem funktioniert es nicht. Auf meinem Laptop (singlecore x86) funktioniert es. Eine andere Testperson (Ubuntu 11.04 (amd64) Prozessor ist ein Intel Core i7 Q720. ) konnte das OS auch ohne Probleme starten.
Wäre euch sehr dankbar, wenn Ihr mir da helfen könntet. Das OS kann sonst nur sehr schwer verwendet werden, wenn dann z.B.: bei der Hälfte der Studenten der Fehler auftritt und wir nicht wissen, woher er kommt. Und selbst weiß ich leider auch nicht mehr weiter.
lg