本文为中兴MG3732为例,介绍3G模块在android系统上的移植过程。
大部分3G模块厂商已经提供了3G模块的移植方法和需要的相关库,只需要按照手册中的步骤一步一步操作即可,下面一部分摘抄自中兴提供的说明,一部分是个人移植过程中遇到问题的一些解决方法,供大家参考。
MG3732是ZTEMT的一款移动终端,可以通过usb接口接入具备usb主机控制器功能的PC或AndroidPAD等其他终端设备。基于WCDMA无线通信技术,实现语音、短信、无线数据业务。
作为一个USB设备,它包括了几个接口。
-
接口0:实现了一个modem, 用于AT控制指令的发送和接收,完成拨号上网功能。
-
接口1:实现的串口用做serviceport,用于发送和接收终端服务,短信、电话等控制指令(DM/AT)的响应。
-
接口2:实现的串口作为接收和发送pcm语音数据。
-
接口3,4:(如果有)则作为diagnosticsport或GPSport,目前基本不使用该串口。
对应Linux串口设备文件分别是:/dev/ttyUSB0、/dev/ttyUSB1、/dev/ttyUSB2、/dev/ttyUSB3。
MG3732在我电脑上的显示如下:
lkp@lkp-desktop:/opt/EmbedSky/freescale/E9/TQIMX6_android-4.2.2$ ls /dev/ttyUSB* /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3 lkp@lkp-desktop:/opt/EmbedSky/freescale/E9/TQIMX6_android-4.2.2$
1、使用内核默认option驱动(推荐)
我们推荐的最方便简单的方法是,使用(Android)Linux内核自带的option.c模块;其中已经支持了不少usb3G模块设备。为了支持本公司新的模块,只需在option.c文件中添加对应的设备IDS就行了。
查询模块设备IDS的方法很简单,只需要lsusb命令就能列出Linux系统下的所有USB设备IDS了。
lkp@lkp-desktop:/opt/EmbedSky/freescale/E9/TQIMX6_android-4.2.2$ lsusb
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 008: ID 1a40:0101 Terminus Technology Inc. 4-Port HUB
Bus 002 Device 004: ID 046d:c05a Logitech, Inc. Optical Mouse M90
Bus 002 Device 009: ID 05e3:0723 Genesys Logic, Inc. GL827L SD/MMC/MS Flash Card Reader
Bus 002 Device 010: ID 19d2:ffeb ZTE WCDMA Technologies MSM
lkp@lkp-desktop:/opt/EmbedSky/freescale/E9/TQIMX6_android-4.2.2$
Bus 002 Device 010: ID 19d2:ffeb ZTE WCDMA Technologies MSM
{ USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffff, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfffe, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfffd, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfffc, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfffb, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfff1, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfff6, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfff7, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfff8, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfff9, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffef, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffee, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffed, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffeb, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffec, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffea, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffe9, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffe8, 0xff, 0xff, 0xff) },
加入ID后,重新编译内核即可。新的内核就能支持这些模块了。
2、无线接口层介绍
当模块驱动被内核加载并正确驱动后,该3G模块才能进行无线通信功能的应用开发。这在Android系统下称为无线接口层——RIL。即该文档所要说明的RIL驱动。也就是我们所提供的RIL驱动,是实现通信业务的核心功能模块。
对于RIL的java框架部分,也被分成了两个部分,一个是RIL模块,这个模块主要用于与下层的rild进行通信,另外一个是Phone模块,这个模块直接暴露电话功能接口给应用开发用户,供他们调用以进行电话功能的实现。这是属于Android应用程序的开发部分,简单了解即可。
所以RIL驱动模块,必需是针对不同的3G模块(模块)指令和通信业务功能定制的,以支不同应用需求。建议开发人员在使用我们的RIL驱动前,先了解下“3G模块的特点和构造”。
3、模块RIL驱动使用说明
3.1、目录结构说明在我们提供的附件压缩包中,一般包含如下文件和目录:
ppp 目录为pppd拨号脚本目录(该目录文件为测试脚本,可能不提供)ril目录为启动ril所需的相关文件(文件名可能会根据版本不同进行修改),主要包括以下几个:libzteevdo-ril.so:支持evdo制式的ril动态链接库libztewcdma-ril.so:支持wcdma制式的ril动态链接库zterilPara:参数配置文件ip-up:pppd连接之后调用的脚本文件注:libzteevdo-ril.so和libztewcdma-ril.so并不一定会同时提供,根据模块的制式通常只会单独提供其中一个。
1、拷贝libzteevdo-ril.so (libztewcdma-ril.so)以及zterilPara到 /system/lib目录下。service ril-daemon /system/bin/rild
确保/system/bin 目录下有pppd 和chat 两个程序,且具有执行权限。
添加ip-up到/system/etc/ppp/目录下。
2、修改系统初始化配置init.rc,将原本的rild服务
class main
socket rild stream 660 root radio
socket rild-debug stream 660 radio system
socket rild-ppp stream 660 radio system
user root
group radio cache inet misc audio sdcard_rw log
class main
socket rild stream 0660 root radio
socket rild-debug stream 0660 radio system
user rootgroup radio cache inet misc audio sdcard_rw log
3.3、修改相应的设备读写权限
包括/dev/ttyUSB0~/dev/ttyUSB3,有时会包括/dev/ttyUSB4和/dev/ttyUSB5,因此我们建议将所有的ttyUSB设备修改为radio用户可读写权限。修改init.freescale.rc文件,添加如下:
chmod 0777 /dev/ttyUSB0
chmod 0777 /dev/ttyUSB1
chmod 0777 /dev/ttyUSB2
chmod 0777 /dev/ttyUSB3
chmod 0755 /system/lib/usiuna-ril.so
chmod 0644 /system/lib/zterilPara
chmod 0755 /system/lib/libztewcdma-ril.so
chmod 0755 /system/lib/libzteevdo-ril.so
chown root /system/bin/pppd
chmod 4755 /system/bin/pppd
chown root /system/bin/chat
chmod 4755 /system/bin/chat
chmod 755 /system/etc/ppp/ip-up
setprop gsm.ril.delay 15
setprop ro.ril.wake_lock_timeout 300