歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Ubuntu下VirtualBox虛擬機串口設置

Ubuntu下VirtualBox虛擬機串口設置

日期:2017/2/28 16:29:33   编辑:Linux教程

VirtualBox虛擬機的串口通信機制有兩種,一種是通過將虛擬機的串口連接到主機的串口,另外一種是將虛擬機的串口連接到主機上的一個命名管道,第一種方式到現在我還沒有實踐出來,目前只是對命名管道的方式實踐成功。

1.啟用串口

新建虛擬機後在設置中會出現串口面板,可以進行串口設置,默認是不起用的,一般端口選擇使用COM1對應虛擬機的/dev/ttyS0,端口模式選擇Host Pipe,表示將虛擬機的串口連接到主機的一個命名管道,創建通道表示啟動虛擬機時VirtualBox會在HostOS中對應地創建一個命名管道,並使它與虛擬機的對應串口相連。端口路徑在選擇Host Pipe時表示命名管道的路徑,在Windows系統上,它是\\.\pipe\xxx的形式,在Linux可以設任何路徑,比如我們將它設為/tmp/vbox。注意,如果端口路徑對應的命名管道不能創建的話,虛擬機啟動會失敗;端口路徑的命名管道不能重復創建。

你也可以使用命令行啟用並創建一個虛擬機到主機命名管道的連接,下面的命令就將虛擬機Ubuntu 8.10 Dev OS的COM1串口和主機的/tmp/vbox命名管道連接起來:

VBoxManage setextradata "Ubuntu8.10DevOS" "VBoxInternal/Devices/serial/0/Config/IRQ" 4

VBoxManage setextradata "Ubuntu8.10DevOS" "VBoxInternal/Devices/serial/0/Config/IOBase" 0x3f8

VBoxManage setextradata "Ubuntu8.10DevOS" "VBoxInternal/Devices/serial/0/LUN#0/Driver" Char

VBoxManage setextradata "Ubuntu8.10DevOS" "VBoxInternal/Devices/serial/0/LUN#0/AttachedDriver/Driver" NamedPipe

VBoxManage setextradata "Ubuntu8.10DevOS" "VBoxInternal/Devices/serial/0/LUN#0/AttachedDriver/Config/Location" "/tmp/vbox"

VBoxManage setextradata "Ubuntu8.10DevOS" "VBoxInternal/Devices/serial/0/LUN#0/AttachedDriver/Config/IsServer" 1

2.虛擬機和主機HostOS間的串口通信

啟動虛擬機Ubuntu8.10DevOS,這時會在主機的/tmp/目錄下創建vbox新文件,可以用ls -l看到它是一個sock類型的文件,使用來進行通信的。在HostOS中安裝minicom,minicom可以用來作為串口測試:

sudo apt-get install minicom

接下來我們可以配置minicom,讓它指向/tmp/vbox,執行命令

sudo gedit /etc/minicom/minirc.dfl並修改為

pu port unix#/tmp/vbox

也可以在minicom中通過串口設置來修改。測試前應保證minicom中的串口設置的波特率和虛擬機中的串口一樣。虛擬機中的串口波特率設置可以參考下文,minicom的波特率設置可以直接在程序中Ctrl+A, O後修改,或修改配置文件。

測試過程,

1)在HostOS中啟動minicom:

sudo minicom

在虛擬機中的終端中執行:

echo is that ok? > /dev/ttyS0

會在HostOS中的minicom中回顯對應內容

2)在虛擬機中的終端中執行:

cat /dev/ttyS0

這時主機中的minicom中會出現輸入狀態,在其中輸入的信息也會在虛擬機終端上回顯。

3.虛擬機和虛擬機之間的串口通信

兩台虛擬機間的通信也可以通過利用主機的命名管道來完成。原理可以簡單的這樣描述:一台虛擬機在主機中創建的命名管道並其串口相連,另外一台虛擬機也將自己的串口連到主機的命名管道上,這樣兩個虛擬機的串口就能連起來了。這裡兩台虛擬機都使用各自的COM1端口,主機的命名管道為同一管道/tmp/vbox,在配置時一台創建通道(假設為Ubuntu8.10DevOS),另一台不創建。啟動時先啟動創建通道的虛擬機,然後啟動另一台虛擬機,分別打開兩台虛擬機的終端,通過如下命令將各自的COM1口的輸入輸出波特率都設為115200

stty ispeed 115200 ospeed 115200 -F /dev/ttyS0

測試過程:

在其中一台虛擬機A終端上執行

cat /dev/ttyS0

在另一台虛擬機B上執行

echo ok > /dev/ttyS0

這時虛擬機A的終端會接受到B發來的ok消息。

Copyright © Linux教程網 All Rights Reserved