2013-08-31 1 views
0

Je suis en train de bidouiller avec la création d'un propre bootloader (MBR). C'est ma première étape pour mieux comprendre les systèmes d'exploitation.Démarrage de Parallels Virtual Machine avec son propre bootloader écrit sur un fichier Iso

Ma configuration est:

MacBook Air, OsX 10.8.4, Parallels Desktop, Xcode, des outils de ligne de commande XCode, Nasm, LD, gcc, ...

J'ai composé une botte chargeur:

; 
; FpLoader.s 
; 

       bits 16     ; 16-bit Real Mode 
       org  0x7c00    ; Set origin to BIOS boot origin 


; 
; Bootloader entry-code 
; 
Main:   cli       ; Enable interrupts 
       mov  ax, cs    ; Setup stack segments 
       mov  ds, ax 
       mov  es, ax 
       mov  ss, ax 
       sti       ; Enable interrupts 

       mov  si, Message_1  ; Print string 
       call PrintLn 

       mov  si, Message_2  ; Print string 
       call PrintLn 

       call PrintCrLf 
       call PrintCrLf 

       call Reboot 


; 
; Read keypress 
; 
ReadKeypress: 
       mov  ah, 0    ; BIOS function - Wait for and read keyboard 
       int  0x16    ; Call BIOS Keyboard Service 

       ret       ; Return from procedure 


; 
; PrintLn string 
; 
PrintLn: 
       lodsb      ; Load [Si] in Al and increment Si 

       or  al, al    ; Check if end of string reached (Al == 0) 
       jz  .PrintLnEnd 

       mov  ah, 0x0e   ; BIOS function - Print character on screen 
       int  0x10    ; Call BIOS Screen Service 

       jmp  PrintLn    ; Loop 
.PrintLnEnd  call PrintCrLf 


; 
; Print Cr/Lf 
PrintCrLf:  mov  ah, 0x0E   ; BIOS function - Print character on screen 

       mov  al, 0x0D   ; Character to print: Cr 
       int  0x10    ; Call BIOS Screen Service 

       mov  al, 0x0A   ; Character to print: Lf 
       int  0x10    ; Call BIOS Screen Service 

       ret       ; Return from procedure 


; 
; Reboot the machine 
; 
Reboot:   mov  si, AnyKey   ; Print string 
       call PrintLn 
       call ReadKeypress 

       db  0x0ea    ; Sends us to the end of the memory causing reboot 
       dw  0x0000 
       dw  0xffff 


; 
; Data 
; 
       ; Program data 
Message_1  db "Hello World...", 0x0 
Message_2  db "Painted Black bootloader.", 0x0 
AnyKey   db "Press any key to reboot...", 0x0 

       ; Filler bytes 
       times 510 - ($-$$) db 0 

       ; Trailer bytes 
       dw 0xAA55     ;Boot signature 

J'assemblage avec ce code:

nasm -f bin FpLoader.s -o FpLoader.img 
sudo dd if=FpLoader.img of=FpLoader.iso bs=2k 

Lorsque j'essaie de démarrer une machine virtuelle Parallels à partir de FpLoader.iso, il refuse de démarrer, me disant qu'il ne peut pas démarrer à partir de l'iso (configuré comme un CD dans la configuration de Parallels).

Puisque je suis complètement nouveau sur le sujet et que je suis curieux de savoir comment utiliser les outils dont je dispose, j'apprécierais toute aide que vous pourriez m'apporter.

J'ai trouvé un certain nombre de solutions partielles pour Linux, Bochs, ... mais rien ne m'a vraiment orienté dans la bonne direction.

Je ne suis pas rigide à propos du fichier Iso. Si quelqu'un peut me montrer un moyen avec un fichier img, un vrai USB amorçable (dans Parallels Virtual Machine), ou une autre solution (compatible avec ma configuration) pour tester mes développements, ça ira aussi bien.

Merci à l'avance et salutations, PB

+0

Dans le même temps, j'ai trouvé la solution: ** "dd if =/dev/zero of = FpLoader.img bs = 1024 count = 1440" ** et par la suite ** "dd if = FpLoader.bin de = FpLoader.imb bs = 1 compte = 512 conv = notrunc" **. Enfin, connectez une disquette virtuelle à la machine virtuelle et associez cette disquette virtuelle au FpLoader.img créé. –

+0

ressemble à une réponse à une question assez intéressante, vous devriez la mettre en réponse avec toutes les informations pertinentes que vous avez réussi à trouver. –

Répondre

1

Pour être plus étendue sur la solution que j'ai trouvé (utilisant seulement Mac OS X et Parallels Desktop)

Le chargeur de démarrage, bien que la source (FpLoader .s) pourrait être un peu plus élégant (réserver une zone de pile, mettre le sp, ...), c'est ok. La compilation peut être fait avec:

nasm -f bin FpLoader.s -o FpLoader.bin 

Cela devrait vous donner un fichier binaire de 512 octets.

Lors de l'utilisation (éventuellement avec sudo)

dd if=FpLoader.bin of=FpLoader.iso bs=2k 

un fichier iso de 512 octets est créé. Cette iso ne contient pas de seconde, ni de secteurs 'disque' suivants. Je suppose que la vérification de Parallels Desktop vérifie cela et bloque l'utilisation d'un tel fichier iso. Donc, nous avons besoin d'une autre solution: créer un disque vide complet (disquette dans ce cas) sur lequel on écrira le contenu de notre fichier binaire (dans le premier secteur).

Cela peut se faire comme suit:

dd if=/dev/zero of=FpLoader.img bs=1024 count=1440 

diskutil eraseVolume MS-DOS FPLOADER `hdiutil attach -nomount FpLoader.img` 

dd if=FpLoader.bin of=FpLoader.img bs=1 count=512 conv=notrunc" 

La première commande remplit une image de disquette vide de 1,4 Mb, la deuxième commande effaceront le premier secteur avec notre chargeur de démarrage.

Dans Parallels Desktop On peut créer une machine virtuelle aussi bien Ms-Dos avec très peu de ressources:

Memory: 4 Mb 
    Hard disk: 2 Gb 
    Devices: Hard disk and Floppy disk (even Cd drive can be removed) 

Pour être du bon côté, on peut isoler la machine virtuelle à partir de Mac (dans les paramètres de sécurité) . J'ai eu des printscreens des trois étapes suivantes, mais en raison de ma réputation encore faible, je ne peux pas les publier. Désolé pour cela

Le FpLoader.img peut être connecté au lecteur de disquette. Enfin, les paramètres de démarrage peuvent être ajustés pour ne pas perdre de temps à analyser le disque dur pour les secteurs de démarrage.

J'espère que cette description vous donnera assez d'informations pour démarrer si vous voulez développer un système d'exploitation en utilisant un Mac et Parallels.

Cordialement, PB

Questions connexes