您的位置:首页 > 移动开发 > Android开发

Android 3G功能相关介绍(培训文档)

2011-12-31 12:09 429 查看
Android 3G功能相关介绍

开启3G功能的配置

1.Boarconfig.mk中添加

– BOARD_USE_AML_STANDARD_RIL := true

2.在对应的deivces下面的system.prop中修改:

– hw.nophone=false

3.init.rc中增加

– mount usbfs none /proc/bus/usb(要在on init部分)

– mkdir /dev/radio 0770 radio radio(在on boot部分)

– chmod 777 /system/etc/init-pppd.sh(在on boot部分)

init.rc中修改rild服务

#service ril-daemon /system/bin/rild/y / / service ril-daemon /system/bin/rild -l /system/lib/libaml-ril.so

socket rild stream 660 root radio socket rild stream 660 root radio

socket rild-debug stream 660 radio system

user root

group radio cache inet misc audio system group radio cache inet misc audio system disabled

service pppd_gprs /system/etc/init-pppd.sh

user rootuser root

group radio net_admin cache inet misc system disableddisabled

oneshot

3,在项目配置a00ref.mk中增加:

PRODUCT_NOPHONE := false

ifneq ($(PRODUCT_NOPHONE),true)

PRODUCT_PACKAGES += \

Phone \#这个apk必须有,负责管理3G数据和电话等

Contacts \#这个apk可以不要,是管理电话联系人

Mms#这个apk可以不要,是管理短信的

PRODUCT_PROPERTY_OVERRIDES += hw.nophone=false

else

PRODUCT_PACKAGES += Misc

PRODUCT_PROPERTY_OVERRIDES += hw.nophone=true

endif

修改好之后,重新编译rootfs

kernel里config需要做如下配置:

1,打开usb转串口

– Device Drivers -->

– [*]USB support -->

– <*>USB Serial Converter support -->

– <*>USB driver for GSM and CDMA modems

2,打开usbfs(Enable USB file system)

– Device Drivers-->

– USB support--->

– [*]USB device filesystem

3,Enabe CDC ACM

(CDC ACM是USB模拟UART的一种协议,如果3G Dongle采用这个协议,转换的串口名就是/dev/ttyACM0.

/dev/ttyACM1)

– Device Drivers -->

– [*]USB support -->

– <*>USB modem(CDC ACM)support

4,打开ppp协议

– Device Drivers -->

– [*]Network device support--->

– <*>PPP support

– [*]PPP multilink support

– [*]PPP filtering

– [*]PPP support for async serial ports

– [*]PPP support for sync tty ports

以此config重新编译内核。

3G功能底层代码(非java层)介绍

1,管理拨号与网络连接的守护进程rild

– 代码位置在rootfs/hardware/ril/rild

– 它负责调用modem的动态库,使modem初始化,拨号等等。

2,amlogic 3G功能modem动态库代码libaml-ril.so

– 代码位置在rootfs/hardware/amlogic/ril

– libaml-ril.so是负责与modem具体通信的动态库,包括下发和接受

modem命令、信息。

– rootfs/hardware/amlogic/ril/config里的文件是libaml-ril.so动

态库需要调用到的脚本和配置文件

3,pppd拨号进程

– 代码位置roofs \external\ppp\pppd

– Pppd是负责将ppp与modem的串口连接的守护进程

– 后面的数据都是通过该ppp端点ppp0接受和发送的

4,chat与modem自动通信程序

– chat是一个可执行程序。负责按chat的配置文件与modem通信。

5,usb_modeswitch

– 代码位置rootfs\external\libusb

– 负责将USB 3G Dongle转换成串口设备ttyUSB0,ttyUSB1,ttyUSB2等

如何支持一个新的3G Dongle

获取USB 3G Dongle的VID,PID

– 每一个USB设备都会有一个product ID(产品标识,简称PID)和

Vendor ID(厂商标识,简称VID),VID是由世界USB组织分配,

各个厂商唯一的标识号,PID由USB设备厂商自行分配。如华为的VID

是0x12D1,中兴的是0x19D2。

– 将Dongle插入运行ubuntu系统的PC,执行控制台lsusb命令,会打

出usb总线上的设备信息。

• 如:

• Bus 002 Device 004: ID 12d1:140c Huawei Technologies Co.,

Ltd.

• ID后面的12d1:140c即为VID和PID。

支持一个新的USB 3G Dongle到libaml-ril.so

1,内核USB模块支持该Dongle

– 在知道该USB 3G Dongle的PID,VID之后,查看内核的usb是否支持它,查看文

件option.c,路径是kernel\drivers\usb\serial。

例如华为的一些产品支持:

#define HUAWEI_VENDOR_ID 0x12D1

#define HUAWEI_PRODUCT_E600 0x1001

#define HUAWEI_PRODUCT_E220 0x1003

#define HUAWEI_PRODUCT_E220BIS 0x1004

#define HUAWEI_PRODUCT_E1401 0x1401

······

{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID,

HUAWEI_PRODUCT_E600, 0xff, 0xff, 0xff) },

如果没有,需要你参照这些格式添加,修改后需要重编译内核。

获取USB 3G Dongle的modem port和service port

Usb 3G – Dongle最终会转换成串口设备,如

ttyUSB0,ttyUSB1,ttyUSB2等,3G网络功能需要用用到2个串口口

:modem port和service port。数据流是通过modem port收发

,AT命令是通过service port下发,消息主动上传也是service port。

– 如果3G Dongle或mini PCIE式的模块资料有列出modem port和

service port。则可以直接使用。如果没有,则需要开发者自己获取

,例如在ubuntu系统里,安装usb_modeswitch工具后(通过aptget

install usb-modeswitch安装),插入3G dongle后,会自动

转换出串口设备,如果不转换,请查看你的ubuntu内核的usb驱动是

否支持该3G Dongle,方法如上一节所讲。

得到3G Dongle转换成串口后的modem port和service

port

– 在你的ubuntu系统能够将你的Dongle转换成串口之后,Dongle插

入PC,查看到/dev下有ttyUSB0,ttyUSB1,ttyUSB2等串口设备。

– 运行minicom串口工具,打开ttyUSB0,之后发送一个“at”,入伙

回复一个“ok”,并且不会主动出现信息,则是modem port,,p ,如果

发送“at”能够回复“ok”,并且主动出现信息,例如:(华为的

EC1261)^SIMST:1,则是service port。

Vold支持usb 3G Dongle

– 在rootfs\system\vold里的UsbMdmMgr.cpp文件,定义有支持的USB 3G Dongle的支持列表



• static MdmMgrInfo g_KnownMdms[] = {

• /* vid pid modem port */

• //ZTE MF633,MF637U ,MF110 dongle

• { 0x19d2, 0x0031, "/dev/ttyUSB2" },

• ……

• //LONGCHEER U6300/U6100 module

• { 0x1C9E, 0x9603, "/dev/ttyUSB2" },

• //HUAWEI E1750/E620 module

• { 0x12d1, 0x1001, "/dev/ttyUSB0" },

• ……

• }

Vold支持usb 3G Dongle

如果在UsbMdmMgr 文件里发现没有该– UsbMdmMgr.cpp3GDongle的信息,请

按照格式填写进g_KnownMdms[]。

– 将获取的VID填写到结构体的第一项。

– 将获取的PID填写到结构体的第二项。

– 将获取的modem port填写到结构体的第三项。

– 例如{ 0x19d2, 0x0031, "/dev/ttyUSB2" },

– Vold会依据插入的Dongle执行usb_modeswitch调用相应的配置文

件,如usb_modeswitch -c 19d2_0031。

Libaml-ril.so支持usb 3G Dongle

• 在rootfs\hardware\amlogic\ril\libaml-ril里的ril_ compatible.h里定义了表示支持的3G模组的结构体。

typedef struct {

int vid;

int pid;

const char *name;

unsigned int type;

const char *modem;

const char *service;

const char *diag;

const char *voice;

const char *gps;

unsigned int networktype;

unsigned int services;

• } MdmInfo;

Libaml-ril.so支持usb 3G Dongle

– 在rootfs\hardware\amlogic\ril\libaml-ril里的modem_support_list.h里定义了支持的3G模组。

例如

/* vid,pid */

/* name */

/* type */

/* modem port, service port, diag port, voice port, gps port */

/* networktype */

/* service */

//ZTE MF633, MF637U, MF110 dongle

{

0x19d2, 0x0031,

"ZTE MF637U or MF633 or MF110",

RIL_MODEM_TYPE_USB_DONGLE,

"/dev/ttyUSB2" "/dev/ttyUSB1" "/dev/ttyUSB0" /ttyUSB2 , /ttyUSB1 , /ttyUSB0 , NULL, NULL,

RIL_MODEM_NETWORK_TYPE_GSM|RIL_MODEM_NETWORK_TYPE_WCDMA,

RIL_SERVICE_TYPE_DATA_CALL|RIL_SERVICE_TYPE_SIM|RIL_SERVICE_TYPE_SMS|RIL_SERVICE_TYPE_NETWORK|RIL_SERVICE_TYPE_DEVICE

},

Libaml-ril.so支持usb 3G Dongle

– //ZTE MF210 module

{

0x19d2, 0x0117,

"ZTE MF210",

RIL_MODEM_TYPE_PCIE_MODULE,

"/dev/ttyUSB2", "/dev/ttyUSB1", "/dev/ttyUSB0", "/dev/ttyUSB2",

"/dev/ttyUSB4",

RIL_MODEM_NETWORK_TYPE_GSM|RIL_MODEM_NETWORK_TYPE_WCDMA,

RIL_SERVICE_TYPE_DATA_CALL|RIL_SERVICE_TYPE_SIM|RIL_SERVICE_TYPE_S

MS|RIL_SERVICE_TYPE_NETWORK|RIL_SERVICE_TYPE_DEVICE

},

做完以上修改后,需要重编rootfs。然后打上新的升级包,插

上3G模块测试吧!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: