Android平台开发-3G RIL模块分析
2013-11-20 15:51
531 查看
ril是radio interface layer的缩写,是android里电话部分很重要的一层,如图:
(1) ril层的作用就是消息中转,承上启下,和之前的红外的lirc差不多。
3G模块的驱动就是一个usbserial.ko,USB转串的驱动,insmod后会生成ttyUSB*节点,作为AT命令通道和数据传输通道,至于对应关系还要在研究,是否可以只用一个ttyUSB0还要研究,不过发送at命令至ttyUSB0还是没问题的,
cat /dev/ttyUSB0 & 然后再echo "at+cgmi" > /dev/ttyUSB0会返回
Manufacturer
OK
之所以会要有ril这一层来处理主要是考虑不同的通信模块AT命令集和格式不通,通过ril可以做一个中转,
当上层要打电话或3g上网时,将产生的消息转化为相应的AT命令发送到串口,再传给下层通信模块,反过来,当通信模块把数据传到串口时,ril再解析数据,将之转化为上层可是别的格式,以消息的方式发出,这就是ril的基本功能。
(2)rild守护进程(代码位置/hardware/ril/rild/rild.c)需要在init.rc中启动,
属于native framework层
service ril-daemon /system/bin/rild -l /system/lib/libreference-ril.so --
-d /dev/ttyUSB*
socket rild stream 660 root radio
socket rild-debug stream 660 radio system
user root
group radio cache inet misc audio
这里通过-l /system/lib/libreference-ril.so指定ril所用的功能库libreference-ril.so,很重要,负责解释上层的命令同时读取解析AT端口ttyUSB*信息,并上报给上层,代码位置/hardware/ril/reference-ril/reference-ril.c,
接下来建立了两个socket,用来和上层的java framework层通信
socket rild stream 660 root radio
socket rild-debug stream 660 radio system
同时注意到rild在启动的时候,还开启了两个以名称做标识的socket,rild和rild-debug,rild socket就是上层的framework和rild程序通信的手段,而rild-debug socket是留给radiooptions等程序调试使用的,后来这个rild-debug的socket起到了很重要的作用。
那rild做了什么呢,这个得在好好读程序分析,现在网上看来就是:
获取ril的参数->打开功能库->建立时间循环线程->执行RIL_Init->RIL_register。
首先从/proc/cmdline 的android.ril=读取tty节点信息,但是我的板子却没有android.ril参数,所以怀疑这是问题的一个关键所在,
代码中有个
#define KERNEL_OPTION "android.ril="
不知是要kernel配置是弄好才会产生还是这里加上/dev/ttyUSB0,明天试一下,因为proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间,运行时才产生的。
(1) ril层的作用就是消息中转,承上启下,和之前的红外的lirc差不多。
3G模块的驱动就是一个usbserial.ko,USB转串的驱动,insmod后会生成ttyUSB*节点,作为AT命令通道和数据传输通道,至于对应关系还要在研究,是否可以只用一个ttyUSB0还要研究,不过发送at命令至ttyUSB0还是没问题的,
cat /dev/ttyUSB0 & 然后再echo "at+cgmi" > /dev/ttyUSB0会返回
Manufacturer
OK
之所以会要有ril这一层来处理主要是考虑不同的通信模块AT命令集和格式不通,通过ril可以做一个中转,
当上层要打电话或3g上网时,将产生的消息转化为相应的AT命令发送到串口,再传给下层通信模块,反过来,当通信模块把数据传到串口时,ril再解析数据,将之转化为上层可是别的格式,以消息的方式发出,这就是ril的基本功能。
(2)rild守护进程(代码位置/hardware/ril/rild/rild.c)需要在init.rc中启动,
属于native framework层
service ril-daemon /system/bin/rild -l /system/lib/libreference-ril.so --
-d /dev/ttyUSB*
socket rild stream 660 root radio
socket rild-debug stream 660 radio system
user root
group radio cache inet misc audio
这里通过-l /system/lib/libreference-ril.so指定ril所用的功能库libreference-ril.so,很重要,负责解释上层的命令同时读取解析AT端口ttyUSB*信息,并上报给上层,代码位置/hardware/ril/reference-ril/reference-ril.c,
接下来建立了两个socket,用来和上层的java framework层通信
socket rild stream 660 root radio
socket rild-debug stream 660 radio system
同时注意到rild在启动的时候,还开启了两个以名称做标识的socket,rild和rild-debug,rild socket就是上层的framework和rild程序通信的手段,而rild-debug socket是留给radiooptions等程序调试使用的,后来这个rild-debug的socket起到了很重要的作用。
那rild做了什么呢,这个得在好好读程序分析,现在网上看来就是:
获取ril的参数->打开功能库->建立时间循环线程->执行RIL_Init->RIL_register。
首先从/proc/cmdline 的android.ril=读取tty节点信息,但是我的板子却没有android.ril参数,所以怀疑这是问题的一个关键所在,
代码中有个
#define KERNEL_OPTION "android.ril="
不知是要kernel配置是弄好才会产生还是这里加上/dev/ttyUSB0,明天试一下,因为proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间,运行时才产生的。
相关文章推荐
- 深入浅出 - Android系统移植与平台开发(十一) - Sensor HAL框架分析之一
- 3G移动行业发展、开发平台分析及案例
- Android之通信RIL模块分析
- 产品与服务--应用升级 - 腾讯Bugly - 一种愉悦的开发方式 _android anr_android anr分析_iOS崩溃日志分析平台
- 深入浅出 - Android系统移植与平台开发(十) - led HAL简单设计案例分析
- 【转】Android平台开发-3G function porting-3G功能移植
- 深入浅出 - Android系统移植与平台开发(十四) - Sensor HAL框架分析之四
- Android系统移植与平台开发(四) - led HAL简单设计案例分析
- 深入浅出 - Android系统移植与平台开发(八)- HAL Stub框架分析
- Android平台开发-3G function porting-3G功能移植
- 深入浅出 - Android系统移植与平台开发(十三) - Sensor HAL框架分析之三
- android下调试3G之Ril库分析
- 【Android 应用开发】Android 平台 HTTP网速測试 案例 API 分析
- 深入浅出 - Android系统移植与平台开发(十一) - Sensor HAL框架分析之一
- 深入浅出 - Android系统移植与平台开发(十四) - Sensor HAL框架分析之四
- 深入浅出 - Android系统移植与平台开发(十四) - Sensor HAL框架分析之四
- 深入浅出 - Android系统移植与平台开发(十一) - Sensor HAL框架分析之一
- 深入浅出 - Android系统移植与平台开发(十二) - Sensor HAL框架分析之二
- Android开发关于平台碎片化的分析
- 深入浅出 - Android系统移植与平台开发(十) - led HAL简单设计案例分析