Autor Thema: diskettenimage erstellen unter windows  (Gelesen 8270 mal)

sataan1337

  • Beiträge: 3
    • Profil anzeigen
Gespeichert
« 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

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #1 am: 03. July 2009, 12:26 »
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 0Das sollte kernel.bin 1474048 Bytes groß machen, zusammen mit den 512 Bytes des Bootloaders sollten das dann 1474560 Bytes, also 1440 kB sein.

sataan1337

  • Beiträge: 3
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 03. July 2009, 12:51 »
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

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #3 am: 03. July 2009, 13:00 »
Na ja, es ist offensichtlich ein Byte zu groß... Also bei dem Timesbefehl ein Byte abziehen:
times db 1474047-($-$$) db 0Ist aber merkwürdig, dass ein Byte zu viel ist... Deshalb weiß ich nicht, ob das mit dem Abziehen wirklich funktioniert.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 03. July 2009, 13:34 »
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^^
Dieser Text wird unter jedem Beitrag angezeigt.

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #5 am: 03. July 2009, 13:49 »
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.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 03. July 2009, 13:53 »
Stimmt. Ich hatte irgendwie gedacht, dass der bootloader und kernel in einer Datei sind ...
Dieser Text wird unter jedem Beitrag angezeigt.

sataan1337

  • Beiträge: 3
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 03. July 2009, 14:10 »
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 ;)
« Letzte Änderung: 03. July 2009, 14:15 von sataan1337 »

ehenkes

  • Gast
Gespeichert
« Antwort #8 am: 21. July 2009, 23:04 »
http://www.henkessoft.de/OS_Dev/OS_Dev1.htm#mozTocId427538
cmd /c copy /b boot.bin + kernel.bin MyOS.bin

matheguru

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 22. July 2009, 10:15 »
Ich dachte wir hätten sogar einen Artikel über das thema in unserer Wiki, oder irre ich mich da mal wieder  :-D
Hacker zu sein bedeutet mehr, als sich nur damit auseinander zu setzen, es ist eine Lebenseinstellung

ehenkes

  • Gast
Gespeichert
« Antwort #10 am: 24. July 2009, 13:22 »
Verlinke ihn doch einfach nach hier.

 

Einloggen