Linux手机打电话代码分析
Android源代码分析之电话功能 RIL
根据:《Android 源码分析-打电话和发短信》一文(时间:2008-12-24 00:28来源:Android 开发者 作者:wsshy 点击: 2275次)
得知,智能手机的打电话功能是由RIL部分来实现的,见下图:
开始分析Android源代码中的RIL部分。
又上图,以及其他相关资料,我得知在Android中有一个叫rild的守护进程。我猜测此进程与电话的拨打接听有莫大关系。
而且在Android系统中存在这么一个rild的可执行文件,源代码中的"hardware/ril/rild"目录下有rild.c的文件 ,且在rild.c中,我们找到了main函数,即我们已经找到了rild守护进程的程序入口啦~
自赞一个先~
开始分析rild守护进程的代码。
在代码开始部分,有一些关于参数解析的片段,暂时先撇开一边,先讲一下rild守护进程的关于RIL的一些重要流程:
main()
{//省略n行
RIL_startEventLoop();
//省略n行
}
从名字上看就应该觉得这应该是一个起点——"startEventLoop"——一个开始进入时间循环的一点,让我们跟踪进去看看^_^
在"rild.c"中有这么一行:extern void RIL_startEventLoop();
说明RIL_startEventLoop函数的代码还在别处,经查找,发现是在这里:
"hardware\ril\libril"目录下的Ril.cpp文件中。
Get it~
在Ril.cpp中的RIL_startEventLoop中有这么一行:
ret = pthread_create(&s_tid_dispatch, &attr, eventLoop, NULL);
看来Android是在这里开辟一个线程来执行eventLoop循环,
这个eventLoop函数也在这个文件里(Ril.cpp)。
eventLoop中,主要执行了:
ril_event_init();
ril_event_set (&s_wakeupfd_event, s_fdWakeupRead, true,
processWakeupCallback, NULL);
ril_event_add (&s_wakeupfd_event);
ril_event_loop();
由函数名可猜测:
ril_event_set使用了新建一个ril事件的,
而ril_event_add 将该新事件添加进某执行队列中。
最后,在循环ril_event_loop中进行一个轮询,捕获事件,进而完成事件处理。
经过对ril_event_set和ril_event_add的代码阅读,证实了之前的两点猜测,
(ril_event_set和ril_event_add以及ril_event_loop函数代码在"ha
相关文档:
Linux Makefile文件的介绍
1. Makefile介绍
注意是“Makefile”,第一个字母大写,其余的都是小写。Makefile关系到了整个工程的编译规则,一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译, ......
1. Linux下与时间有关的结构体
struct timeval
{
int tv_sec;
&nbs ......
操作系统CentOS 5.3
系统安装完成后,安装必要的包
yum install autoconf gcc gcc-c++ libjpeg libjpeg-level
libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs ......
本不想写这些玩意儿,其实我并不喜欢它们,只不过没办法,谁叫我是靠这些家伙糊口的呢!
若干年前,我自认为很喜欢Linux;若干年后,我发现我当初是何等的天真。
恩,一分钱,一分货!我坚信这一点!所以我现在坚持用MS的Vista,正版的哦!
言归正传,前段时间因为工作,需要在Linux下操作鼠标,当然啦,肯定不会是在X-w ......
GCC 支持了许多不同的语言,包括 C、C++、Ada、Fortran、Objective C,Perl、Python 和 Ruby,甚至还有Java。
Linux 内核和许多其他自由软件以及开放源码应用程序都是用 C 语言编写并使用 GCC 编译的。
编译C++程序:
-c 只编译不连接
g++ file1 -c -o file1.o
g++ file2 -c -o file2.o
g++ f ......