Frage von BootingUp, 20

Warum kann virtual box meine .img datei nicht laden wenn der Kernel dabei ist?

Die Fehlermeldung ist folgende:

The image file 'D:\ProgrammInstallationen\NASM\meinOS.img' is inaccessible and is being ignored. Please select a different image file for the virtual floppy drive..

Fehler ID: DvdOrFloppyImageInaccessible Dringlichkeit: Warnung

Der Kernel sieht so aus:

[BITS 32]

[GLOBAL start] start: mov esp, _sys_stack ; ##1 jmp c_kernel_entry

; In den C-Kernel wechseln c_kernel_entry: [EXTERN _c_kernel_main] call _c_kernel_main hlt

; Unser Stack SECTION .bss resb 8192 _sys_stack:

; Hier ist der Multibootheader. Wird gebraucht, um mit GRUB zu booten SECTION .multiboot_data ALIGN 4 multiboot_header: dd 0x1BADB002 ; Magic Nummer dd 0x0 ; Flags dd (-0x1BADB002) ; Prüfsumme

und der Bootloader:

org 0x7C00 ; Unsere Startadresse

; ----------------------------------------- ; Unser Bootloader ; -----------------------------------------

jmp 0x0000:start start: ; Erst brauchen wir einen Stack. cli; Keine Interrupts! mov ax, 0x9000 ; Stackadresse mov ss, ax ; SS = 0x9000 (unser Stack) mov sp, 0 ; SP = 0x0000 (der Stackpointer) sti ; Interrupts zulassen

; Segmentregister initialisieren (für Zugriff auf bootdrv notwendig) mov ax, 0x0000 mov es, ax mov ds, ax

; Bootlaufwerk aus DL speichern mov [bootdrv], dl

;Lade unseren Kernel call load

;Springe zu diesem Kernel mov ax, 0x1000 ; Die Adresse des Programms mov es, ax ; Segmentregister updaten mov ds, ax jmp 0x1000:0x0000

; ---------------------------------------------- ; Funktionen und Variablen ; ----------------------------------------------

bootdrv db 0 ;Das Bootlaufwerk loadmsg db "Laden...",13,10,0

; Einen String ausgeben: putstr: lodsb ; Byte laden or al,al jz short putstrd ; 0-Byte? -> Ende!

mov ah,0x0E ; Funktion 0x0E mov bx,0x0007 ; Attribut-Byte (wird nicht benötigt) int 0x10 ; schreiben jmp putstr ; Nächstes Byte putstrd: retn

; Lade den Kernel vom Bootlaufwerk load: ; Diskdrive reset (Interrupt 13h, 0) mov ax, 0 ; Die gewünschte Funktion (reset) mov dl, [bootdrv] ; Dieses Laufwerk ist gewünscht int 13h ; Den Interrupt ausführen jc load ; Geht nicht? -> Noch mal!

load1: mov ax,0x1000 ; ES:BX = 0x10000 mov es,ax mov bx, 0

; Sektoren lesen (Interrupt 13h, 2) mov ah, 2 ; Funktion 2 (Lesen) mov al, 5 ; Lese 5 Sektoren mov cx, 2 ; Cylinder=0, Sector=2 mov dh, 0 ; Head=0 mov dl, [bootdrv] ; Laufwerk aus Vorgabe int 13h ; ES:BX = Daten vom Laufwerk jc load1 ; Fehler? Noch mal! mov si,loadmsg call putstr ; Meldung ausgeben retn

times 512-($-$$)-2 db 0 ; Dateilänge: 512 Bytes dw 0AA55h ; Bootsignatur

Antwort
von ThHu68,

Hi. Das ist schon eine Weile her. Da steht aber:

Die Image-Datei "D: \ ProgrammInstallationen \ NASM \ meinOS.img 'ist nicht zugänglich und wird ignoriert.

Bitte wählen Sie eine andere Image Datei für das virtuelle Diskettenlaufwerk.

Fehler-ID: DVD oder Disketten-Image unzugänglich - Dringlichkeit: Warnung

Gibt es eine Lösung?

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten