這些用於標準輸出重定向的 qemu 參數如何工作?
我正在使用以下參數來啟動 QEMU,以便將來賓的輸出重定向到主機控制台:
-chardev stdio,id=virtiocon0 -device virtio-serial -device virtconsole,chardev=virtiocon0
我有以下問題:
- 這些標誌中的每一個是什麼意思?
- 在訪客端和主機端都創建了什麼樣的設備?
- 我應該在哪裡尋找主機端的設備(我實際上想從中讀取)?
從手冊頁:
-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 程序的標準輸入和標準輸出。
所以這個將 chardev
virtiocon0
與 qemu 程序的 stdin/out 連接起來。另外兩個是:
-設備驅動
$$ ,prop[=value $$$$ ,… $$]
添加設備驅動程序。prop=value 設置驅動程序屬性。有效屬性取決於驅動程序。
第一個驅動程序
virtio-serial
只是在主機和訪客之間創建一個通信通道。這對於下一個驅動程序是必要的。最後一個,
virtconsole
在客戶機上創建一個控制台設備,附加到之前創建的 chardev,它附加到 qemu 的 stdio/out。客人然後可以像使用任何其他 tty 一樣使用這個控制台設備(例如,呼叫
getty
它等)。在客戶機上創建的設備將取決於核心及其編譯方式,在 linux 中通常為 /dev/hvc0。
在這種情況下,主機上沒有創建設備,它只是使用標準輸入和標準輸出。在標準輸入上讀取它並在標準輸出上寫入它。
您還可以將 stdin 和 stdout 重定向到其他內容,或使用不同的
chardev
後端。嘗試套接字或管道。