udc-serial驱动以及console控制台实现

1、概述
驱动使用了linux内核USB gadget驱动代码自带的u_serial和f_acm串口代码,在原来USB串口功能的基础上增加了console功能的实现。另外结合到我们的POS机原先的ttydev串口驱动也不可或缺,因此把之前的ttydev驱动移植到USB gadget驱动的composite实现了一个“Composite Gadget (ACM + TTYDEV)”驱动。
2、使用方法及驱动原理简介
插上USB线把POS连接到PC电脑后,如果第一次使用,在设备管理器会提示2个未知的USB设备。右键设备,然后选择更新驱动程序软件:

接下来选择‘浏览计算机以查找’:

选择解压后的驱动文件夹目录安装好windows驱动。安装好后显示增加的USB串口如下:

总的来说,基于udc的串口和POS机上自带的串口使用起来并没有什么大的区别,我们既可以收发数据,也可以当成串口终端来用。我们可以使用串口助手/secureCRT/xShell工具来打开这个名字Gadget Serial的串口,然后就可以使用了。另一个名字为USB Serial Port的串口是和TermAssist连接的,它和之前的USB串口一模一样。
Gadget Serial的串口可以用来作为控制台console口使用,所有内核打印的调试信息也会同时输出到这个串口。如果没有插上USB线,控制台输出的信息会先打印到内存当中,等USB线一旦插上而且又有新的控制台信息到来时,之前保存到内存当中的控制台信息会再次打印到USB串口,但是这个缓冲区大小是有限制的,缓冲区大小等于64KB(环形缓冲,用完了会从头开始)。同时,如果PC的串口对端关闭了的话,驱动同时能检测到。并且也会把后面的控制台信息打印到缓冲区当中。这样做可以避免因为插拔USB线丢掉很多有用的调试信息。
驱动使用的话只需要:

insmod /startup/modules/udc-serial.ko
即可。
如果要使用shell终端使用命令操作的话,还需要同时启动下面的进程:
agetty -n -l /bin/sh -L 115200 /dev/ttyGS0 vt100
这是因为我们的驱动是系统启动后插入到kernel的,因此init.rc当中的console进程不能作用到这个USB串口上。
需要注意的是,休眠唤醒过程中usb串口设备会在PC端重新枚举一次。因此休眠时最好把PC端的usb串口先关闭,等唤醒后再重新打开,这样就不会有问题了。

你可能感兴趣的:(物联网)