QEMU/监控器
当 QEMU 运行时,它提供一个监控器控制台,用于与 QEMU 交互。通过各种命令,监控器允许您检查正在运行的来宾操作系统、更改可移动介质和 USB 设备、截取屏幕截图和音频抓取,以及控制虚拟机的各个方面。
从 QEMU 内部访问监控器,方法是按住 Ctrl 和 Alt 键(或任何“鼠标抓取”键),然后按 Ctrl-Alt-2
。进入监控器后,Ctrl-Alt-1
切换回来宾操作系统。在监控器中键入 help
或 ?
将显示所有命令的列表。或者,可以使用 -monitor <dev>
命令行选项将监控器重定向。使用 -monitor stdio
将监控器发送到标准输出,这在命令行使用 qemu 时最为有用。
- 帮助 [命令]或者? [命令]
没有参数时,帮助命令会列出所有可用的命令。要了解另一个命令的更多信息,请键入帮助 命令例如
(qemu) help info
在小屏幕/VM 窗口上,命令列表会滚动得过快,无法让你阅读它们。要滚动来回以便阅读整个列表,请按住 Control 键并按 Page Up 和 Page Down。
- 信息 选项
显示有关来宾操作系统某些方面的信息。可用选项为
- 块– 块设备,如硬盘驱动器、软盘驱动器、CDROM
- blockstats– 读取和写入块设备的统计信息
- 捕获– 活动捕获(音频抓取)
- 历史记录– 控制台命令历史记录
- irq– 中断的统计信息(如果已编译到 QEMU 中)
- jit– QEMU 的即时编译器的统计信息
- kqemu– kqemu 内核模块是否正在使用
- 内存– 列出活动虚拟内存映射
- 鼠标– 接收事件的来宾上的鼠标
- 网络– 网络设备和 VLAN
- pci– 正在模拟的 PCI 设备
- pcmcia– PCMCIA 卡 设备
- pic– i8259(PIC)的状态
- 配置文件– 内部分析器的信息,如果已编译到 QEMU 中
- 寄存器– CPU 寄存器
- 快照– 列出 VM 快照
- tlb– 列出 TLB (转换旁路缓冲区),即物理内存和虚拟内存之间的映射
- usb– 虚拟 USB 集线器上的 USB 设备
- usbhost– 主机操作系统上的 USB 设备
- 版本– QEMU 版本号
- vnc– VNC 信息
- 更改 设备 设置
更改
命令允许您更改可移动介质(如 CD-ROM),更改 VNC 的显示选项,以及更改 VNC 上使用的密码。
当您需要更改 CD 或 DVD 驱动器中的光盘,或在不同的 .iso 文件之间切换时,请使用 信息
查找 CD 或 DVD 驱动器的名称,并使用 更改
进行更改。
(qemu) info block ide0-hd0: type=hd removable=0 file=/path/to/winxp.img ide0-hd1: type=hd removable=0 file=/path/to/pagefile.raw ide1-hd1: type=hd removable=0 file=/path/to/testing_data.img ide1-cd0: type=cdrom removable=1 locked=0 file=/dev/sr0 ro=1 drv=host_device floppy0: type=floppy removable=1 locked=0 [not inserted] sd0: type=floppy removable=1 locked=0 [not inserted] (qemu) change ide1-cd0 /path/to/my.iso (qemu) change ide1-cd0 /dev/sr0 host_device
- 弹出 [-f] 设备
使用 弹出
命令释放连接到指定可移动介质设备的设备或文件。-f
参数可用于强制执行,如果它最初拒绝!
通知 QEMU 块设备已调整大小。
$ info block drive-virtio-disk3 (#block790): /guest/mud_vdd (raw) $ block_resize drive-virtio-disk3 16G
将主机文件添加为 USB 闪存设备(您需要预先创建主机文件:dd if=/dev/zero of=/tmp/disk.usb bs=1024k count=32)
usb_add disk:/tmp/disk.usb
使用信息 usb 获取 usb 设备列表
(qemu) info usb Device 0.1, Speed 480 Mb/s, Product XXXXXX Device 0.2, Speed 12 Mb/s, Product XXXXX (qemu) usb_del 0.2
这将删除设备
向来宾发送鼠标移动事件。mouse_move dx dy [dz] -- 发送鼠标移动事件。示例:[qemu]mouse_move -20 20
您可以通过 sendkey 命令模拟键盘事件。语法为:sendkey keys。要获得键列表,请键入sendkey [tab]。示例
- sendkey a
- sendkey shift-a
- sendkey ctrl-u
- sendkey ctrl-alt-f1
从 QEMU 0.12.5 开始,存在以下键:
shift | shift_r | alt | alt_r | altgr | altgr_r |
ctrl | ctrl_r | menu | esc | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 |
9 | 0 | minus | equal | backspace | tab |
q | w | e | r | t | y |
u | i | o | p | ret | a |
s | d | f | g | h | j |
k | l | z | x | c | v |
b | n | m | comma | dot | slash |
asterisk | spc | caps_lock | f1 | f2 | f3 |
f4 | f5 | f6 | f7 | f8 | f9 |
f10 | num_lock | scroll_lock | kp_divide | kp_multiply | kp_subtract |
kp_add | kp_enter | kp_decimal | sysrq | kp_0 | kp_1 |
kp_2 | kp_3 | kp_4 | kp_5 | kp_6 | kp_7 |
kp_8 | kp_9 | < | f11 | f12 | |
home | pgup | pgdn | end | left | up |
down | right | insert | delete |
- screendump filename
捕获屏幕截图并保存到 PPM 图片文件。
- wavcapture filename
捕获虚拟机的音频并将其保存到指定 .wav 文件中。
- stopcapture index
停止记录 wavcapture。第一个 wavcapture 的索引为 0。
- commit device或者commit all
在使用 -snapshot
选项运行 QEMU 时,将更改提交到设备或所有设备。
- quit或者q
立即退出 QEMU。
- savevmname
将虚拟机保存为标签 'name'。并非所有文件系统都支持此功能。raw 不支持,但 qcow2 支持。
- loadvmname
加载标签为 'name' 的虚拟机。这也可以在命令行上完成-loadvmname
使用info snapshots命令,您可以请求可用机器的列表。
删除标签为 'name' 的虚拟机。
挂起 VM 的执行。
反转上一次 stop 命令 - 恢复 VM 的执行。
这类似于 PC 上的物理重置按钮。警告:文件系统可能处于不干净状态。
这类似于现代 PC 上的物理电源按钮。VM 将收到 ACPI 关机请求,通常会干净地关闭。
- log option
- logfile filename
将日志写入指定文件,而不是默认路径 /tmp/qemu.log
。
为 GNU 调试器 (gdb) 启动远程调试器会话。要从主机连接到它,请运行以下命令
shell$ gdb qemuKernelFile (gdb) target remote localhost:1234
x /format address
使用指定格式显示指定虚拟地址的内存。
有关 format 和 address 的详细信息,请参阅 xp 部分。
xp /format address
使用指定格式显示指定物理地址的内存。
format:用于指定显示内存的输出格式。格式分解为 /[count][data_format][size]
- count:要显示的项目数量(以 10 为底)
- data_format:'x' 表示十六进制,'d' 表示十进制,'u' 表示无符号十进制,'o' 表示八进制,'c' 表示字符,'i' 表示(反汇编的)处理器指令
- size:'b' 表示 8 位,'h' 表示 16 位,'w' 表示 32 位或 'g' 表示 64 位。在 x86 上,'h' 和 'w' 可以选择指令反汇编代码格式。
address:
- 直接地址,例如:0x20000
- 寄存器,例如:$eip
示例 - 显示 x86 处理器从当前指令开始的 3 条指令
(qemu) xp /3i $eip
示例 - 显示 x86 处理器堆栈上的最后 20 个字
(qemu) xp /20wx $esp
Print(或 p)评估并打印给定的表达式。结果将以十六进制形式打印,但表达式中也可以使用十进制。如果结果溢出,它将环绕。要在一个 CPU 寄存器中使用值,请使用 $<register name>。寄存器名称应为小写。您可以使用 info registers 命令查看寄存器。
qemu 模拟 i386 的示例。
(qemu) print 16 0x10 (qemu) print 16 + 0x10 0x20 (qemu) print $eax 0xc02e4000 (qemu) print $eax + 2 0xc02e4002 (qemu) print ($eax + 2) * 2 0x805c8004 (qemu) print 0x80000000 * 2 0
有关特定于体系结构的寄存器名称的更多信息,可以在以下 qemu 源代码文件中找到
用法: sum <地址> <大小>
计算指定内存区域的校验和
用法: memsave <地址> <大小> <文件名>
QEMU 文档中的监视器:https://www.qemu.org/docs/master/system/monitor.html