vbox 上的 serial port (com port)

更新時間: 31/1/12

VirtualBox Version: 4

 

介紹:

在 Linux 的 Kernel debug 上, Serial Port 相當有用, 尤其在 Kernel Crash 的情況

 

使用:

在 Host 上設定很"簡單",  只要正確地設置好 Port Mode 及 Port Path 就可了

Port Mode: socket / pipe / Host Device

用來設定 Guest 內的 serial port 如何對應在 Host 上

不同 Host 有不同的 Port Path 設定

 

Port Path: Host OS Arg

Windows: pipe name

\\.\pipe\<name>

Linux: unix socket

/tmp/vmsocket

Host Device

M$: COM?
Linux: /dev/ttyS?

在 vbox v4 上, 每 VM 只支援兩個 serial port (UART)

 

Example:

vbox showvminfo openwrt | grep -i uart

UART 1:          I/O base: 0x03f8, IRQ: 4, attached to device '/dev/ttyS3'

 


 

Linux 上 Serial ports 的設定

 

VM 有的 serial port:

vbox modifyvm  <vm>  --uart<1-N>   [ off | <I/O base> <IRQ>]

# 設定vm 有什麼 serial port

 

比如 vm 有 com1:

vbox modifyvm openwrt --uart1 0x3f8 4

 

Serial Port 的 IO 及 IRQ:

  • COM1: I/O base 0x3F8, IRQ 4
  • COM2: I/O base 0x2F8, IRQ 3
  • COM3: I/O base 0x3E8, IRQ 4
  • COM4: I/O base 0x2E8, IRQ 3

 

設置如何與 host 連接:

vbox modifyvm  <vm>  --uartmode<1-N> <arg>

arg:

disconnected

devicename:  Host_M$:COM?   
                     Host_Linux:/dev/ttyS?

Example:

查看有什麼 serial port 可用:

ls /dev/ttyS*

其中那些不能用:

lsof /dev/ttyS*

 

綁上

vbox modifyvm <vm>  --uartmode1  <mode>

mode:

  • disconnected
  • server <pipe>   <--  UNIX domain socket
  • client <pipe>   < -- not created by VirtualBox, but assumed to exist already.
  • file <file>
  • <devicename>

 

綁上主機的 serial port:

vbox modifyvm openwrt --uartmode1 /dev/ttyS3

# Host 上的 ttyS3 相當卡 vm 的 ttyS0

綁在檔案上:

touch /tmp/openwrt

vbox modifyvm openwrt --uartmode1 server /tmp/openwrt

client:

socat /tmp/openwrt tcp-listen:9000 &

telnet localhost 9000

Testing:

當 vm 啟動後:

lsof /dev/ttyS3

COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
VBoxHeadl 30329 root   20u   CHR   4,67      0t0 1374 /dev/ttyS3

 


 

Win32 Example:

 

Vbox 上的設定:

 

Host上Client的設定:

 


 

Summary of named pipes on Microsoft Windows:

  • Byte-oriented or Message-oriented
  • Half-duplex or full-duplex
  • Standard device I/O handles (FileRead, FileWrite)
  • Blocking or Nonblocking read and write
  • Peekable reads (read without removing from pipe's input buffer)
     

 

 

 

 

Creative Commons license icon Creative Commons license icon