更新時間: 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)