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模块测试吧!!!
开启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模块测试吧!!!
相关文章推荐
- 12 Three.js官方文档介绍的相关对象功能列表
- Android ListView相关功能介绍
- Android开发的测试功能的开发文档学习--介绍
- Android 微信摇一摇功能实现详细介绍
- JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
- Android Pmem相关介绍
- Android Binder ProcessState & IPCThreadState相关介绍
- android 蓝牙锁应用开发实例(三)蓝牙相关功能实现【第一部分】
- Graphics->BitmapDecode 介绍Android 平台对图像的解码功能,Android平台支持PNG, JPEG图像格式,并可以支持 gif动画。
- Android Wifi 相关功能
- Android热点相关功能开发
- Android Studio 2.0 功能介绍
- Android开发之深入理解Android 7.0系统权限更改相关文档
- Android O 前期预研之二:HIDL相关介绍
- Android 官方培训文档 笔记 (1-2)
- Android语音通话实现方案及相关技术介绍
- android、ios当前主流推送平台(消息推送)功能、性能对比技术研发文档
- android内存相关介绍
- Android平台开发-3G function porting-3G功能移植
- android SlidingMenu相关介绍