Lowlevel
Lowlevel => OS-Design => Thema gestartet von: sataan1337 am 03. July 2009, 11:44
-
moin ;)
zuerstmal - sry falls ich damit hier falsch bin, hab sonst im forum nix zutreffenderes gefunden ^^
mein problem ist folgendes: ich hab mich mal durch paar tutorials gelesen, unter linux hat auch alles wunderbar funktioniert - da ich an meinem laptop allerdings windows habe (unter linux spinnen die wlan-treiber) suche ich jetz seit ewigkeiten eine möglichkeit das ganze unter win zum laufen zu bekommen ;)
habe jetzt nasm und gcc installiert und hänge am erstellen des diskettenimages ;)
wenns nur um den bootloader geht habe ich folgenden befehl aus nem tutorial:
nasm boot.asm -o boot.img -dIMAGE
soweit funktionierts auch - wenn ich jetzt allerdings mehrere dateien im image möchte habe ich (aus nem anderen tutorial) folgenden weg gefunden:
nasm –f bin –o boot.bin boot.asm
nasm -f bin -o kernel.bin kernel.asm
copy boot.bin+kernel.bin blubb.img
=> funktioniert unter linux prima, unter windows scheints erstmal auch zu funktionieren, aber vmware und virtualpc melden das image als fehlerhaft
jetzt meine frage ;) - wie krieg ich das unter windows hin?
hoffe mal dass mir hier jemand nen tipp geben kann ;)
lg, felix
-
Mir fällt jetzt erstmal ein, dass der Bootsektor mit 0xAA55 enden sollte - wobei ich denke, dass das bei dir so ist. Außerdem sollte das Image bestimmt die Größe einer normalen Diskette (also 1440 kB) haben, das ist bei dir vermutlich nicht der Fall. Ich kann mir vorstellen, dass VMware und VirtualPC Images von einer anderen Größe nicht als Diskettenimages erkennen und sie somit als fehlerhaft werten.
Du könntest zur Lösung deinen Kernel entsprechend groß machen, sodass er den Rest der Diskette vollmacht.
Wenn boot.bin 512 Bytes groß ist und sonst nur kernel.bin auf dem Image sein soll, dann solltest du das an kernel.asm anhängen (sollte eigtl. funktionieren):
times db 1474048-($-$$) db 0
Das sollte kernel.bin 1474048 Bytes groß machen, zusammen mit den 512 Bytes des Bootloaders sollten das dann 1474560 Bytes, also 1440 kB sein.
-
daran hatte ich garnich gedachte ^^
funktioniert allerdings noch nicht wirklich - ich hab die vermutung dasses am copy befehl liegen könnte - bin mir aber nicht sicher ^^
das image das vom nasm erstellt wurde ist genau 1474561 byte groß
das image dass ich so bekomme (mit dem times ... befehl in der kernel.asm) liefert folgende werte innen eigenschaften
Größe: 1.40MB (1474561 Bytes)
Größe auf Datenträger: 1.41 MB (1478656 Bytes)
bzw das virtualpc gibt mir auch aus dass das image entweder 720kb oder 1.4mb sein muss
-
Na ja, es ist offensichtlich ein Byte zu groß... Also bei dem Timesbefehl ein Byte abziehen:
times db 1474047-($-$$) db 0
Ist aber merkwürdig, dass ein Byte zu viel ist... Deshalb weiß ich nicht, ob das mit dem Abziehen wirklich funktioniert.
-
nasm –f bin –o boot.bin boot.asm
nasm -f bin -o kernel.bin kernel.asm
copy boot.bin+kernel.bin blubb.img
copy mit dem Parameter /b versehen, sonst kopiert er das als Textdatei und nicht als Binärdatei.
times db 1474047-($-$$) db 0
Das image soll 1474560 Bytes groß sein, dann muss da auch 1474560 stehen, weil das -($-$$) die 512 Bytes für den Bootsektor bereits abzieht.
Das erste db ist da außerdem zuviel. Aber ich denke mal das hätte NASM dann auch gesagt^^
-
Ah, stimmt... Mach ich gern, den Fehler mit dem Doppel-db :-D
Sicher, dass das -($-$$) den Bootloader abzieht? Soweit ich weiß, müssten die Werte bei einem Beispielkernel (wird nach 0x10000 geladen und ist 4242 Bytes groß) folgendermaßen sein:
$$ = 0x10000
$ = 0x10000 + 4242 = 0x11092
Dann gilt:
1474048-($-$$) (oder eben 1474047) = 1474048-(0x11092-0x10000) = 1474048-4242 = 1470318
Das sind dann 1470318+4242 = 1474048 Bytes für kernel.bin, hinzu kommen noch die 512 Bytes des Bootloader.
Zumindest dachte ich, dass das so wäre... Denn nasm weiß beim Assemblieren von kernel.asm gar nichts von boot.bin - sollte es zumindest nicht.
-
Stimmt. Ich hatte irgendwie gedacht, dass der bootloader und kernel in einer Datei sind ...
-
oki danke ;) das mit dem /b wars wohl jetz akzeptiert virtalpc das image zumindest ;)
muss ich nurnoch rausfinden warum er nich macht wasser soll
thx erstmal ;)
*edit: lag am virtualpc - mit vmware gehts ^^
nochmal danke an euch beide ;)
-
http://www.henkessoft.de/OS_Dev/OS_Dev1.htm#mozTocId427538
cmd /c copy /b boot.bin + kernel.bin MyOS.bin
-
Ich dachte wir hätten sogar einen Artikel über das thema in unserer Wiki, oder irre ich mich da mal wieder :-D
-
Verlinke ihn doch einfach nach hier.