ZTE Android 系统 ril 驱动
使用说明书
作者 | 李焰峰 10094119 |
评审 | 左 钊 10051139 陈飞雄 10088707 |
部门 | PC 软件部二科 |
版本 | V0.2 |
时间 | 2010-9-7 |
0. 概述
0.1 文档概述
本文档是提供给客户使用我司开发的 android 系统 ril 驱动的说明书,旨在指导客户快速、方便的使用安装调试我司的设备,迅速推出产品的目的;主要包括驱动说明、驱动集成方法、调试手段以及常见问题的分析等。
0.2 目的和读者
目的:
1. 指导客户快速、方便的使用安装调试我司的设备,迅速推出产品
2. 希望能对 android 系统 ril 驱动开发 有些许帮助。
读者:
1. 我司 TD 数据卡 / 模块在 android 系统上的开发者和使用者 ;
2. android 系统驱动入门人员 。
3. 我司内部测试人员。
1. 驱动说明
1.1 驱动版本说明
1.1.1 目录结构
ZTE 正式发布的 android 系统 ril 驱动的文件结构图如下:
1.1.2 文件说明
驱动版本中的文件说明:
******************************************************************
/so ril 驱动文件
libreference-ril-zte-v0.1.1.so
libril.so
/sh 要添加的 sh 脚本文件
init.gprs-pppd 启动 pppd 进程
ip-down
ip-up
/c
tty.c 改 android 系统自带的 tty.c 文件
/chm 用户手册
******************************************************************
1.2 功能说明
当前驱动版本所支持的功能列表:
编号 | 功能 | 是否支持 |
001 | 数据 | 是 |
002 | 短信 | 否 |
003 | 电话本 | 否 |
004 | 语音 | 否 |
005 | 视频 | 否 |
006 | 彩信 | 否 |
1.3 驱动框架
Ril 驱动的大致框架如下图 1-1 所示:
图 1-1 Ril 驱动框架
2. 驱动集成
2.1 添加系统组件
2.1.1 必备组件
n Modem 驱动
普通的 3G 数据卡( modem )采用 usb 接口,对上层的功能接口是串口,
在 Android 系统中通常使用 usb 转串口的驱动。
n Ppp 协议
Ril 驱动联网功能底层使用 ppp 协议创建数据链路,因此需要在内核中配置对 ppp 协议的支持。
2.1.2 Modem 驱动 添加
普通的 3G 数据卡( modem )采用 usb 接口,对上层的功能接口是串口,在 Android 系统中通常使用 usb 转串口的驱动。
Ppp 组件添加需要配置系统 android 系统内核,配置方法如下:
n cd kernel
n make menuconfig
n device drivers--->usb support--->usb serial converter support
选中如下组件:
USB driver for GSM and CDMA modems
选中后保存配置,重新编译内核即可。
2.1.2 p pp 组件添加
Ril 驱动联网功能底层使用 ppp 协议创建数据链路,因此需要在内核中配置对 ppp
协议的支持。
Ppp 组件添加需要配置系统 android 系统内核,配置方法如下:
n cd kernel
n make menuconfig
n device drivers--->network device support--->pppp surport
选中如下组件:
ppp filtering
ppp support for async serial ports
ppp support for sync tty ports
ppp deflate compression
ppp BSD-compress compression
选中后保存配置,重新编译内核即可。
2.2 增加设备驱动
驱动添加步骤如下:
Ø 找到内核源码文件option.c( 一般情况下,路径在../kernel/drivers/usb/serial/option.c )
Ø 在源码中查找如下代码(蓝色部分),查找到后,添加红色部分驱动代码:
static struct usb_device_id option_ids [] = {
{ USB_DEVICE(0x19d2, 0x1301) },
0x19d2 为 ZTE 厂商 ID
0x1301 为 M501 设备 ID
上面的 ID 根据具体的模块来定,不同的模块 ID 不同。
Ø 添加完成后,跟系统一起编译,烧入目标设备。
2.3 集成驱动文件
2.3.1 库文件
替换如下文件
libreference-ril-zte-v0.1.1.so
libril.so
到
Out/product/XXX/system/lib/ libreference-ril-zte-v0.1.1.so
Out/product/XXX/system/lib/ libril.so
Out/product/XXX/symbols/system/lib/ libreference-ril-zte-v0.1.1.so
Out/product/XXX/symbols/system/lib/ libril.so
2.3.2 sh 文件
将 init.gprs-pppd 文件放于 ../system/core/rootdir/etc/ 目录下
将 ip-down 、 ip-up 文件放于 ../out/product/XXX/system/etc/ppp/ 目录下
2.4 系统配置
Ril 驱动的使用还需要对 android 系统本身进行一些配置,如 init.rc 文件的修改, pppd 脚本的启动等,通过这些配置使得 ril 驱动能够正常的工作。
2.4.1 init..rc 文件修改
Ø 启动 ril service
service ril-daemon /system/bin/rild -l /system/lib/ libreference-ril-zte-v0.1.1.so -- -d /dev/ttyUSB*
socket rild stream 660 root radio
socket rild-debug stream 660 radio system
user root
group radio cache inet misc
Ø 启动 init.gprs-pppd 脚本
service pppd_gprs /etc/init.gprs-pppd /dev/ttyUSB0
user root
group radio cache inet misc
disabled
oneshot
2.4.2 启动 pppd 进程
Android 系统 ril 驱动最终是通过调用 pppd 进程创建 ppp 数据链路的,因此需要在必要的时候启动 pppd 进程; pppd 的进程是通过 init.gprs-pppd 脚本来启动的。
init.gprs-pppd 脚本位于版本 ../sh/ 目录下;
不同的 modom 需要配置 init.gprs-pppd 脚本中的 ttyUSB* 端口,此处 ttyUSB* 端口是指设备的 modem 口,具体视设备不同而不同。
2.4.3 设置端口属性
Ril 驱动部分需要对设备端口进行操作,因此,在初始化的时候需要设置端口属性为可读写,具体设置内容见下文红色部分:
static struct perms_ devperms[] = {
….
{ "/dev/ttyUSB0", 0660, AID_RADIO, AID_RADIO, 0 },
{ "/dev/ttyUSB1", 0660, AID_RADIO, AID_RADIO, 0 },
{ "/dev/ttyUSB2", 0660, AID_RADIO, AID_RADIO, 0 },
{ "/dev/ttyUSB3", 0660, AID_RADIO, AID_RADIO, 0 },
{ "/dev/ttyUSB4", 0660, AID_RADIO, AID_RADIO, 0 },
{ "/dev/ttyUSB5", 0660, AID_RADIO, AID_RADIO, 0 },
{ NULL, 0, 0, 0, 0 },
};
上述结构体位于文件 devices.c 中, devices.c 文件位于目录 ../system/core/init/ 下。
2.4.4 启动 init.gprs-pppd 可执行权限
Ril 驱动在数据联网阶段需要执行 init.gprs-pppd 脚本,因此在初始化阶段设置 init.gprs-pppd 脚本为可执行权限,设置方法见下文红色部分:
static struct fs_path_config android_files[] = {
….
{ 00777, AID_ROOT, AID_SHELL, "system/etc/init.gprs-pppd*" },
….
};
上述结构体位于文件 android_filesystem_config.h 中, android_filesystem_config.h 文件位于目录 ../system/core/include/private/ 下。
2.5 pppd 修改
Android 系统 ril 驱动流程操作的是设备的 AT 口,至于 modem 口的操作,如 ATD 命令的下则需要修改 android 系统 pppd 程序中的 tty.c 文件来完成。
tty.c 位于 ../external/ppp/pppd/tty.c
修改方法如下:
Ø 直接将随驱动一起提供的 tty.c 替换掉 ../external/ppp/pppd/tty.c 文件即可。
Ø 重新编译 pppd 模块。
3. 调试方法
3.1 抓 log 方法
3.1.1 抓取 ril 模块 log
连接好设备的调试线后,在 terminal 中按如下操作:
Adb shell
Logcat – b radio &
3.1.2 抓取 android 系统 log
连接好设备的调试线后,在 terminal 中按如下操作:
Adb shell
Logcat &
4. 常见问题分析
4.1 设备驱动问题
4.1.1 找不到设备
问题描述: ls /dev/ttyUSB* 找不到设备 |
问题原因: 1. 内核驱动没有配置 解决方法: 1. 配置内核驱动,方法参加 2.1.2 |
问题原因: 2. 驱动中没有添加设备的 vid 和 pid 解决方法: 2. 添加设备驱动,方法参加 2.1.2 |
|
4.2 pppd 问题
问题描述: Ril 启动后, ps 查看不到 pppd 进程 |
问题原因: 1. init.gprs-pppd 没有设置为可执行权限 解决方法: 1. 设置 init.gprs-pppd 脚本的可执行权限,方法参加 2.4.2 |
|
4.3 ril 驱动功能问题
4.3.1 联网功能
问题描述: 驱动集成后无法联网成功 |
问题原因: 1. 找不到设备 解决方法: 1. 配置内核驱动,方法参加 5.1 |
问题原因: 2. pppd 没有启动 解决方法: 2. 启动 pppd 进程,方法参加 5.2 |
问题原因: 3. modem 端口指定错误 解决方法: 3. 修改 init.gprs-pppd 脚本中的端口为 modem 口 |
问题原因: 4. AT 端口指定错误 解决方法: 4. 修改 init.rc 脚本中的 rild serverice 启动参数中指定的端口为 modem 口 |
问题原因: 5. APN 未设置 解决方法: 5. 启动 android 系统后了,在 setting 模块中设置 APN 参数为 cmnet 等移动网络 apn |
附录 A :参考及说明
Ø 图例说明:
本文档中未说明来源的图片均为 ZTE 所有。
图片编号 | 内容说明 | 来源 | 作者 | 采用目的 |
1-1 | Ril 驱动框架 | 网络 | 未知 | 用于简要的说明 ril 驱动的框架 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
附录 B :修改日志
编号 | 修改日期 | 问题描述 | 修改人 | 修改内容 |
1 | 2010-9-8 | 文档创建 | 李焰峰 | 文档创建 |
2 | 2010-9-21 | 添加 2.4.3 、 2.4.4 | 李焰峰 | 修改系统配置 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|