本文由 AI 翻译(ChatGPT-4)完成,并由作者进行人工校对。如有任何问题或建议,欢迎联系我。联系方式:jelin-sh@outlook.com。
bash
qemu-system-x86_64 [选项] [磁盘镜像]
磁盘镜像是用于IDE硬盘0的原始硬盘镜像。一些目标系统不需要磁盘镜像。
当处理包含逗号的任意字符串作为选项参数时,如"file=my,file"和"string=a,b",需要多写一个逗号。例如,"-fw_cfg name=z,string=a,b"将被解析为"-fw_cfg name=z,string=a,b"。
标准选项
-h
显示帮助信息并退出
-version
显示版本信息并退出
-machine [type=]name[,prop=value[,...]]
通过名称选择模拟的机器。使用-machine help
列出可用的机器。
对于旨在支持跨版本实时迁移兼容性的架构,每个版本将引入新的版本化机器类型。例如,2.8.0版本为x86_64/i686架构引入了"pc-i440fx-2.8"和"pc-q35-2.8"机器类型。
为了允许从QEMU版本2.8.0到QEMU版本2.9.0的实时迁移,2.9.0版本必须支持"pc-i440fx-2.8"和"pc-q35-2.8"机器类型。为了允许用户在升级时跳过多个中间版本进行实时迁移,新的QEMU版本将支持多个先前版本的机器类型。
支持的机器属性有:
-
accel=accels1[:accels2[:...]]
用于启用加速器。根据目标架构,可能可用的加速器有kvm、xen、hvf、nvmm、whpx或tcg。默认情况下使用tcg。如果指定了多个加速器,当前一个加速器初始化失败时将使用下一个加速器。
-
vmport=on|off|auto
启用VMWare IO端口的模拟,用于vmmouse等。auto表示根据accel选择值。对于accel=xen,默认值为off,否则默认值为on。
-
dump-guest-core=on|off
在核心转储中包含客体内存。默认值为on。
-
mem-merge=on|off
启用或禁用内存合并支持。当主机支持此功能时,该特性会在VM实例之间去重相同的内存页(默认启用)。
-
aes-key-wrap=on|off
启用或禁用s390-ccw主机上的AES密钥包装支持。此功能控制是否创建AES包装密钥以允许执行AES加密功能。默认值为on。
-
dea-key-wrap=on|off
启用或禁用s390-ccw主机上的DEA密钥包装支持。此功能控制是否创建DEA包装密钥以允许执行DEA加密功能。默认值为on。
-
nvdimm=on|off
启用或禁用NVDIMM支持。默认值为off。
-
memory-encryption=
使用的内存加密对象。默认值为none。
-
hmat=on|off
启用或禁用ACPI异构内存属性表(HMAT)支持。默认值为off。
-
memory-backend='id'
用于替代传统的
-mem-path
和mem-prealloc
选项。允许使用内存后端作为主RAM。例如:bash-object memory-backend-file,id=pc.ram,size=512M,mem-path=/hugetlbfs,prealloc=on,share=on -machine memory-backend=pc.ram -m 512M
迁移兼容性说明:
-
对于需要与旧QEMU(<5.0)进行迁移的情况,应使用由机器类型(通过
query-machines
QMP命令可获取)广告的'default-ram-id'作为后端id。 -
对于4.0及更早的机器类型,用户应在迁移至/从旧QEMU(<5.0)时使用
x-use-canonical-path-for-ramblock-id=off
后端选项。例如:
bash-object memory-backend-ram,id=pc.ram,size=512M,x-use-canonical-path-for-ramblock-id=off -machine memory-backend=pc.ram -m 512M
-
-
cxl-fmw.0.targets.0=firsttarget,cxl-fmw.0.targets.1=secondtarget,cxl-fmw.0.size=size[,cxl-fmw.0.interleave-granularity=granularity]
定义一个CXL固定内存窗口(CFMW)
它们是系统中主机物理地址(HPA)的区域,可能跨一个或多个 CXL 主桥交错。系统软件将特定设备分配到这些窗口中,并在启用内存设备之前,在根端口、交换机端口和设备中配置下游的主机管理设备内存(HDM)解码器,以满足交错要求。
targets.X=target
:提供到 CXL 主桥的映射,可以通过 -device 项中的 id 进行标识。当固定内存窗口表示交错内存时,需要多个条目来指定所有目标。X 是从 0 开始的目标索引。size=size
:设置 CFMW 的大小。必须是 256MiB 的倍数。该区域将对齐到 256MiB,但位置依赖于平台和配置。interleave-granularity=granularity
:设置交错粒度。默认值为 256(字节)。仅支持 256、512、1k、2k、4k、8k 和 16k 的粒度。
例如:
bash-machine cxl-fmw.0.targets.0=cxl.0,cxl-fmw.0.targets.1=cxl.1,cxl-fmw.0.size=128G,cxl-fmw.0.interleave-granularity=512
sgx-epc.0.memdev=@var{memid},sgx-epc.0.node=@var{numaid}
定义一个SGX EPC部分。
-cpu model
选择CPU模型(使用-cpu help
查看列表和附加功能选择)
-accel name[,prop=value[,...]]
用于启用加速器。根据目标架构的不同,可用的加速器包括kvm、xen、hvf、nvmm、whpx或tcg。默认情况下使用tcg。如果指定了多个加速器,初始化失败时将使用下一个加速器。
-
igd-passthru=on|off
当使用Xen时,此选项控制是否可以将英特尔集成显卡设备透传到虚拟机(默认值=off)。
-
kernel-irqchip=on|off|split
控制KVM内核中断控制器支持。默认情况下是完全加速中断控制器。在x86架构上,split irqchip减少了内核攻击面,但非MSI中断的性能会有所降低。除非用于调试目的,不推荐完全禁用内核中断控制器。
-
kvm-shadow-mem=size
定义KVM影子MMU的大小。
-
one-insn-per-tb=on|off
使TCG加速器在每个翻译块中仅放置一条访客指令。这会大大降低仿真速度,但在某些情况下可能有用,例如分析由
-d
选项生成的日志时。 -
split-wx=on|off
控制TCG代码生成缓冲区的split w^x映射的使用。某些操作系统需要启用此功能,在这种情况下默认开启。在其他操作系统上,此功能默认关闭,但可以为测试或调试启用。
-
tb-size=n
控制TCG翻译块缓存的大小(以MiB为单位)。
-
thread=single|multi
控制TCG线程数量。当TCG是多线程时,每个vCPU将有一个线程,从而利用额外的主机核心。默认情况下,在后端和前端都支持且没有启用不兼容的TCG特性(例如icount/replay)时,启用多线程。
-
dirty-ring-size=n
当使用KVM加速器时,控制每个vCPU脏页环缓冲区的大小(每个vCPU的条目数)。该值应为2的幂,并且应大于或等于1024(但仍小于内核支持的最大值)。如果不确定最佳值,4096可能是一个好的初始值。将此值设置为0以禁用该功能。默认情况下,该功能是禁用的(dirty-ring-size=0)。启用时,KVM将改为在位图中记录脏页。
-
eager-split-size=n
KVM以PAGE_SIZE粒度实现脏页记录,启用大页的脏记录需要首先将其拆分为PAGE_SIZE页。默认情况下,ARM上的KVM懒惰地执行这种拆分。在某些情况下,积极地拆分大页在性能上有好处,特别是在TLBI成本与断前制序列相关且访客工作负载主要是读操作时。此处的大小指定一次拆分多少页,需要是有效的块大小,分别为1GB/2MB/4KB、32MB/16KB和512MB/64KB对于4KB/16KB/64KB的PAGE_SIZE。指定较大的大小会影响内存。默认情况下,该功能是禁用的(eager-split-size=0)。
-
notify-vmexit=run|internal-error|disable,notify-window=n
启用或禁用x86主机上的通知VM退出支持,并指定相应的通知窗口以在启用时触发VM退出。
run
选项启用该功能。如果发生退出,则不执行任何操作并继续。internal-error
选项启用该功能。如果发生退出,则引发内部错误。disable
选项不启用该功能。该功能可以缓解由于事件窗口在一段时间内未打开而导致的CPU卡住问题(即通知窗口)。默认值:notify-vmexit=run,notify-window=0
。 -
device=path
设置KVM设备节点的路径。默认为
/dev/kvm
。此选项可用于通过文件描述符传递要使用的KVM设备,方法是将值设置为/dev/fdset/NN
。
-smp [[cpus=]n][,maxcpus=maxcpus][,drawers=drawers][,books=books][,sockets=sockets][,dies=dies][,clusters=clusters][,modules=modules][,cores=cores][,threads=threads]
模拟一个具有'n'个初始CPU的SMP系统。在支持CPU热插拔的主板上,可以通过可选的'maxcpus'参数来设置,以便在运行时添加更多的CPU。当两个参数都省略时,将根据提供的拓扑成员计算最大CPU数量,初始CPU数量将与最大数量匹配。当只给出其中一个参数时,省略的参数将设置为对应的值。可以同时指定两个参数,但最大CPU数量必须等于或大于初始CPU数量。CPU拓扑层次结构的乘积必须等于最大CPU数量。两个参数都受到所选特定机器类型确定的上限的约束。
为了控制CPU拓扑信息的报告,可以指定拓扑参数的值。机器可能只支持参数的一个子集,不同机器可能支持不同的子集,这取决于相应CPU目标的能力。因此,可以通过支持的子选项为特定类型的主板定义预期的拓扑层次结构。还可以提供不支持的参数作为子选项的补充,但其值必须设置为1,以便正确解析。
必须指定初始CPU数量或至少一个拓扑参数。指定的参数必须大于零,不允许显式配置为"cpus=0"。任何省略参数的值将根据给定参数计算。
例如,以下子选项为仅支持插槽/核心/线程的机器定义了CPU拓扑层次结构(机器上总共有2个插槽,每个插槽2个核心,每个核心2个线程)。可以省略该选项的某些成员,但其值将自动计算:
bash
-smp 8,sockets=2,cores=2,threads=2,maxcpus=8
以下子选项为支持插槽/芯片/模块/核心/线程的PC机器定义了CPU拓扑层次结构(机器上总共有2个插槽,每个插槽2个芯片,每个芯片2个模块,每个模块2个核心,每个核心2个线程)。可以省略该选项的某些成员,但其值将自动计算:
bash
-smp 32,sockets=2,dies=2,modules=2,cores=2,threads=2,maxcpus=32
以下子选项为支持插槽/集群/核心/线程的ARM virt机器定义了CPU拓扑层次结构(机器上总共有2个插槽,每个插槽2个集群,每个集群2个核心,每个核心2个线程)。可以省略该选项的某些成员,但其值将自动计算:
bash
-smp 16,sockets=2,clusters=2,cores=2,threads=2,maxcpus=16
历史上,在计算缺失值时优先考虑最粗略的拓扑参数(即优先考虑插槽而不是核心,而核心优先于线程),然而,这种行为可能会改变。在6.2之前,优先级是插槽高于核心高于线程。自6.2以来,优先级是核心高于插槽高于线程。
例如,以下选项在6.2之前定义了一个具有2个插槽、每个插槽1个核心的机器板,在6.2之后定义了一个具有1个插槽、每个插槽2个核心的机器板:
bash
-smp 2
注意:集群拓扑只有在-smp中显式指定时才会在ACPI中生成并暴露给虚拟机。
-numa node[,mem=size][,cpus=firstcpu[-lastcpu]][,nodeid=node][,initiator=initiator]
-numa node[,memdev=id][,cpus=firstcpu[-lastcpu]][,nodeid=node][,initiator=initiator]
-numa dist,src=source,dst=destination,val=distance
-numa cpu,node-id=node[,socket-id=x][,core-id=y][,thread-id=z]
-numa hmat-lb,initiator=node,target=node,hierarchy=hierarchy,data-type=type[,latency=lat][,bandwidth=bw]
-numa hmat-cache,node-id=node,size=size,level=level[,associativity=str][,policy=str][,line=size]
定义一个NUMA节点,并为其分配RAM和VCPU。设置从源节点到目标节点的NUMA距离。为指定节点设置ACPI异构内存属性。
传统的VCPU分配使用'cpus
'选项,其中firstcpu和lastcpu是CPU索引。每个'cpus
'选项表示一个连续的CPU索引范围(如果省略lastcpu,则表示单个VCPU)。可以通过提供多个'cpus
'选项来表示非连续的VCPU集合。如果在所有节点上都省略了'cpus
'选项,则VCPU会自动在它们之间分配。
例如,以下选项将VCPU 0、1、2和5分配给一个NUMA节点:
-numa node,cpus=0-2,cpus=5
'cpu
'选项是'cpus
'选项的新替代方案,它使用'socket-id|core-id|thread-id
'属性,通过CPU的拓扑结构属性将CPU对象分配给节点。属性集是机器特定的,并取决于使用的机器类型和'smp
'选项。可以使用'hotpluggable-cpus
'监视器命令查询。'node-id
'属性指定将CPU对象分配到的节点,在使用'cpu
'选项之前必须用'node
'选项声明节点。
例如:
-M pc \
-smp 1,sockets=2,maxcpus=2 \
-numa node,nodeid=0 -numa node,nodeid=1 \
-numa cpu,node-id=0,socket-id=0 -numa cpu,node-id=1,socket-id=1
'memdev
'选项将来自给定内存后端设备的RAM分配给节点。建议使用'memdev
'选项代替传统的'mem
'选项。这是因为'memdev
'选项提供了更好的性能和对后端RAM的更多控制(例如'-memory-backend-ram
'的'prealloc
'参数允许内存预分配)。
出于兼容性原因,传统的'mem
'选项在5.0及更早的机器类型中受支持。注意,'mem
'和'memdev
'是互斥的。如果一个节点使用'memdev
',其余节点也必须使用'memdev
'选项,反之亦然。
用户必须通过'memdev
'(或如果可用,通过传统的'mem
')为所有NUMA节点指定内存。在QEMU 5.2中,移除了不指定内存的'-numa node
'的支持。
'initiator
'是一个附加选项,指向与此NUMA节点具有最佳性能(最低延迟或最大带宽)的启动NUMA节点。注意,只有在机器属性'hmat'设置为'on'时,才可以设置此选项。
以下示例创建了一个具有2个NUMA节点的机器,节点0有CPU,节点1只有内存,其启动节点是节点0。注意,因为节点0有CPU,默认情况下,节点0的启动节点是其自身,必须是其自身。
bash
-machine hmat=on \
-m 2G,slots=2,maxmem=4G \
-object memory-backend-ram,size=1G,id=m0 \
-object memory-backend-ram,size=1G,id=m1 \
-numa node,nodeid=0,memdev=m0 \
-numa node,nodeid=1,memdev=m1,initiator=0 \
-smp 2,sockets=2,maxcpus=2 \
-numa cpu,node-id=0,socket-id=0 \
-numa cpu,node-id=0,socket-id=1
source和destination是NUMA节点ID。distance是从源节点到目标节点的NUMA距离。节点到自身的距离始终为10。如果为任意节点对设置了距离,则必须为所有节点对设置距离。但是,当每对节点只在一个方向上设置距离时,则假定相反方向的距离相同。然而,如果为甚至一个节点对设置了不对称的距离,则必须为所有节点对提供两个方向的距离值,即使它们是对称的。当一个节点无法从另一个节点到达时,将这对节点的距离设置为255。
请注意,-numa
选项并不会分配任何指定的资源,它只是将现有资源分配给NUMA节点。这意味着仍然需要使用-m
和-smp
选项分别分配RAM和VCPU。
使用'hmat-lb
'选项在ACPI异构属性内存表(HMAT)中设置发起节点和目标NUMA节点之间的系统局部性延迟和带宽信息。发起NUMA节点可以创建内存请求,通常它有一个或多个处理器。目标NUMA节点包含可寻址内存。
在'hmat-lb
'选项中,node表示NUMA节点ID。hierarchy是目标NUMA节点的内存层次结构:如果hierarchy是'memory',则该结构表示内存性能;如果hierarchy是'first-level|second-level|third-level',则该结构表示每个域的内存侧缓存的综合性能。'data-type'的类型表示该结构实例表示的数据类型:如果'hierarchy'是'memory','data-type'是目标内存的'access|read|write'延迟或'access|read|write'带宽;如果'hierarchy'是'first-level|second-level|third-level','data-type'是目标内存侧缓存的'access|read|write'命中延迟或'access|read|write'命中带宽。
lat是以纳秒为单位的延迟值。bw是带宽值,可能的值和单位是NUM[M|G|T],表示带宽值为每秒NUM字节(或MB/s、GB/s或TB/s,具体取决于使用的后缀)。注意,如果延迟或带宽值为0,则表示未提供相应的延迟或带宽信息。
在'hmat-cache
'选项中,node-id是内存所属的NUMA-id。size是以字节为单位的内存侧缓存大小。level是该结构描述的缓存级别,注意缓存级别0不应与'hmat-cache
'选项一起使用。associativity是缓存关联性,可能的值是'none/direct(直接映射)/complex(复杂缓存索引)'。policy是写策略。line是以字节为单位的缓存行大小。
例如,以下选项描述了2个NUMA节点。节点0有2个CPU和一个RAM,节点1只有一个RAM。节点0的处理器访问节点0的内存时,访问延迟为5纳秒,访问带宽为200MB/s;节点0的处理器访问节点1的内存时,访问延迟为10纳秒,访问带宽为100MB/s。而对于内存侧缓存信息,NUMA节点0和1都具有1级内存缓存,大小为10KB,写策略为回写,缓存行大小为8字节:
bash
-machine hmat=on \
-m 2G \
-object memory-backend-ram,size=1G,id=m0 \
-object memory-backend-ram,size=1G,id=m1 \
-smp 2,sockets=2,maxcpus=2 \
-numa node,nodeid=0,memdev=m0 \
-numa node,nodeid=1,memdev=m1,initiator=0 \
-numa cpu,node-id=0,socket-id=0 \
-numa cpu,node-id=0,socket-id=1 \
-numa hmat-lb,initiator=0,target=0,hierarchy=memory,data-type=access-latency,latency=5 \
-numa hmat-lb,initiator=0,target=0,hierarchy=memory,data-type=access-bandwidth,bandwidth=200M \
-numa hmat-lb,initiator=0,target=1,hierarchy=memory,data-type=access-latency,latency=10 \
-numa hmat-lb,initiator=0,target=1,hierarchy=memory,data-type=access-bandwidth,bandwidth=100M \
-numa hmat-cache,node-id=0,size=10K,level=1,associativity=direct,policy=write-back,line=8 \
-numa hmat-cache,node-id=1,size=10K,level=1,associativity=direct,policy=write-back,line=8
-add-fd fd=fd,set=set[,opaque=opaque]
向文件描述符集(fd set)中添加一个文件描述符。有效选项包括:
-
fd=fd
此选项定义要添加到fd set中的文件描述符的副本。该文件描述符不能是stdin、stdout或stderr。
-
set=set
此选项定义要将文件描述符添加到的fd set的ID。
-
opaque=opaque
此选项定义一个自由格式的字符串,可以用于描述文件描述符。
您可以使用来自fd set的预打开文件描述符来打开镜像文件:
bashqemu-system-x86_64 \ -add-fd fd=3,set=2,opaque="rdwr:/path/to/file" \ -add-fd fd=4,set=2,opaque="rdonly:/path/to/file" \ -drive file=/dev/fdset/2,index=0,media=disk
-set group.id.arg=value
为类型为group的项目id设置参数arg的值
-global driver.prop=value
-global driver=driver,property=property,value=value
将驱动程序属性prop的默认值设置为value,例如:
bash
qemu-system-x86_64 -global ide-hd.physical_block_size=4096 disk-image.img
特别地,您可以使用此选项为机器模型自动创建的设备设置驱动程序属性。要创建未自动创建的设备并设置其属性,请使用-device
选项。
-global driver.prop=value
是-global driver=driver,property=prop,value=value
的简写形式。当driver包含一个点时,长形式的语法也适用。
-boot [order=drives][,once=drives][,menu=on|off][,splash=sp_name][,splash-time=sp_time][,reboot-timeout=rb_timeout][,strict=on|off]
指定启动顺序驱动器作为驱动器字母的字符串。有效的驱动器字母取决于目标架构。x86 PC使用:a、b(软盘1和2)、c(第一个硬盘)、d(第一个CD-ROM)、n-p(从网络适配器1-4通过Etherboot启动),默认情况下为硬盘启动。要仅在第一次启动时应用特定的启动顺序,可以通过once
参数指定。请注意,不应同时使用order
或once
参数和设备的bootindex
属性,因为固件通常不支持同时使用这两者。
在固件/BIOS支持的情况下,可以通过menu=on
启用交互式启动菜单/提示。默认情况下为非交互式启动。
可以通过bios传递启动画面,允许用户在启用menu=on
选项并且指定splash=sp_name
时显示为徽标(如果固件/BIOS支持)。目前,Seabios支持X86系统。限制条件:启动画面文件可以是jpeg文件或24位BMP文件(真彩色)。分辨率应受SVGA模式支持,因此推荐的分辨率是320x240、640x480、800x640。
可以将超时设置传递给bios,当启动失败时,guest将在rb_timeout毫秒内暂停,然后重启。如果rb_timeout为'-1',guest将不会重启,qemu默认传递'-1'给bios。目前,Seabios支持X86系统。
通过strict=on
进行严格启动,只要固件/BIOS支持。这仅在通过bootindex选项更改启动优先级时生效。默认情况下为非严格启动。
bash
# 尝试先从网络启动,然后从硬盘启动
qemu-system-x86_64 -boot order=nc
# 先从CD-ROM启动,重启后恢复为默认顺序
qemu-system-x86_64 -boot once=d
# 启动时显示启动画面5秒
qemu-system-x86_64 -boot menu=on,splash=/root/boot.bmp,splash-time=5000
注意:旧格式'-boot drives'仍然受支持,但不推荐使用,因为将来版本中可能会移除。
-m [size=]megs[,slots=n,maxmem=size]
设置客户机启动时的RAM大小为megs兆字节。默认值为128 MiB。可以选择使用"M"或"G"后缀分别表示兆字节或千兆字节的值。可选参数slots和maxmem可以用来设置热插拔内存插槽的数量和最大内存量。请注意,maxmem必须与页面大小对齐。
例如,以下命令行将客户机启动时的RAM大小设置为1GB,创建3个插槽以热插拔额外内存,并将客户机的最大内存设置为4GB:
bash
qemu-system-x86_64 -m 1G,slots=3,maxmem=4G
如果未指定slots和maxmem,则不会启用内存热插拔,且客户机启动时的RAM大小将不会增加。
-mem-path path
从路径中临时创建的文件中分配客户机RAM。
-mem-prealloc
使用-mem-path
时预分配内存。
-k language
使用键盘布局语言(例如fr
表示法语)。该选项仅在不容易获得原始PC键码的情况下需要使用(例如在Mac电脑上,使用某些X11服务器或使用VNC或curses显示时)。通常在PC/Linux或PC/Windows主机上不需要使用此选项。
可用的布局有:
text
ar de-ch es fo fr-ca hu ja mk no pt-br sv
da en-gb et fr fr-ch is lt nl pl ru th
de en-us fi fr-be hr it lv nl-be pt sl tr
默认布局为en-us
。
-audio [driver=]driver[,model=value][,prop[=value][,...]]
如果指定了model
选项,-audio
是用于一次性配置客户机音频硬件和主机音频后端的快捷方式。客户机硬件模型可以使用model=modelname
进行设置。使用model=help
列出可用的设备类型。
以下两个示例做了完全相同的事情,展示了如何使用-audio
来缩短命令行长度:
bash
qemu-system-x86_64 -audiodev pa,id=pa -device sb16,audiodev=pa
qemu-system-x86_64 -audio pa,model=sb16
如果未指定model
选项,-audio
用于配置一个默认音频后端,该后端将在设备或机器未设置audiodev
属性时使用。特别是,-audio none
确保即使对于有嵌入式声音硬件的机器也不产生音频。
在这两种情况下,driver选项与下面对应的-audiodev
选项相同。使用driver=help
列出可用的驱动程序。
-audiodev [driver=]driver,id=id[,prop[=value][,...]]
添加一个由id标识的新音频后端驱动程序。有全局和驱动程序特定的属性。一些值可以为输入和输出分别设置,它们用in|out.
标记。您可以使用in.prop
设置输入属性,使用out.prop
设置输出属性。例如:
bash
-audiodev alsa,id=example,in.frequency=44100,out.frequency=8000
-audiodev alsa,id=example,out.channels=1 # 不指定in.channels
注意:已知参数验证不完整,在许多情况下,指定无效选项会导致QEMU打印错误消息并继续仿真而没有声音。
有效的全局选项有:
-
id=identifier
标识音频后端。
-
timer-period=period
设置音频子系统使用的定时器周期,以微秒为单位。默认值为10000(10毫秒)。
-
in|out.mixing-engine=on|off
使用QEMU的混音引擎在QEMU内部混合所有流并在后端不支持时转换音频格式。当关闭时,fixed-settings也必须关闭。注意,禁用此选项意味着所选后端必须支持多流和虚拟卡使用的音频格式,否则将没有声音。不建议禁用此选项,除非您想使用5.1或7.1音频,因为混音引擎仅支持单声道和立体声。默认值为开启。
-
in|out.fixed-settings=on|off
为主机音频使用固定设置。关闭时,将根据客户机打开声卡的方式更改。在这种情况下,不能指定频率、通道或格式。默认值为开启。
-
in|out.frequency=frequency
使用固定设置时指定使用的频率。默认值为44100Hz。
-
in|out.channels=channels
使用固定设置时指定使用的通道数。默认值为2(立体声)。
-
in|out.format=format
使用固定设置时指定使用的采样格式。有效值为:
s8
、s16
、s32
、u8
、u16
、u32
、f32
。默认值为s16
。 -
in|out.voices=voices
指定使用的声音数。默认值为1。
-
in|out.buffer-length=usecs
设置缓冲区大小,以微秒为单位。
-
in|out.buffer-length=usecs
设置缓冲区大小,以微秒为单位。
-audiodev none,id=id[,prop[=value][,...]]
创建一个丢弃所有输出的虚拟后端。此后端没有特定的属性。
-audiodev alsa,id=id[,prop[=value][,...]]
使用ALSA创建后端。此后端仅在Linux上可用。ALSA特定选项包括:
-
in|out.dev=device
指定用于输入和/或输出的ALSA设备。默认值为
default
。 -
in|out.period-length=usecs
设置周期长度,以微秒为单位。
-
in|out.try-poll=on|off
尝试使用设备的轮询模式。默认值为on。
-
threshold=threshold
播放开始时的阈值(以微秒为单位)。默认值为0。
-audiodev coreaudio,id=id[,prop[=value][,...]]
使用Apple的Core Audio创建后端。此后端仅在Mac OS上可用,并且仅支持播放。
Core Audio特定选项包括:
-
in|out.buffer-count=count
在播放时增加额外的延迟,以微秒为单位。默认值为10000(10毫秒)。
-audiodev oss,id=id[,prop[=value][,...]]
使用OSS创建后端。此后端在大多数类Unix系统上可用。
OSS特定选项包括:
-
in|out.dev=device
指定要使用的OSS设备的文件名。默认值为
/dev/dsp
。 -
in|out.buffer-count=count
设置缓冲区的数量。
-
in|out.try-poll=on|off
尝试使用设备的轮询模式。默认值为on。
-
try-mmap=on|off
尝试使用内存映射设备访问。默认值为off。
-
exclusive=on|off
以独占模式打开设备(在这种情况下vmix将无法工作)。默认值为off。
-
dsp-policy=policy
设置定时策略(0到10之间的值,数字越小延迟越小,但CPU使用率越高)。使用-1以使用
buffer
和buffer-count
指定的缓冲区大小。如果没有OSS 4,此选项将被忽略。默认值为5。
-audiodev pa,id=id[,prop[=value][,...]]
使用PulseAudio创建后端。此后端在大多数系统上可用。
PulseAudio特定选项包括:
-
server=server
设置要连接的PulseAudio服务器。
-
in|out.name=sink
使用指定的源/接收器进行录音/播放。
-
in|out.latency=usecs
期望的延迟,以微秒为单位。PulseAudio服务器将尝试满足此值,但实际延迟可能更低或更高。
-audiodev pipewire,id=id[,prop[=value][,...]]
使用PipeWire创建后端。此后端在大多数系统上可用。
PipeWire特定选项包括:
-
in|out.latency=usecs
期望的延迟,以微秒为单位。
-
in|out.name=sink
使用指定的源/接收器进行录音/播放。
-
in|out.stream-name=name
指定PipeWire流的名称。
-audiodev sdl,id=id[,prop[=value][,...]]
使用SDL创建后端。此后端在大多数系统上可用,但如果可能,您应使用平台的本地后端。
SDL特定选项包括:
-
in|out.buffer-count=count
设置缓冲区的数量。
-audiodev sndio,id=id[,prop[=value][,...]]
使用SNDIO创建后端。此后端在OpenBSD和大多数其他类Unix系统上可用。
SNDIO特定选项包括:
-
in|out.dev=device
指定用于输入和/或输出的SNDIO设备。默认值为
default
。 -
in|out.latency=usecs
设置期望的周期长度,以微秒为单位。
-audiodev spice,id=id[,prop[=value][,...]]
创建一个通过SPICE发送音频的后端。此后端需要-spice
选项,在这种情况下会自动选择,因此通常可以忽略此选项。此后端没有特定属性。
-audiodev wav,id=id[,prop[=value][,...]]
创建一个将音频写入WAV文件的后端。
后端特定选项包括:
-
path=path
将录制的音频写入指定文件。默认值为
qemu.wav
。
-device driver[,prop[=value][,...]]
添加设备驱动程序。prop=value
设置驱动程序属性。有效属性取决于驱动程序。要获取可能的驱动程序和属性的帮助,请使用-device help
和-device driver,help
。
-device ipmi-bmc-sim,id=id[,prop[=value][,...]]
添加一个IPMI BMC。这是一个硬件管理接口处理器的模拟,通常位于系统上。它提供看门狗以及重置和电源控制系统的能力。您需要将其连接到IPMI接口以使其有用。
用于BMC的IPMI从属地址。默认值为0x20。此地址是BMC在管理控制器的I2C网络上的地址。如果您不知道这意味着什么,可以安全地忽略它。
-
id=id
用于接口使用此设备的BMC ID。
-
slave_addr=val
定义用于BMC的从属地址。默认值为0x20。
-
sdrfile=file
包含原始传感器数据记录(SDR)数据的文件。默认值为无。
-
fruareasize=val
可替换单元(FRU)区域的大小。默认值为1024。
-
frudatafile=file
包含原始可替换单元(FRU)清单数据的文件。默认值为无。
-
guid=uuid
BMC的GUID值,采用标准UUID格式。如果设置此值,则向BMC发送"获取GUID"命令将返回它。否则,"获取GUID"将返回错误。
-device ipmi-bmc-extern,id=id,chardev=id[,slave_addr=val]
添加与外部IPMI BMC模拟器的连接。与本地仿真BMC不同,此项连接到提供IPMI服务的外部实体。
连接到外部BMC模拟器。如果这样做,强烈建议使用"reconnect="字符设备选项,如果连接丢失,则重新连接到模拟器。请注意,如果不谨慎使用,这可能成为安全问题,因为接口能够发送重置、NMI和关闭VM的命令。最好是QEMU连接到在localhost上运行在安全端口的外部模拟器,这样模拟器和QEMU都不会暴露在任何外部网络上。
有关外部接口的更多详细信息,请参见OpenIPMI库中的"lanserv/README.vm"文件。
-device isa-ipmi-kcs,bmc=id[,ioport=val][,irq=val]
在ISA总线上添加一个KCS IPMI接口。如果合适,还会添加相应的ACPI和SMBIOS条目。
-
bmc=id
要连接的BMC,可以是上面的ipmi-bmc-sim或ipmi-bmc-extern之一。
-
ioport=val
定义接口的I/O地址。默认值为0xca0(用于KCS)。
-
irq=val
定义要使用的中断。默认值为5。要禁用中断,请将其设置为0。
-device isa-ipmi-bt,bmc=id[,ioport=val][,irq=val]
与KCS接口类似,但定义了一个BT接口。默认端口为0xe4,默认中断为5。
-device pci-ipmi-kcs,bmc=id
在PCI总线上添加一个KCS IPMI接口。
-
bmc=id
要连接的BMC,可以是上面的ipmi-bmc-sim或ipmi-bmc-extern之一。
-device pci-ipmi-bt,bmc=id
与KCS接口类似,但在PCI总线上定义了一个BT接口。
-device intel-iommu[,option=...]
仅支持在-machine q35
下使用,它将在客户机中启用Intel VT-d仿真。支持以下选项:
-
intremap=on|off
(默认:auto)这启用中断重映射功能。它需要启用完整的x2apic。目前仅支持kvm kernel-irqchip模式
off
或split
,尚不支持完整的kernel-irqchip。默认值为"auto",将由kernel-irqchip模式决定。 -
caching-mode=on|off
(默认:off)这为VT-d仿真设备启用缓存模式。当启用缓存模式时,每个客户机DMA缓冲区映射将以同步方式从客户机IOMMU驱动程序生成IOTLB无效到vIOMMU设备。对于
-device vfio-pci
与VT-d设备一起工作是必需的,因为主机分配的设备需要在客户机DMA开始之前在主机上设置DMA映射。 -
device-iotlb=on|off
(默认:off)这为仿真的VT-d设备启用设备IOTLB功能。目前virtio/vhost应该是此参数的唯一实际用户,设备上配置的ats=on与之配对。
-
aw-bits=39|48
(默认:39)这决定了IOVA地址空间的地址宽度。地址空间对于3级IOMMU页表具有39位宽度,对于4级IOMMU页表具有48位宽度。
有关QEMU中VT-d仿真的一般场景,请参阅维基页面:https://wiki.qemu.org/Features/VT-d。
-device virtio-iommu-pci[,option=...]
仅支持在-machine q35
(x86_64)和-machine virt
(ARM)下使用。支持以下选项:
-
granule=val
(可能的值为4k、8k、16k、64k和host;默认:host)这决定了virtio-iommu公开的默认粒度。如果为host,则粒度与主机页面大小匹配。
-
aw-bits=val
(值在32到64之间,默认取决于机器)这决定了IOVA地址空间的地址宽度。
-name name
设置客户机的名称。该名称将显示在SDL窗口标题中。该名称也将用于VNC服务器。还可以选择在Linux中设置顶部可见的进程名称。还可以在Linux上启用单独线程的命名以帮助调试。
-uuid uuid
设置系统UUID。
未完待续。。