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 RIL 调试分析全记录

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

关于 android RIL 调试

转载 首先,要了解RIL是如何启动的,拿G1做个例子 init.rc: service ril-daemon /system/bin/rild socket rild stream 6...
  • lhf_tiger
  • lhf_tiger
  • 2012年04月24日 14:55
  • 4505

Android平台开发-3G RIL模块分析

ril是radio interface layer的缩写,是android里电话部分很重要的一层,如图:   (1) ril层的作用就是消息中转,承上启下,和之前的红外的lirc差不多。 3G模...
  • hanmengaidudu
  • hanmengaidudu
  • 2013年11月20日 15:51
  • 1530

android系统中间件移植-3G4G通信模块适配

一、在内核源码drivers/usb/serial/option.c文件中添加相关模块的pid和vid,有些模块还需要厂家提供的系统上的驱动。 下面列举我们公司常用的模块以及pid和vid: { ...
  • zailushangha
  • zailushangha
  • 2015年01月23日 09:49
  • 5411

Android 4G专网模块信号的上报过程

最近一直在调试Android的4G专网模块;一个困扰了我很久的问题昨天也解决了;就是4G信号强度是怎么报上来的?怎么在右上角通知栏显示的?现在也清楚了;                 其实只修改re...
  • houyizi337825770
  • houyizi337825770
  • 2016年05月26日 09:18
  • 3774

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

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

Android RIL 调试分析全记录

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

将Android平台的RIL层移植到基于LINUX的通用平台的研究与实现

  • 2017年08月07日 09:07
  • 160KB
  • 下载

Android6.0的phone应用源码分析(7)——RIL层框架分析2

这里再次 将Android6.0的phone应用源码分析(5)中最后的流向图拿出来 从图中可以看到RILJ通过RILD向MODEM发送命令后,接受response是通过readerLoop异...
  • u014386544
  • u014386544
  • 2016年07月23日 14:13
  • 343

Android 无线接口层RIL

Android 无线接口层RIL(Radio Layer Interface) Android 无线接口层(Radio Layer Interface) INDEX 介绍 RIL 初始化 RIL ...
  • zlcchina
  • zlcchina
  • 2013年10月14日 22:56
  • 588
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android 中 ril 层调试笔记和理解
举报原因:
原因补充:

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