在 qemu 上运行 DOS

qemu是一个开源的通用虚拟机,详细的信息可以从网站 http://fabrice.bellard.free.fr/qemu/ 找到。目前支持的目标机和宿主机在 http://fabrice.bellard.free.fr/qemu/status.html

Target CPU

User emulation

System emulation

x86

OK

OK

x86_64

Not supported

OK

ARM

OK

OK

SPARC

OK

OK

SPARC64

Dev only

Dev only

PowerPC

OK

OK

PowerPC64

Not supported

Dev only

MIPS

OK

OK

m68k

Dev only

Dev only

SH-4

Dev only

Dev only

Alpha

Dev only

Dev only

Host CPU

Status

x86

OK

x86_64

OK

PowerPC

OK

Alpha

Testing

Sparc32

Testing

ARM

Testing

S390

Testing

MIPS

Testing

Sparc64

Dev only

ia64

Dev only

m68k

Dev only

1. 安装 qemu

从 debian 安装 qemu 非常容易,只要

sudo apt-get install qemu

安装完成后可以试一试,找一张 liveCD 的 iso 执行

qemu -cdrom "isofilename" -boot d

正常的话,就会看到启动画面,并且可以使用了。

2. 在 qemu 中安装 DOS

2.1. 创建虚拟磁盘

首先要创建虚拟机的硬盘文件,使用 qemu-img

qemu-img create "imgfilename" "size"

比如

qemu-img create c.img 64M

安装 DOS 并不要太多的硬盘,但也最好不要小于 40M 。好像小于 40M 的 fat 分区使用的 ID 与大于 40M 的不同(但都是 fat16),我开始用 10M 的,但总是不能从硬盘启动,不知道是不是这个原因。

qemu 支持多种映像文件的格式,由于文件不大,推荐使用 raw 格式,兼容性好。

2.2. 安装 DOS

根据你的 dos 的安装介质,采用不同的方式,我用的是光盘镜像,使用上面创建的硬盘映像

qemu -hda c.img -cdrom dos.iso -boot d

然后就像平常一样安装就可以了。

3. 与宿主机通信

3.1. qemu 访问宿主机

qemu 支持将宿主机的一个目录作为虚拟机的一个 fat 分区,默认是只读的

qemu c.img -hdb fat:/my_directory

也可以是软驱

qemu c.img -fda fat:floppy:/my_directory

读写的功能处于测试阶段,使用 rw 选项

qemu c.img -hdb fat:rw:/my_directory

What you should never do:

qemu 的官方文档 http://fabrice.bellard.free.fr/qemu/qemu-doc.html

3.2. 在 linux 中使用 qemu 的虚拟磁盘

软盘的映像文件可以直接挂载,但硬盘的就不同了。平常多用文件系统的映像,简单的说,一个文件是一个分区,而 qemu 的是硬盘,一个文件里面有多个分区,不能简单的 mount 。linux 中提供了 losetup 用来 set up and control loop devices 。 具体方法如下。

  1. 将文件关联到 loop device
    losetup /dev/loop0 filename
  2. 使用 fdisk 查看硬盘信息
    fdisk /dev/loop0
    输入 u 切换单位,按 p 显示分区表,比如
    Device Boot      Start         End      Blocks   Id  System
    /dev/hda1   *          63    16390079     8195008+   7  HPFS/NTFS
    这个分区从 63 扇区开始,扇区大小是 512bytes,所以它在 63*512=33256 字节处开始
  3. 重新关联 loop device 先删除
    losetup -d /dev/loop0
    再使用
    losetup -o 33256 /dev/loop0 filename
    然后就可以
    mount /dev/loop0 /mnt
    在 /mnt 中就可以访问这个分区了。


所属分类:我的故事

DosOnQemu (last edited 2008-08-02 16:34:23 by localhost)