一、桥接功能:
PC通过USB数据线将数据传输到SP控制器中,这个过程中数据的传输需要通过桥接来实现。
二、桥接实现的过程:
PC端通过usb driver将数据传输给Android设备的虚拟串口ttyGS0,上层应用Bridge_Service操作ttyGS0将数据吞入,再通过串口ttyHS0吐出给SP的串口,SP接收并处理数据。
桥接成功后,PC可以给SP发送指令进行调试,给SP下载系统或固件等实现相关的一系列操作。
三、调试过程:
参考代码:svn://10.10.1.173/MSM8953_LA.UM.7.6.2/
在kernel中创建虚拟串口ttyGS0和串口ttyHS0:
1.ttyGS0:
驱动文件:driver/usb/gadget/function/u_serial.c(文件内有该虚拟串口的说明)
修改路径:(1)device/qcom/common/rootdir/etc/init.msm.usb.configfs.rc
添加以下内容:可参考
有些项目的此修改内容路径是device/qcom/common/rootdir/etc/init.qcom.usb.rc,这需要视不同模块平台而定。
(2)device/qcom/common/rootdir/etc/init.qcom.usb.rc
将此修改编译烧录后,/dev目录下生成ttyGS0节点,可手动输入指令设置属性,切换到ttyBridge模式:
adb root
adb shell setprop sys.usb.config ttybridge,adb
2.检测ttyGS0是否调通:
先切换桥接模式,然后在终端使用WIFI模式,通过指令cat dev/ttyGS0 打开该虚拟串口(该指令会先打开节点再读内容),使用串口助手打开设备COM口,发送数据,可以返回同样数据即可(类似串口回环)。
User版本需要增加修改:
3.ttyHS0:
(1)驱动文件路径:drivers/tty/serial/msm_serial_hs.c
(2)需要修改:
(3)检测ttyHS0是否调通:首先确认/dev/ttyHS0存在,然后通过硬件回环,短接uart的TX,RX; 在终端1输入指令cat dev/ttyHS0,再开一个终端2输指令echo testtty > dev/ttyHS0,如果终端1读到testtty字符串,则该串口调通,如果没有读到目标字符串或者dev/ttyHS0不存在,就需要从硬件开始检测问题;使用万用表测TX的电压,使用示波器测TX有没有数据发送,从这些方面着手。
四、Bridge_Service
该服务为中间层程序,主要获取ttyGS0的数据,然后转发给ttyHS0。有打开串口和切换到桥接模式的功能。源码路径:packages/odm/apps/BridgeService/