operating-system - Linux 中的虚拟软盘驱动器

标签 operating-system virtual floppy

<分区>

我在玩操作系统开发教程 here .但是,由于它是基于 Windows 作为开发平台,我想知道是否有等效的软件(或某种方式)来拥有虚拟软驱。

最佳答案

有一个非常普遍的误解,即简单地安装一个图像就可以神奇地模拟硬件。在 Linux 中使用 mount 命令挂载文件系统镜像只会将该镜像中的文件显示在您将其挂载到的目录中。没有软盘驱动器的仿真。我不知道适用于 Linux 的任何软盘模拟器。请阅读这个线程,尤其是我的帖子,目前在线程的末尾,简单地解释了安装与仿真:http://forum.osdev.org/viewtopic.php?f=1&t=21589 .

请注意,QEMU、Bochs 和 VirtualBox 确实会为虚拟机模拟软盘驱动器。那是硬件的管理程序级仿真。我不知道 Linux 的软盘驱动器的任何内核级仿真。

但是您可以使用 dd、wxHex、mount 命令和一些虚拟化和/或机器仿真软件(例如 QEMU、Bochs 或 VirtualBox)完成您想做的事情。

镜像软盘示例(某些命令可能需要 root 权限,在前面加上“sudo”或拖放到 通过“su”获得 root 权限的 root shell):

dd if=/dev/floppy0 of=$HOME/images/my_floppy_image

然后做:

openssl md5 $HOME/images/my_floppy_image

获取图像的 md5 哈希值,然后将图像再次复制到第二个文件:

dd if=/dev/floppy0 of=$HOME/images/my_floppy_image2

散列第二张图片,并确保它们匹配。

您可以使用 wxHex 打开图像进行十六进制编辑。如果您以 root 身份运行 wxHex,它甚至可以打开和编辑硬件抽象文件,直接进入软盘(打开/dev/floppy0 或其他)。

通过环回设备挂载镜像:

sudo mount -o loop $HOME/images/my_floppy_image /media/floppy

软盘或镜像的第一个扇区(前 512 字节)是 VBR(卷引导记录),应该包括引导加载程序。由于这在技术上是文件系统的一部分,因此您可以从仅安装文件系统的环回设备访问它。如果您改为通过环回设备在硬盘镜像中挂载一个分区,并且引导加载程序位于 MBR 中(在已挂载分区的文件系统之外),则引导加载程序将无法从环回设备,同样,它只挂载一个文件系统。

仅获取 VBR:

dd if=/dev/floopy0 of=$HOME/images/my_floppy_VBR bs=512 count=1

当然,您可以反转任何 dd 操作,将镜像转换为软盘或其他镜像。

将图像吹到软盘上:

dd if=$HOME/images/my_floppy_image of=/dev/floppy0

只将 VBR 吹到软盘上:

dd if=$HOME/images/my_floppy_VBR of=/dev/floppy0 bs=512 count=1

或者如果上面的内容破坏了你不想破坏的东西,也许是这样的:

dd if=$HOME/images/my_floppy_VBR of=/dev/floppy0 bs=440 count=1

该做的就做吧。

从图像中获取 VBR:

dd if=$HOME/images/my_floppy_image of=$HOME/images/my_floppy_VBR bs=512 count=1

从图像中获取前 440 个字节:

dd if=$HOME/images/my_floppy_image of=$HOME/images/my_floppy_first_440 bs=440 count=1

从上面的示例中,您应该能够弄清楚如何只吹 VBR 或 仅将给定源(软盘或图像)的前 440 个字节添加到图像上,编辑 图片。 “if”代表“输入文件”,“of”代表“输出文件”。请记住,即使 真正的软盘(与镜像相对)由文件(如/dev/floppy0)引用。 是的,/dev/floppy0 实际上是一个您可以导航到并在文件浏览器中查看的文件。 它是由内核创建的抽象文件,用于与实际的软盘驱动器对话。

关于operating-system - Linux 中的虚拟软盘驱动器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10159058/

相关文章:

windows - 是否有适用于 Windows 的免费或开源虚拟内存驱动器?

c# - 虚函数在 C# 和 Java 中如何工作?

operating-system - 制作定制版 mikeOS 的可启动闪存驱动器

boot - 在 QEMU 中使用多重引导和软盘

java - 是否可以将 Shift、Ctrl、Alt 或 Win 键之一用于其他目的,例如键入文本?

c - inotify_add_watch 用于几个掩码

c++ - 使用抽象类实现派生类的元素栈

x86 - 使用 int 13h 读取比轨道上更多的扇区

linux - 进程和线程在 Linux 中有什么区别?

c# - 在 C# 中确定操作系统和处理器类型