虛擬機於主機通過串口通信
我們需要先配置一下宿主機器上的virtualbox。
1. 在串口欄中勾選 []啟用串口(E)
2. 端口編號選擇COM1
3. 端口模式選擇Host Pipe
4. 勾選 []創建通道(C)
5. Port/File Path: 填上 /tmp/serial. 也就是說我們在宿主機器的/tmp/中創建了serial的通道文件
此外,我們還要在宿主機器上設定一下串口.在此之前需要安裝minicom軟件
1. 運行minicom -s命令
2. CTRL+A調出配置界面,選擇Serial port setup
3. Serial Device修改為 unix#/tmp/serial
4. Bps/Par/Bits修改為 9600 8N1
5. Hardware Flow Control和Software Flow Control都設置為No.
6. 保存為dfl以後退出
在虛擬機上配置:
修改/boot/grub/menu.lst,將輸出導出到串口
title Debian GNU/Linux, kernel 2.6.32.7
root (hd0,0)
kernel /boot/vmlinuz-2.6.32.7 root=/dev/hda1 ro console=ttyS0,9600
initrd /boot/initrd.img-2.6.32.7
修改/etc/inittab,允許輸出的控制台為ttyS0.
將
#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
啟用即可。
宿主機開啟minicom, 然後啟動虛擬機,就可以看到系統啟動輸出信息全部導出到了串口上。等到登陸界面出現的時候,就可以登陸操作。
虛擬機和虛擬機之間的串口通信
兩台虛擬機間的通信也可以通過利用主機的命名管道來完成。原理可以簡單的這樣描述:一台虛擬機在主機中創建的命名管道並其串口相連,另外一台虛擬機也將自己的串口連到主機的命名管道上,這樣兩個虛擬機的串口就能連起來了。這裡兩台虛擬機都使用各自的COM1端口,主機的命名管道為同一管道/tmp /vbox,在配置時一台創建通道(假設為Ubuntu8.10DevOS),另一台不創建。啟動時先啟動創建通道的虛擬機,然後啟動另一台虛擬機,分別打開兩台虛擬機的終端,通過如下命令將各自的COM1口的輸入輸出波特率都設為115200
虛擬機A:stty ispeed 115200 ospeed 115200 -F /dev/ttyS0
虛擬機B:stty ispeed 115200 ospeed 115200 -F /dev/ttyS0
測試過程:
在其中一台虛擬機A終端上執行
cat /dev/ttyS0
在另一台虛擬機B上執行
echo ok > /dev/ttyS0
這時虛擬機A的終端會接受到B發來的ok消息。
如果不確認串口線在哪個串口上可以安裝setserial軟件執行
setserial -g /dev/ttyS*
看看那個串口有信息! 有可能是串口到ttyS1上了
stty命令詳解
[語法]: stty [-a] [-g] [選項]
[說明]: 本命令設置終端,無參數時報告終端設置,本命令功能十分強大,應謹慎使用,下面僅介紹部分常用功能 詳細如下:
-a 顯示當前終端所有設置
-g 以能作為 stty 命令參數的方式顯示終端設置
以下是終端常用設置,在設置前加-表示清除設置:
控制方式
ispeed 0 110 300 600 1200 1800 2400 4800 9600 19200 38400
本命令設置終端輸入波特率,若為0則使用缺省波特率。
例如 stty ispeed 9600
ospeed 0 110 300 600 1200 1800 2400 4800 9600 19200 38400
本命令設置終端輸出波特率,參看 ispeed。
輸入方式
ingbrk(-ignbrk) 忽略(不忽略)中斷(BREAK)
brkint(-brkint) 設置(清除)信號INTR為中斷信號
inlcr(-inlcr) 將換行轉換(不轉換)成回車
icrnl( -icrnl) 將回車轉換(不轉換)成換行
igncr(-ignrc) 忽略(不忽略)回車
iuclc( -iuclc) 將大寫字母轉換(不轉換)成小寫字母
輸出方式
olcut(-olcut) 將小寫字母轉換(不轉換)為大寫字母
onlcr(-onlcr) 輸出時將換行符轉換(不轉換)為回車換行
ocrnl(-ocrnl) 輸出時將回車符轉換(不轉換)為換行符
本地方式
echo (-echo) 設置(清除)回顯
stwrap(-stwrap) 截斷(不截斷)大於79個字符的行
echoctl(-echoctr) 將控制鍵回顯為^