Kvm

這些用於標準輸出重定向的 qemu 參數如何工作?

  • September 1, 2016

我正在使用以下參數來啟動 QEMU,以便將來賓的輸出重定向到主機控制台:

-chardev stdio,id=virtiocon0
-device virtio-serial
-device virtconsole,chardev=virtiocon0

我有以下問題:

  1. 這些標誌中的每一個是什麼意思?
  2. 在訪客端和主機端都創建了什麼樣的設備?
  3. 我應該在哪裡尋找主機端的設備(我實際上想從中讀取)?

從手冊頁:

-chardev 後端,id=id

$$ ,mux=on|off $$ $$ ,options $$ 後端是以下之一:null、socket、udp、msmouse、vc、ringbuf、文件、管道、控制台、串列、pty、stdio、盲文、tty、並行、parport、spicevmc。香料港。具體的後端將確定適用的選項。

所有設備都必須有一個 id,它可以是最長 127 個字元的任何字元串。它用於在其他命令行指令中唯一標識此設備。

特別是關於 stdio 後端:

-chardev 標準輸入輸出,id=id

$$ ,signal=on|off $$ 連接到 QEMU 程序的標準輸入和標準輸出。

所以這個將 chardevvirtiocon0與 qemu 程序的 stdin/out 連接起來。

另外兩個是:

-設備驅動

$$ ,prop[=value $$$$ ,… $$]

添加設備驅動程序。prop=value 設置驅動程序屬性。有效屬性取決於驅動程序。

第一個驅動程序virtio-serial只是在主機和訪客之間創建一個通信通道。這對於下一個驅動程序是必要的。

最後一個,virtconsole在客戶機上創建一個控制台設備,附加到之前創建的 chardev,它附加到 qemu 的 stdio/out。

客人然後可以像使用任何其他 tty 一樣使用這個控制台設備(例如,呼叫getty它等)。

在客戶機上創建的設備將取決於核心及其編譯方式,在 linux 中通常為 /dev/hvc0。

在這種情況下,主機上沒有創建設備,它只是使用標準輸入和標準輸出。在標準輸入上讀取它並在標準輸出上寫入它。

您還可以將 stdin 和 stdout 重定向到其他內容,或使用不同的chardev後端。嘗試套接字或管道。

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