跳转到内容

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 设备
  • pcmciaPCMCIA 卡 设备
  • pic– i8259(PIC)的状态
  • 配置文件– 内部分析器的信息,如果已编译到 QEMU 中
  • 寄存器– CPU 寄存器
  • 快照– 列出 VM 快照
  • tlb– 列出 TLB (转换旁路缓冲区),即物理内存和虚拟内存之间的映射
  • usb– 虚拟 USB 集线器上的 USB 设备
  • usbhost– 主机操作系统上的 USB 设备
  • 版本– QEMU 版本号
  • vncVNC 信息
  • 更改 设备 设置

更改 命令允许您更改可移动介质(如 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 参数可用于强制执行,如果它最初拒绝!

block_resize

[编辑 | 编辑源代码]

通知 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

[编辑 | 编辑源代码]

向来宾发送鼠标移动事件。mouse_move dx dy [dz] -- 发送鼠标移动事件。示例:[qemu]mouse_move -20 20

mouse_button

[编辑 | 编辑源代码]

mouse_set index

[编辑 | 编辑源代码]

sendkey keys

[编辑 | 编辑源代码]

您可以通过 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 print
home pgup pgdn end left up
down right insert delete

屏幕和音频抓取

[编辑 | 编辑源代码]

screendump

[编辑 | 编辑源代码]
  • screendump filename

捕获屏幕截图并保存到 PPM 图片文件。

wavcapture

[编辑 | 编辑源代码]
  • wavcapture filename

捕获虚拟机的音频并将其保存到指定 .wav 文件中。

stopcapture

[编辑 | 编辑源代码]
  • 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 的执行。

system_reset

[编辑 | 编辑源代码]

这类似于 PC 上的物理重置按钮。警告:文件系统可能处于不干净状态。

system_powerdown

[编辑 | 编辑源代码]

这类似于现代 PC 上的物理电源按钮。VM 将收到 ACPI 关机请求,通常会干净地关闭。

  • log option
  • logfile filename

将日志写入指定文件,而不是默认路径 /tmp/qemu.log

gdbserver

[编辑 | 编辑源代码]

为 GNU 调试器 (gdb) 启动远程调试器会话。要从主机连接到它,请运行以下命令

shell$ gdb qemuKernelFile
(gdb) target remote localhost:1234

x /format address

使用指定格式显示指定虚拟地址的内存。

有关 formataddress 的详细信息,请参阅 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 源代码文件中找到

http://git.qemu.org/?p=qemu.git;a=blob;f=monitor.c;h=1266ba06fb032cb0e7c9dbaa1b6d22cd9047c6b4;hb=HEAD#l3044

用法: sum <地址> <大小>
计算指定内存区域的校验和

用法: memsave <地址> <大小> <文件名>

QEMU 文档中的监视器:https://www.qemu.org/docs/master/system/monitor.html

华夏公益教科书