web-dev-qa-db-ja.com

コンパイルされたアセンブリコードをUSBデバイスのブートセクタに移動する

私は簡単なオペレーティングシステムを作成し、それをテストしようとしています。 VirtualBoxと8GBのフラッシュドライブをインストールしているので、それらを使用するだけだと思いました。ただし、USBドライブを起動可能にする方法がわかりません。起動可能なISOイメージの作成に関する多くのチュートリアルに従いましたが、VirtualBoxもディスクユーティリティもそれを読み取ることができません。誰かがUSBドライブを起動可能にセットアップするための実証済みの方法を教えてもらえますか?

私が持っているもの

  • 8GBのフラッシュドライブ

  • VirtualBox VM

  • Nasmでコンパイルされたアセンブリコードから作成された.bin。

必要なもの

  • USBデバイスのブートセクタを埋める方法に関するシンプルで明確な情報

  • .binに加えて何かが必要な場合は、正しい方向にナッジします。

既存のコード

;*********************************************
;   Boot1.asm
;       - A Simple Bootloader
;
;   Operating Systems Development Tutorial
;*********************************************

org     0x7c00              ; We are loaded by BIOS at 0x7C00

bits    16                  ; We are still in 16 bit Real Mode

Start:

    cli                 ; Clear all Interrupts
    hlt                 ; halt the system

times 510 - ($-$$) db 0             ; We have to be 512 bytes. Clear the rest of the bytes with 0

dw 0xAA55                   ; Boot Signature

私がフォローしたチュートリアル

http://www.quilime.com/code/bootable_isohttp://www.acm.uiuc.edu/sigops/roll_your_own/http:/ /www.brokenthorn.com/Resources/OSDevIndex.htmlhttp://www.brokenthorn.com/Resources/OSDev1.htmlhttp://www.brokenthorn.com /Resources/OSDev2.htmlhttp://www.brokenthorn.com/Resources/OSDev3.html

3
Justin

一般的な方法は、ddを使用することです。 syslinuxブートローダー からmbr.bin/dev/sdaにインストールする手順は次のとおりです。

dd bs=440 count=1 conv=notrunc if=mbr/mbr.bin of=/dev/sda

ここで、/dev/sdaはターゲットデバイスです。 (ofは「出力ファイル」です。)

これをUSBドライブのデバイス名に置き換えます。

2
mattdm

さて、あなたは本当に最小限のOSまでです。今、あなたはそれを起動するためにある種のマシンを手に入れる必要があります。

起動時に使用するマシン(ラップトップ、VirtualBoxなど)に関係なく、OSをロードして起動するためのコードを含むROM)が必要です。これは通常、BIOSのようなものです。 。これは通常、構成されたブートメディアの ブートセクター をフェッチし、そこで見つかったものを実行します。

したがって、最小限のOSをブートセクターに配置するだけで、すべて問題ありません。 OSが十分にミニマルでない場合、ブートセクターはOSをさらにロードするためのコードを必要とします。

2
michas