openWRT USB转串口调试记录
1 背景介绍
串口是用来调试开发板的接口,它是开发者与开发板之间的桥梁,通过串口可以输出开发板的启动日志或者输入命令来执行想要的操作。但是,目前大多数设备有USB接口,却不一定有串口。通过USB转串口,可以对外提供调试接口。
2 实验环境
- 使用的是Banana Pi BPI-R64开发板,上面的主控芯片是联发科的MT7622,其上有一个USB接口。使用的是openwrt开源系统。
- USB转串口线所使用的芯片是PL2303。
- 一台台式机,其后有9针的串口。
3 软件改动
- 在openwrt menuconfig中增加USB转串口线驱动的支持,目前市面上USB转串口线常用的芯片是PL2303,CH341等。
-
更改源码文件openwrt/target/linux/mediatek/base-files/etc/inittab,以将console输出重定向到USB口。
root@sw101:~/myProject/openwrt$ cat target/linux/mediatek/base-files/etc/inittab ::sysinit:/etc/init.d/rcS S boot ::shutdown:/etc/init.d/rcS K shutdown ::askconsole:/usr/libexec/login.sh ttyS0::respawn:/sbin/getty -L ttyUSB0 115200 vt100 //新增内容,将console输出重定向到ttyUSB0
Note:getty命令默认是不支持的,需要更改menuconfig中的配置。
有些帖子写直接修改/etc/inittab文件,经实测发现reboot后改动消失,而改源码的方式在reboot后仍然有效。
-
启动系统,将USB转串口线插入开发板的USB口,console会有log输出:
[ 31.910000] usb 1-1: reset full-speed USB device number 2 using xhci-mtk [ 32.100000] usb 1-1: pl2303 converter now attached to ttyUSB0
查看系统/dev目录,会新增一个ttyUSB0设备,至此,USB转串口驱动加载成功。
-
通过stty命令设置串口参数
Note:stty命令默认是不支持的,需要更改menuconfig中的配置。
stty使用教程参考链接:stty详解
"stty -F /dev/ttyUSB0 -a"命令用来查看串口参数:
root@OpenWrt:/# stty -F /dev/ttyUSB0 -a speed 115200 baud;stty: /dev/ttyUSB0 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; -parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke -flusho -extproc
由于前面修改inittab文件时,新增内容“ttyS0::respawn:/sbin/getty -L ttyUSB0 115200 vt100”中指定了波特率为115200,若"stty -F /dev/ttyUSB0 -a"命令输出波特率不是115200,需通过命令“stty -F /dev/ttyUSB0 ispeed 115200 ospeed 115200 speed 115200” 设置波特率。
-
通过MobaXterm软件连接串口
此时要小心,上面"stty -F /dev/ttyUSB0 -a"命令输出中有一个“-inpck“,表示没有奇偶校验,所以Parity那一项选None。