雷电等基于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