Linux

Qemu 配置文件錯誤“無效的參數主機”

  • July 2, 2021

我是 QEMU 的新手,目前正在使用 QEMU 配置文件來了解它是如何工作的。我試圖把我的簡單 QEMU 命令行的所有選項

sudo qemu-system-x86_64 -cpu host -enable-kvm -m 8192 -nic user,host=192.168.0.2,net=192.168.0.2 -nic bridge,br=virbr0 ubuntu.img

在配置文件qemu.cfg中,它是這樣的:

[nic "user"]
host=192.168.0.2
net=192.168.0.2
[nic "bridge"]
br=virbr0 


cpu = host
enable-kvm
m = 8192
ubuntu.img

使用指定的文件執行 QEMUreadconfig我收到以下錯誤

$ sudo qemu-system-x86_64 -readconfig qemu.cfg 
qemu-system-x86_64:qemu.cfg:1: Invalid parameter 'host=192.168.0.2'

如何修復配置文件?

經過數小時的Google搜尋,我沒有找到任何與配置文件語法相關的綜合手冊。所以我查看了原始碼,這是生成的配置文件:

[nic]
type = "user"
host = "192.168.0.2"
net = "192.168.0.2"

[nic]
type = "bridge"
br = "virbr0"

[memory]
size = "8192"

問題中提供的配置中存在一些錯誤:

  1. 空間很重要

"="需要在符號前後插入空格:

  [nic]
  type = "user" #correct

  [nic]
  type="user" #wrong
  1. 找到配置組的正確名稱。

如果配置組名稱不正確,qemu 會列印以下形式的錯誤消息:

There is no option group

在qemu 源碼中很容易找到。之後我們只需要找到添加到的所有配置組

static QemuOptsList *vm_config_groups[48];

該功能void qemu_add_opts(QemuOptsList *list)負責。組的參數nic可以在聲明中找到:

QemuOptsList qemu_nic_opts = {
   .name = "nic",
   .implied_opt_name = "type",
   .head = QTAILQ_HEAD_INITIALIZER(qemu_nic_opts.head),
   .desc = {
       /*
        * no elements => accept any params
        * validation will happen later
        */
       { /* end of list */ }
   },
};

這意味著我在答案中指定的語法。

未回答的問題

我不知道是否有辦法-cpu host -enable-kvm ubuntu.img通過此類配置文件指定其餘選項。查看有效組並沒有產生任何有用的結果。

更新

原來-enable-kvm是通過accel選項組配置如下:

[accel]
accel = "kvm"

引用自:https://unix.stackexchange.com/questions/656098