android 中 ril 层调试笔记和理解

原创 2015年07月07日 16:10:08


 这段时间一直在弄android5.0 , 对 SELinux有了一定的了解,  上周是在折腾 4G 模块, 搞 ril  层的东西.

以前没有好好理解 ril 层是怎样工作的, 以前在网上看关于 ril 的文章, 感觉看不懂, 后来忙其它方面的东西, 没有深入了解 ril 层的内容.

这周有时间, 终于对ril的功能有了个真实大概了解.

由于android5.0 的安全审核机制,  在调试模块的时候, 没有像以前那样方便, 总要设置很多东西, 如果设置不正确, 可能会走弯路, 于是我打算用 android4.4.3版本来测试.

在实际调试的时候, 发现 android4.4.3 的安全机制也是 相对于 android4.4.2 有提高的, 但是没有 android5.0那么严格.


在android4.4.3 及以后的系统, 在 init.rc中定义一个服务 , 然后想在 ril 层中启动这个服务, 都是要把服务名称注册的白名单的. 就像这个网站提到的一样:


https://groups.google.com/forum/#!topic/android-platform/ajAxn-hYd6w


We're trying to setup Android to use PPP over a GPRS connection on the 
Omapzoom platform and have run into a question regarding UID 
permissions to startup a service in init.rc. 

To enable ppp the following property is set in init.rc: 

setprop ro.radio.use-ppp yes 

After doing this, the Java Telephony framework expects a service named 
"pppd_gprs" to be available to be started. This service is the ppp 
daemon, setting up the ppp link. So, we added the service in init.rc: 

service pppd_gprs /etc/init.gprs-pppd 
        user root 
        group radio cache inet misc 
        disabled 

Sidenote: the init.gprs-pppd script eventually starts up the ppp 
daemon, but is used as a wrapper to capture the exit status of the 
pppd. 

However, now that the service is defined, the java telephony stack 
complains that the user radio (uid 1001) is not permitted to start the 
pppd_gprs service: 

<3>init: sys_prop: Unable to start service ctl [pppd_gprs] uid: 1001 
pid:821 
init: sys_prop: Unable to start service ctl [pppd_gprs] uid: 1001 
pid:821 

Since the telephony stack has to be uid 1001, permissions has to be 
added. After some code-crawling we found a working hack to this 
problem. In order to allow the Radio user to start pppd we could add 
an entry to the control_perms “whitelist” in /system/core/init/ 
property_service.c. 

Like this: 

/* 
 * White list of UID that are allowed to start/stop services. 
 * Currently there are no user apps that require. 
 */ 
struct { 
    const char *service; 
    unsigned int uid; 
} control_perms[] = { 
     {"pppd_gprs", AID_RADIO }, 
     {NULL, 0 } 
}; 

So, here's the question: 
Is hardcoding like this really the only way of giving permissions for 
a non-root user to start a service ? If so, that seems very 
inflexible.  


在遇到服务不能启动的时候, 可以参考这些....


另外记录一下 ril 层的大概工作步骤:


在init.rc 中定义了 rild 服务, 给 这个程序传递 libreference-ril.so  库,  和一个 能控制 模块 的设备节点, (例如 : /dev/ttyUSB1  ,  /dev/qcqmi1 )

 libreference-ril.so 这个库文件可以 又厂商更名, 例如: ( libreference-ril-ubox.so )

有 了控制模块 的 设备节点(句柄) 之后,  所以对 模块的 操作  + 发送 指令 等 流程和实现, 都在  libreference-ril.so 这个库里面了.

现在的 4G 模块做得很方便使用,  很多工作在模块中已经做好了,  我们只需要使用几条简单的 指令,  告诉模块 我们需要连接 哪个服务商, (CMNET, 3GNET) , 使用 2G, 3G或者 4G 功能, 就可以了. ril 层一般会帮你把很多指令做好了,  并且会把 模块协商获得的 IP, net gate, DNS 等解析出来, 

然后调用 setprop 命, 将这些信息记录到android 的属性列表中,

然后就可以调用类似 dhcp 功能的 服务项,  将这些信息 配置到 网络接口 ( eth1,  或者 usb1 等等)中....

这些步骤之后, 就可以上网了......




ril 库中有很多对 模块的控制流程和步骤.  待我去研究研究再来记录.....

这笔记适合那些 ril 新手参考......





相关文章推荐

在android 4.2.2上调试MU609步骤,WCDMA

1.修改kernel\drivers\usb\serial\option.c,添加MU609的ID号 [cpp] view plaincopyprint? #define HUAWEI_PR...
  • hbk320
  • hbk320
  • 2015年09月14日 23:06
  • 1739

基于Android6.0的RIL框架层模块分析

本文与另外一篇分析RIL底层模块的文章是姐妹篇: 基于Android6.0的RIL底层模块分析 根据手机网络制式的不同,通常系统中会扩展Phone.java这个类,扩展成GSMPhone和CDMAP...

Android6.0的phone应用源码分析(5)——RIL层分析

1.1   RIL概述 由于Android开发者使用的Modem是不一样的,不同方案使用的Modem也不一样,GSM和CDMA就差别更大了,所以各种指令格式,初始化序列都不一样,为了消除这些差别,A...

SEAndroid安全机制对Android属性访问的保护分析

Android系统通过属性暴露设备和运行时信息,并且可以通过设置属性来控制系统行为。因此,属性也像文件一样,是一种需要保护的资源。在启用SEAndroid之前,敏感属性只能被预先设定的进程进行设置。启...

MTK 增加usb转串口modem调试步骤

1.MTK在上层默认是支持双卡操作的,应该在上层将其改为单卡操作。 2.MTK RIL层是支持mux协议转换的,和谷歌原生RIL的差距也比较大,这个地方也要改到改掉。具体涉及到device.mk i...

关于 android RIL 调试

转载 首先,要了解RIL是如何启动的,拿G1做个例子 init.rc: service ril-daemon /system/bin/rild socket rild stream 6...

Android RIL 调试分析全记录

以前没有调试过RIL的东西, 从零开始, 花了两周时间,终于拨号成功,这里发表出来与大家共享经验,少走弯路.     上一篇文章是一个成功拨号的Android RIL log, 这里主要结合上一篇l...

Android RIL源码研究笔记 の ril (二)

这篇文章介绍ril.cpp中实现部分代码中的四个字符串输出函数及其相应的枚举类型。首先看requestToString()函数的 代码,它的功能是将将ril_command.h和ril_unsol_...
  • ACE1985
  • ACE1985
  • 2011年12月09日 21:52
  • 3863

android RIL源码研究

这篇文章介绍ril.cpp中实现部分代码中的四个字符串输出函数及其相应的枚举类型。首先看requestToString()函数的代码,它的功能是将将ril_command.h和ril_unsol_co...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android 中 ril 层调试笔记和理解
举报原因:
原因补充:

(最多只允许输入30个字)