2024年1月3日发(作者:)

For Chinaleap OnlyAndroid系统3G Dongle 调试

这里介绍一款新的USB 3G Dongle在Android调试步骤。 首先介绍的是vid_pid文件制作过程,然后是RIL库的修改。

1. 查看vid_pid文件内容

先打开 目录 usb_modeswitch.d 下的vid_pid文件,看看文件中包含什么内容。这里以华为的 12d1_1003 和 12d1_1031 为例:

例子1: 12d1_1003 文件内容:

例子2:12d1_1031 文件内容:

For Chinaleap Only

参考上面两个例子(或者打开更多的例子),我们要制作的文件vid_pid格式如下:

参考例子1

参考例子2

2. 查看vid,pid

这里借助Windows系统的设备管理器来得到vid,pid. 具体步骤如下。

2.1 查看DefaultVendor, DefaultProduct,

首先打开”设备管理器”,插入3G Dongle,等”设备管理器”出现新设备后,如下图所示:

For Chinaleap Only

出现上图后,右键单击“属性”,然后选择“详细信息”,将会看到下面图片:

For Chinaleap Only

上图 USBVID_20A6&PID_F00E 中的

VID_20A6&PID_F00E 表示该设备的vid=0x20a6, pid=0xf00e.

这里就是DefaultVendor, DefaultProduct。即

DefaultVendor=0x20a6

DefaultProduct=0xf00e

这样的的话,要写的vid_pid文件名为:20a6_f00e.

注意,若在安装USB CD-ROM中的应用程序前,这里有串口设备和Modem设备,则不用看下面的步骤了,直接按例子1写个vid_pid文件就可以了,如下所示:

File 20a6_f00e

For Chinaleap Only2.2 查看TargetVendor, TargetProduct

得到DefaultVendor, DefaultProduct 后,就可以安装USB CD-ROM中的应用程序了,如何安装请参考USB CD-ROM中自带的说明文档。 应用程序安装完后,打开该应用程序,这个时候3G Dongle会切换成另外一个组合设备,该组合设备有几个串口和一个或者几个USB Mass Storage设备。

我这边测试的3G Dongle的应用程序如下所示:

打开应用程序后,将会出现新的串口和Modem口,如下图所示:

按前面方法得当vid,pid,如下图所示:

For Chinaleap Only

由上图,我们知道了新的串口设备vid, pid, 另外一个串口以及Modem口的vid,pid一般都一样的,所以看一个串口设备的vid, pid就可以了。

故有:

所以目前可以先写个vid_pid文件了,如下:

File 20a6_f00e

For Chinaleap Only目前,只剩下 MessageContent的内容了。

2.3 读取MessageContent.

读取MessageContent需要借助Bus Hound, 可以用 bushound5.0完美版。这里用BusHound来抓取USB设备的数据流。

下载,安装 bushound5.0完美版,请到网上搜索下载,然后安装。

 设置bushound

设置bushound前,先插入USB 3G Dongle.因为下面需要选择USB 设备。

 设置”Settings”

For Chinaleap Only

 设置”Devices”

这里选择USB 3G Dongle相关的USB Mass Storage设备

 抓取MessageContent.

 Capture

点击“Capture”,然后,点击”Run”,如下图所示

For Chinaleap Only

 抓取MessageContent

打开USB 3G Dongle应用程序,等2秒左右,点击”Stop”停止抓图, 这时候切换的数据已经抓取到了,也就是MessageContent的内容,抓图如下:

For Chinaleap Only

上图红线所示就是要抓的MessageContent. 两个:

or

上面两个MessageContent建议都试下,有些3G设备两个都可以用,有些只能用其中的一个。所以vid_pid文件也就完成了,如下:

File 20a6_f00e

2.4 修改option.c驱动.

得到 TargetVendor=0x20a6,TargetProduct= 0x1105 后,需要在option.c中的数组option_ids 添加vid, pid 信息。修改如下:

先做如下声明:

For Chinaleap Only/* PuChuang WCDMA */

#define PUCHUANG_VENDOR_ID 0x20A6

#define PUCHUANG_PRODUCT_E003 0x1105 //wcdma

然后在数组option_ids中添加vid,pid信息:

static const struct usb_device_id option_ids[] = {

{ USB_DEVICE(PUCHUANG_VENDOR_ID,

PUCHUANG_PRODUCT_E003) },

}

这里如果没有TargetVendor,TargetProduct,则用DefaultVendor, DefualtProduct代替。

在option.c中添加vid,pid后,重新编译linux内核,这样的话,option驱动才能支持这个新的USB 设备。

编译linux内核后,还得重新编译android.

烧录新的image. Android启动后把上面得到的vid_pid文件拷贝到./etc/usb_modeswitch.d 目录下(也可在烧录前就放到./etc/usb_modeswitch.d中去)。

重新启动Android设备,插入该3G Dongle, 执行命令:ls /dev, 应该就可以看到ttyUSBx 设备了。

3. 区分AT口和PPP口

在Android环境下需要知道哪个ttyUSBx是AT口,哪个是PPP口(即Modem口)。这里还是在Windows环境来确定。

打开设备管理器,展开”调制解调器”和“端口(COM和LPT)”如下图所示:

For Chinaleap Only

3.1 确定 PPP口

For Chinaleap Only

选择上图红色Modem口,单击右键,选择“属性”,然后点击“详细信息”,得到下图。

For Chinaleap Only

由 可以得到vid,pid和ttyUSBx中的x. 由MI_00可以知道该端口在Linux系统对应的串口是ttyUSB0, 故这个设备的PPP口是ttyUSB0, 记住这个,下面在ril 库代码修改时将用到。

3.1 确定 AT 口

选择端口下面的设备,这里选择带”Application”字样的串口。如下图所示:

For Chinaleap Only

,然后点击“详细信息”,得到下图:

同样的,单击右键,选择“属性”

For Chinaleap Only

由 中的MI_02得知AT口在Linux系统将是ttyUSB2, 这个信息在ril库代码修改中会用到。

这里会遇到的问题就是:有几个串口,而且从名字看不知道哪个口是Application Interface(即AT口),我怎么知道哪个串口就是AT口呢?请看以下方法:

 确定AT口

AT口的确定需要超级终端或者其它串口工具来发送命令 “AT”来测试。这里用超级终端来测试,这里选择COM11, 该串口的设置如下:

For Chinaleap Only

设置好串口后,发送指令”AT”测试,敲入’AT’,按回车,得到’OK’ 。如下所示:

注意: 这里若提示打不开设备,则可能是你没有关闭该3G Dongle自带的应

For Chinaleap Only用程序。

4. RIL库代码修改

这里有两种方法来添加新3G USB Dongle信息,请选择其中的一种即可。

4.1 方法一,修改reference-ril.c

目前发布的RIL库代码比较完善了,一般情况下,针对一款新的3G Dongle,只需修改reference-ril.c就可以了。

找到文件:./hardware/ril/reference-ril/reference-ril.c, 然后找到数组:

static const struct modem_info modem_table[]=

找到该数组后添加该3G Dongle的信息就可以了。 针对本文档这款3G Dongle添加的信息如下:

上图蓝线所示的3G Dongle的信息在前面的步骤都已经给出,结构体成员意思看这个结构体的定义。

修改完reference-ril.c后,编译该库,改名为, 拷贝到./system/lib中,重新启动系统,这款3G Dongle就能上网了。

4.2 方法二,修改./etc/3g_

如何添加3G USB Dongle信息,请参考3g_。

5. 其它问题

3G Dongle在Android系统上的上网调试比较复杂,可能一些个别的3G

Dongle会有特别的问题,到时候如果按上面步骤还不能上网的话,就需要特别处理了。