0

独自のブートローダー (MBR) の作成をいじっています。これは、オペレーティング システムをよりよく理解するための最初のステップです。

私の構成は次のとおりです。

MacBook Air、OsX 10.8.4、Parallels Desktop、Xcode、XCode コマンド ライン ツール、Nasm、LD、gcc、...

ブートローダーを作成しました:

;
;  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

私はこのコードを次のように組み立てています:

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

FpLoader.iso から Parallels Virtual Machine を起動しようとすると、起動を拒否し、iso (Parallels 構成で CD として構成されている) からは起動できないというメッセージが表示されます。

私はこのトピックにまったく慣れていないため、利用可能なツールをどのように使用すればよいか戸惑っています。ご協力いただければ幸いです。

Linux、Bochs などの部分的な解決策をいくつか見つけましたが、正しい方向に導くものは何もありませんでした。

私は Iso ファイルについて厳格ではありません。私の開発をテストするための img ファイル、実際の起動可能な USB (Parallels Virtual Machine 内)、またはその他のソリューション (私の構成と互換性がある) を使用する方法を誰かが教えてくれれば、それも問題ありません。

よろしくお願いします、PB

4

1 に答える 1

1

私が見つけたソリューションをより広範にするために(Mac OSxとParallels Desktopのみを使用)

ソース (FpLoader.s) はもう少しエレガント (スタック ゾーンの予約、sp の設定など) である可能性がありますが、ブート ローダーは問題ありません。コンパイルは次の方法で実行できます。

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

これにより、512 バイトのバイナリ ファイルが作成されます。

使用時(最終的にsudoで)

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

512 バイトの iso ファイルが作成されます。この iso には、2 番目のセクターも次の「ディスク」セクターも含まれていません。Parallels Desktop の検証でこれがチェックされ、そのような iso ファイルの使用がブロックされると思います。

したがって、別の解決策が必要です。空のディスク全体 (この場合はフロッピー) を作成し、そこにバイナリ ファイルの内容を (最初のセクターに) 書き込みます。

これは次のように行うことができます。

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"

最初のコマンドは 1.4 Mb の空のフロッピー イメージをいっぱいにし、2 番目のコマンドは最初のセクタをブート ローダーで上書きします。

Parallels Desktop One 内で、非常に少ないリソースで Ms-Dos に似た仮想マシンを作成できます。

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

安全のために、仮想マシンを Mac から分離することができます (セキュリティ設定で)。以下の3つのステップのプリントスクリーンがありましたが、評判がまだ低いため、公開できません。そのために残念

FpLoader.img は、フロッピー ドライブに接続できます。

最後に、ブート セクタのハードディスクのスキャンに時間がかからないように、ブート設定を調整できます。

Mac と Parallels を使用して OS を開発する場合、この説明が十分な情報を提供してくれることを願っています。

よろしく、PB

于 2013-08-31T19:54:55.817 に答える