雷電等基于VirtualBox的Android模擬器映射串口和測試CSerialPort串口功能
1. 修改VirtualBox配置文件映射串口
模擬器配置文件vms/leidian0/leidian.vbox
。
在UART標簽下增加(修改完成后需要將leidian.vbox修改為只讀)
<Port slot="1" enabled="true" IOBase="0x2f8" IRQ="3" path="COM2" hostMode="HostDevice"/>
<UART><Port slot="0" enabled="false" IOBase="0x3f8" IRQ="4" path="C:\Users\Administrator\AppData\Roaming\ChangZhi2\kernel.log" hostMode="RawFile"/><Port slot="1" enabled="true" IOBase="0x2f8" IRQ="3" path="COM2" hostMode="HostDevice"/>
</UART>
參數配置可參考VirtuaBox User Manual的Serial Ports章節。
Port:
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
Mode:
Disconnected
Host Device
Host Pipe
Raw File
TCP
2. 重啟模擬器,檢查串口是否可用
重啟模擬器后,通過命令查看是否生效
- dmesg查看內核串口初始化信息
$ dmesg | grep ttyS1
<6>[ 0.837015] 00:05: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A
- setserial查詢串口信息
# setserial -g /dev/ttyS1
/dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3
- stty打開串口
# stty -F /dev/ttyS1
speed 9600 baud; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-brkint -imaxbel
- echo寫入數據測試
echo "test" > /dev/ttyS1
3. 編譯CSerialPort的android測試程序
$ git clone --depth=1 https://github.com/itas109/CSerialPort.git
$ cd CSerialPort/example/CommAndroid
$ gradlew assembleDebug> Task :app:externalNativeBuildDebug
Build cserialport_arm64-v8a
Build cserialport_x86BUILD SUCCESSFUL in 28s
28 actionable tasks: 28 executed
4. 模擬器運行CommAndroid
- 修改串口權限
# chmod 666 /dev/ttyS1
- 運行CommAndroid測試串口收發
選擇可用串口 - open - send