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会有特别的问题,到时候如果按上面步骤还不能上网的话,就需要特别处理了。


发布评论