openwrt娣诲姞usb鎺ュ彛 (openwrt涓巗tm32浼樺娍)

写在前面:

由于7628的外设支持比较少,所以在开发的时候有时会使用stm32的单片机来进行扩展,这时候就需要使用虚拟usb转串口功能,而一般自己开发的usb设备在openwrt中是无法识别的,所以我们需要在内核中添加识别代码。

单片机实现:

stm32官方lib中自带了使用CDC类实现usb转串口功能的例子,有兴趣的同学可以自己去网上寻找如何实现,本次只关心如何将他挂载到openwrt上。

如下所示,我们只需要关心单片机上的vid和pid的值。

#define USBD_VID 0x28E9
#define USBD_PID 0x0180

linux内核添加驱动:

由于内核中已经支持了ACM类的usb转串口驱动,所以我们不需要自己重新写驱动代码,只需要将我们的设备挂载上去即可。

打开build_dir\target-mipsel_24kec+dsp_uClibc-0.9.33.2\linux-ramips_mt7688\linux-3.18.109\drivers\usb\serial\option.c

在option_ids变量中添加我们自己的usb设备的id号;

stm32瀹夎openwrt,openwrt娣诲姞usb鎺ュ彛

效果:

插入usb设备后能够自动识别,在dev目录可以看到自动生成了ttyACM0文件;

root@ics:/dev# 
root@ics:/dev# [ 1176.220000] usb 1-1.3: new full-speed USB device number 13 using ehci-platform
[ 1176.390000] cdc_acm 1-1.3:1.0: This device cannot do calls on its own. It is not a modem.[0:0]
root@ics:/dev# ls
autofs mtd2ro mtdblock4 spidev32766.1
bus mtd3 mtdblock5 tty
console mtd3ro mtdblock6 ttyACM0

使用picocom工具可以直接对该串口设备进行操作:

root@ics:/dev# picocom -b 115200 /dev/ttyACM1
port is : /dev/ttyACM1
flowcontrol : none
baudrate is : 115200
parity is : none
databits are : 8
escape is : C-a
local echo is : no
noinit is : no
noreset is : no
nolock is : no
send_cmd is : sz -vv
receive_cmd is : rz -vv
imap is : 
omap is : 
emap is : crcrlf,delbs,
Terminal ready
d1k1d1j1f1l1s1k1k1d1k1d1k1d1d1l1k1j1;1l1k1j1a1l1k1j