【发布时间】:2012-04-15 02:27:07
【问题描述】:
我正在玩操作系统开发教程here。但是,由于它基于 Windows 作为开发平台,我想知道是否有等效的软件(或某种方式)来拥有虚拟软驱。
【问题讨论】:
-
呵呵 :) 我知道。但是,我找不到新的教程。它仍然使用 16 位和 32 位。 :(如果你知道的话,请告诉我一些好东西。
标签: operating-system virtual floppy
我正在玩操作系统开发教程here。但是,由于它基于 Windows 作为开发平台,我想知道是否有等效的软件(或某种方式)来拥有虚拟软驱。
【问题讨论】:
标签: operating-system virtual floppy
有一个非常普遍的误解,即简单地安装映像会神奇地模拟硬件。在 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 实际上是一个您可以在文件浏览器中导航并查看的文件。 它是由内核创建的一个抽象文件,用于与实际的软盘驱动器通信。
【讨论】:
<pre>。阅读手册以了解其他格式选项。
虚拟软盘驱动器似乎只在该教程中用于创建 Bochs 可以启动的虚拟磁盘。 Linux 在这方面实际上更加灵活。您需要使用的是loop device。我不知道如何将它与 Bochs 一起使用 - 你需要阅读文档:)
【讨论】: