8

フロッピー ディスク/仮想フロッピー ディスク/フロッピー イメージの最初のセクタに .bin ファイルを書き込むにはどうすればよいですか?

シンプルな 512 バイトのブートローダーを起動しようとしています。どこでもサイズが「512バイト」と表示されているので、もう大丈夫なはずです。

追加情報:

ブートローダーは文字列を表示するだけで、簡単な組み立てを学んでいます。作業の一部は Windows で行われ、一部はUbuntu 14.04 (Trusty Tahr) で行われました (これが重要な場合)。

ブートローダーのサインがあっても起動しません。

4

3 に答える 3

18

Linux を使用している場合は、DDユーティリティで実行できます。Microsoft Windows 用のバージョンのDDもあります。


一般的な DD の使用法

ゼロで満たされた仮想ディスク イメージを 720K フロッピーのサイズにしたい場合は、次のようにddを使用できます。

dd if=/dev/zero of=disk.img bs=1024 count=720

disk.imgこれにより、サイズが 1024*720 = 737280 バイトのファイルが作成されます。ゼロで埋められた 1.44MB のフロッピー イメージは、次のコマンドで作成できます。

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

仮想フロッピーへのバイナリ イメージの先頭からの書き込みは、次のように実行できます。

dd if=bootload.bin of=disk.img conv=notrunc 

この例では、ファイルを取得し、切り捨てなしでbootload.binディスク イメージ (この場合は呼び出されます) の先頭に配置します ( )仮想ディスク イメージで使用しない場合は、ディスク イメージを書き込み、ブートローダーのサイズに切り詰めます。disk.imgconv=notruncconv=notruncbootload.bin


DDには、ディスクの先頭以外のポイントにジャンプすることにより、ディスク イメージの特定の部分に書き込む機能もあります。これは、特定のセクターに情報 (コード/データ) を配置する必要がある場合に役立ちます。この例は、ディスク イメージの最初の 512 バイト セクタの後にブート ローダーの第 2 ステージを配置するために使用できます。

dd if=stage2.bin of=disk.img bs=512 seek=1 conv=notrunc

bs=512ブロック サイズを 512 に設定します (ほとんどのフロッピー ディスク セクタの典型的なサイズであるため、より簡単になります)。seek=1イメージの先頭を過ぎた最初のブロック (512 バイト) をシークし、ファイルを書き込みますstage2.binDDが終了点でディスク イメージを切り捨てconv=notruncないようにするため、もう一度必要です。stage2.bin

dd if=stage2.bin of=disk.img bs=512 seek=18 conv=notrunc

この例は最後の例に似ていますが、書き込み前に 9216 バイト (512*18) をスキップします。stage2.bin


Linux システムにフロッピーが接続されている (およびルート アクセスがある) 場合は、次のような方法でブートローダーを作成できます。

dd if=bootload.bin of=/dev/fd0 

フロッピーのデバイスはどこ/dev/fd0ですか。/dev/fd0通常、フロッピー ディスク A (存在する場合) であり、/dev/fd1フロッピー ディスク B (存在する場合) です。


DD for Windows

Microsoft Windows で実行している場合は、DDユーティリティのバージョンがここから入手できます。最新のダウンロードはdd-0.6beta3.zipで、推奨される最小バージョンです。古いものにはない機能がいくつかあります。zip ファイルを開いて、Windows パス上の場所に展開するだけです。

于 2015-12-05T17:46:57.570 に答える
-1

ファイルを別のファイルに書き込むには、プログラムを作成できます。次のスニペットは C です。

char buf[512];
int floppy_desc, file_desc;
file_desc = open("xx.bin", O_RDONLY);
read(file_desc, buf, 512);
close(file_desc);

floppy_desc = open("floppy.img", O_RDWR);
lseek(floppy_desc, 512, SEEK_SET);
write(floppy_desc, buf, 512);
close(floppy_desc);
于 2016-06-08T05:29:59.977 に答える