QEmu的-nodefaults不能正常工作

时间:2018-10-20 18:05:21

标签: qemu

我希望QEmu的-nodefaults可以防止创建默认设备,但是我使用不正确或无法正常使用它。

我使用下面的简化命令行QEmu 3.0收到此消息。

消息:

    qemu-system-i386: warning: multiple floppy disk controllers 
    with iobase=0x3f0 have been found
    the one being picked for CMOS setup might not reflect your intent

VM终端中的其他消息:

    could not read the boot disk

命令行:

    qemu-system-i386 \
       -machine type=isapc,usb=no \
       -nodefaults \
       -device isa-vga \
       -blockdev driver=file,node-name=fda-img,filename=fda.img \
       -blockdev driver=raw,node-name=fda,file=fda-img \
       -device isa-fdc,driveA=fda,fdtypeA=144,fdtypeB=none,bootindexA=0

我尝试删除-machine type=isapc,但没有任何改变。

是这样,尽管文档中说:

  

-nodefaults

     

不创建默认设备。通常,QEMU设置默认设备   如串行端口,并行端口,虚拟控制台,监视器设备,VGA   适配器,软盘和CD-ROM驱动器等。 -nodefaults选项将   禁用所有这些默认设备。

我试图在命令行中添加一个--verbose选项,希望它可以请求QEmu创建的完整配置的转储,但是不幸的是这个选项不存在。

我天真的感觉是它坏了,但我还必须考虑到我可能遗漏了一些东西……(因此,这个天真的问题)。

-更新以获取更多详细信息-

尽管无法从命令行转储创建的机器,但我发现监视器中有一个info qtree,它会转储设备树。在下面,它说什么:

    […]
    dev: isa-fdc, id ""
      iobase = 1008 (0x3f0)
      irq = 6 (0x6)
      dma = 2 (0x2)
      driveA = ""
      driveB = ""
      check_media_rate = true
      fdtypeA = "144"
      fdtypeB = "none"
      fallback = "288"
      isa irq 6
      bus: floppy-bus.1
        type floppy-bus
        dev: floppy, id ""
          unit = 0 (0x0)
          drive = "fda"
          logical_block_size = 512 (0x200)
          physical_block_size = 512 (0x200)
          min_io_size = 0 (0x0)
          opt_io_size = 0 (0x0)
          discard_granularity = 4294967295 (0xffffffff)
          write-cache = "auto"
          share-rw = false
          drive-type = "144"
    […]
    dev: isa-fdc, id ""
      iobase = 1008 (0x3f0)
      irq = 6 (0x6)
      dma = 2 (0x2)
      driveA = ""
      driveB = ""
      check_media_rate = true
      fdtypeA = "auto"
      fdtypeB = "auto"
      fallback = "288"
      isa irq 6
      bus: floppy-bus.0
        type floppy-bus
    […]

它将创建两个软盘控制器,而忽略-nodefaults。我还缺少什么吗?

令人惊讶的是,对于我创建的第一个控制器,driveAdriveB是空字符串,而在命令行中分配了driveA

1 个答案:

答案 0 :(得分:0)

我最终认为文档尚不清楚,而-machine none不会创建任何设备。但是,这样做无法添加连接任何设备所需的总线。我想在这种特殊情况下,isapc不能在没有某种设备的情况下创建,并且必须以原样使用作为起点。然后,将在不创建前端的情况下附加后端(如果措辞正确)。

这是示例命令行摘要:

[…]
-blockdev driver=file,node-name=fda-img,filename=dos-6-22/Dos622-1.img \
-blockdev driver=raw,node-name=fda,file=fda-img \
-global isa-fdc.driveA=fda \
[…]

注意-global isa-fdc.driveA=fda,它是此代码段中的重要部分;这就是将后端连接到强制创建的前端的方式。

更新

-machine <model>创建的设备似乎是一种特殊情况,-nodefaults没有考虑;这是实际文档忘记提及的内容。

更新2:

作为文档错误提交,这里:https://bugs.launchpad.net/qemu/+bug/1799768