跳轉到內容

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

華夏公益教科書