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.img1024*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.img在本例中称为),没有截断 ( conv=notrunc) 如果您不在conv=notrunc虚拟磁盘映像上使用,它将写入bootload.bin并将磁盘映像截断为引导加载程序的大小。


DD还可以通过跳转到磁盘开头以外的点来写入磁盘映像的特定部分。如果您需要在特定扇区中放置信息(代码/数据),这很有用。此示例可用于将引导加载程序的第二阶段放置在磁盘映像的第一个 512 字节扇区之后:

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

bs=512将块大小设置为 512(使其更容易,因为它是大多数软盘扇区的典型大小)。seek=1查找图像开头之后的第一个块(512 字节),然后写入文件stage2.bin。我们conv=notrunc再次需要,因为我们不希望DDstage2.bin结束点截断磁盘映像。

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

此示例与上一个示例类似,但它在写入之前跳过了 9216 个字节(512*18)stage2.bin


如果你有一张软盘连接到 Linux 系统(和 root 访问权限),你可以用类似的东西编写引导加载程序

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

/dev/fd0你的软盘设备在哪里。/dev/fd0通常是软盘 A(如果有)和/dev/fd1软盘 B(如果有)。


适用于 Windows 的 DD

如果您在 Microsoft Windows 上运行,这里有一个可用的DD实用程序版本。最新下载的是dd-0.6beta3.zip,是最低推荐版本。它有一些旧版本没有的功能。只需打开 zip 文件并将其解压缩到 Windows 路径上的某个位置即可。

于 2015-12-05T17:46:57.570 回答
0

这听起来很迷人。

过去,我已经多次写入软盘的前 512 个字节。我想更深入地了解它。

Roadkil 的扇区编辑器可以做到这一点,它可以让您打开屏幕上的前 512 个字节,并将其保存到一个文件中,然后打开一个带有前 512 个字节的文件,并将其保存到软盘中。

http://www.roadkil.net/program.php?ProgramID=24

有趣的是,有一个关于启动东西的经典网站,由与你同名的人,starman.. http://starman.vertcomp.com/asm/mbr/ 虽然软盘是非分区媒体,因此没有 MBR .

我确定我已经从例如 Windows 98 软盘中保存了前 512 个字节,上面说正在启动 Windows 98 然后转到 C 提示符。它可以更改为例如 Windows 95 软盘。如果 3 个核心文件之一出现问题,您知道 XP 可以有一个 3 个文件的引导盘。嗯,它有一个不同的引导扇区。它不是dos启动盘。我记得XP中的format命令和98中的不同。98和DOS一样,它有一个格式/s来制作系统盘。我认为 XP 真的不能。我注意到 Win7 格式命令也不能。尽管在 XP 或 7 中,我认为您可以通过在“我的电脑”中右键单击 A 后勾选一个框来从 GUI 制作一个 dos 启动盘。您可以使用的另一件事是 *nix 风格的 dd 命令。或 ddrescue(它提供了比 dd 更多的信息)。一个类似的程序是 Bart 的 BBIE,它可以获取 CD 的可引导部分并将其解压缩。Nero 曾经(也许现在仍然是)能够获取 512 字节软盘的引导扇区,并基于它创建 CD。所以如果你有一个可引导的 DOS 磁盘,你可以制作一个可引导的 DOS 光盘。它有一个选项,既可以让您浏览到带有该引导记录的映像,也可以将软盘放入并让它提取它。

于 2015-12-04T16:07:46.957 回答
-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 回答