Eigenes OS?
-
Ich habe momentan das Problem, das zwei Sektoren anstelle von einem Sektor geschrieben wird. Wo wird die Zahl der Sektoren bezüglich DMA genau gesteuert?
http://lowlevel.brainsware.org/forum/index.php?topic=2244.0
http://www.henkessoft.de/OS_Dev/Downloads/100.zip
Vielleicht kann jemand helfen? Die Daten werden via DMA gelesen/geschrieben (0x1000 als Puffer).
-
Erhard Henkes schrieb:
Ich habe momentan das Problem, das zwei Sektoren anstelle von einem Sektor geschrieben wird.
teste die read/write funktionen separat. wird wirklich nur ein sektor (512 bytes) beschrieben und gelesen (benutze ein externes programm, z.b. 'nen disk-editor wie z.b. 'winhex' zur prüfung)?
falls nicht, schau im user manual des DMA-controllers nach. vielleicht transfererierst du 16-bit words anstelle von bytes oder sowas.
-
..
-
Erhard Henkes schrieb:
Klappt aber nicht lückenlos. Es werden weniger als 18 Sektoren geschrieben.
Vermutlich ein "Kantenproblem". Folgender Ausdruck :
#define FLPY_SECTORS_PER_TRACK 18 void flpydsk_write_sector_imp(unsigned char head, unsigned char track, unsigned char sector) { (...) flpydsk_send_command( ( ( sector + 1 ) >= FLPY_SECTORS_PER_TRACK ) ? FLPY_SECTORS_PER_TRACK : sector + 1 ); (...) }
liefert für "sector = 17" und "sector = 18" das gleiche Ergebnis.
Woraus folgt, der Ausdruck unterscheidet nicht zwischen "sector == 17" und "sector == 18". (Und "sector == 1" wird nicht zur Kenntnis genommen).
-
Ja, genau da liegt der Hase im Pfeffer. Diese Zeile ist nicht zielführend. Wurde von mir durch folgendes ersetzt:
flpydsk_send_command( 18 );
Nun werden 18 Sektoren geschrieben (fkt. auch mit anderen Zahlen), allerdings muss man beim Schreiben genau an einem Track-Anfang (gemäß LBA) beginnen: 0, 18, 36, ...
Ansonsten wird nämlich auch noch dort jeweils geschrieben. Merkwürdiger Effekt.
-
Nun habe ich das Thema langsam im Griff, durch FDC und DMA nicht ganz übersichtlich. Hier das Analysieren des Stammverzeichnisses einer Diskette:
http://www.henkessoft.de/OS_Dev/OS_Dev3.htm#mozTocId610721
http://www.henkessoft.de/OS_Dev/Downloads/104.rarErste Rückmeldungen: Läuft offenbar nicht auf allen PCs, aber in Bochs. Für Tipps wäre ich dankbar.
Hier einige gute Links zu dem Thema:
http://www.isdaman.com/alsos/hardware/fdc/floppy.htm
http://lowlevel.brainsware.org/wiki/index.php/FDC#Data_Address_Mark
http://www.brokenthorn.com/Resources/OSDev20.html
http://www.eit.lth.se/fileadmin/eit/courses/eit015/FAT12Description.pdfWenn jemand Lust hat, mich zu unterstützen, würde mich freuen. Es ist jetzt viel Detail-Arbeit angesagt. Ich würde gerne mit engagierten Leuten ohne Zeitdruck eine eigene OS-Community aufbauen:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-247814.htmlIch denke, das Thema OSDEV im leicht fortgeschrittenen Stadium passt nicht mehr richtig in dieses Forum. Die Diskussionen werden unspezifisch. Die anstehenden Aufgaben erfordern Detailwissen über PrettyOS, C, Assembler, Erfahrung mit der Toolchain, konstruktive Kreativität, analytisches Vorgehen, Tiefgang und generell Lust am Thema OS-Development (viel Arbeit, wenig Belohnung).
-
@Erhard: Erstmal ein für die großartigen Tutorials, sehr interessant und informativ.
Nun habe ich aber folgendes Problem:
Ich versuche zur Zeit einige der Beispiele aus deinem Tutorial auf einem Ubuntu-System über Bochs zum Laufen zu bekommen. Allerdings hagelt es bei mir immer wieder "Boot failed: could not read the boot disk" beim Laden meiner selbstgenerierten MyOS.bin-Datei.
Die nasm-Befehle sind ja praktisch die gleichen wie unter Windows, allerdings verwende ich statt dem copy /b-Befehl ein "cat boot.bin kernel.bin>MyOS.bin". Der Pfad zur OS.bin-Datei ist in der Konfigurationsdatei auch korrekt gesetzt. Die Quelldateien entsprechen 1:1 denen des ersten Beispiels im Protected-Mode-Abschnitt.Benutze ich das bereits vorgefertigte Sourcepaket(inkl. der MyOS.bin), so gibt es in Bochs keinerlei Probleme beim Booten. Könnte es sein, dass hier der cat-Aufruf das Problem verursacht? Denn beim generieren des allerersten Beispiels, das jediglich aus der Datei kernel.bin bestand, gab es auch noch keinerlei Probleme.
-
Ich benutze auch die ganze Zeit Ubuntu und habe keinerlei Probleme gehabt. Allerdings nehme ich QEmu, da der QEmu-Launcher meiner Meinung nach etwas komfortabler ist wenn man öfters mal etwas an den Einstellungen ändert.
Ich hab das mit cat in zwei Befehlen gemacht "cat boot.bin > MyOS" und "cat ckernel.bin >> MyOS" aber sollte auf das gleiche hinauslaufen.
-
Hi,
das Problem hat sich mittlerweile erledigt. Ich habe beim Aufruf von nasm einfach mal die Option -O32 weggelassen und schon funktionierte es.
-
Erstmal ein für die großartigen Tutorials, sehr interessant und informativ.
Herzlichen Dank für das positive Feedback. Freut mich, wenn das Thema OS Development etwas belebt wird.
Kleines Problem: aktueller 1st stage BL startet bei einigen PC nicht:
http://www.brokenthorn.com/forums/viewtopic.php?f=15&t=1235Idee? Würde gerne meinen Aufbau weitgehend beibehalten.
Wer Probleme beim Booten hat, nimmt bis zur Lösung diesen 1st stage BL als Austausch in den aktuellen Versionen ab Nr. 95: http://www.henkessoft.de/OS_Dev/Downloads/Version_94_stage1_bootloader.zip
-
Hallo,
Erhard Henkes schrieb:
Kleines Problem: aktueller 1st stage BL startet bei einigen PC nicht...
ein Blick in den Quellcode von grub, z.B. aus boot.S:
/*
* This is a workaround for buggy BIOSes which don't pass boot
* drive correctly. If GRUB is installed into a HDD, check if
* DL is masked correctly. If not, assume that the BIOS passed
* a bogus value and set DL to 0x80, since this is the only
* possible boot drive. If GRUB is installed into a floppy,
* this does nothing (only jump).
*/oder
/*
* Determine the hard disk geometry from the BIOS!
* We do this first, so that LS-120 IDE floppies work correctly.
*/lässt erahnen, warum es immer mindestens einen problematischen Rechner geben wird...
-
EDIT: Boot-Problem zunächst wieder gelöst, lag bei dem einen PC am Stack.
FDC funktioniert leider auch nicht überall. Manche melden beim Lesen der Root Directory einfach Funkstille zurück. Schwieriges Thema.
-
Hier könnte sich eine neue OS Community bilden, falls jemand von Anfang an dabei sein möchte:
http://www.c-plusplus.net/forum/viewtopic-var-p-is-1772434.html#1772434
Wichtig: Kein Stress oder Zeitdruck! Spaß sollte im Vordergrund stehen.
-
Der Start hat geklappt. Wollte mich bei allen bedanken, die mich auf diesem Weg bisher unterstützten. Nun ist m.E. der richtige Zeitpunkt, um noch dazu zu stoßen, egal ob auf Basis Windows oder Linux.
-
Hallo Erhard,
ich habe ja kein eingebautes Disketten-Laufwerk und habe gerade folgendes ausprobiert:
- ein Floppy Driver USB genommen, angeschlossen - scheint noch zu funktionieren
- damit eine Diskette formatiert - ja, ich habe bei mir noch eine Diskette gefunden:mkfs.msdos -F 12 -I /dev/sdc
- Dateien boot2.sys und ckernel.sys (diese habe ich ja am Montag kompilieren können) ins Wurzelverzeichnis der Diskette kopiert und so sieht es aus:
drwxrwxrwx 2 alex root 16384 1. Jan 1970 .
drwxr-xr-x 3 root root 4096 7. Okt 19:04 ..
-rwxr-xr-x 1 alex root 912 7. Okt 18:54 boot2.sys
-rwxr-xr-x 1 alex root 34036 7. Okt 18:54 ckernel.sys- auf einen USB Stick habe ich mit dd die boot.bin kopiert
- System neugestartet und vom USB Stick gestartet, mein BIOS kann es, wie es aussiehtNun kommt folgende Ausgabe:
Loading Second Stage Bootloader
**************
BOOT2.SYS MISSINGHeisst das, mein BIOS hat vom USB Stick gestartet und hat erkannt, dass es einen Disketten-USB-Adapter mit einer Diskette drin gibt - nur findet die BOOT2.SYS nicht?
-
Ganz genau, er hat gebootet! Er verwendet für das Suchen/Nachladen des second stage Bootloaders das übliche Disketten-Format FAT12.
..
-
..
-
abc.w schrieb:
Nun kommt folgende Ausgabe:
Loading Second Stage Bootloader
**************
BOOT2.SYS MISSINGHeisst das, mein BIOS hat vom USB Stick gestartet und hat erkannt, dass es einen Disketten-USB-Adapter mit einer Diskette drin gibt - nur findet die BOOT2.SYS nicht?
Laut "boot.asm" (hab leider nur die "104"-Version, könnte also falsch sein meine Vermutung) heißt es eher, daß die "boot.bin" die "BOOT2.SYS" auf dem USB-Stick gesucht hat. Starte mal "vollständig" vom USB-Diskettenlaufwerk.
-
+gjm+ schrieb:
...Starte mal "vollständig" vom USB-Diskettenlaufwerk.
Ausprobiert, geht nicht. Keine Ausgaben, BIOS geht dann weiter und bootet von der Festplatte...
-
..