Android培训班(9)
来源:互联网 发布:2016淘宝618大促 编辑:程序博客网 时间:2024/05/17 09:02
android系统的初始化过程是从那里开始呢?它在加载linux基本内核后,就开始运行一个初始化进程,叫做init进程,那么怎么样知道它是加载init进程的呢?难道上天就注定的吗?呵呵,不是的,原来是从android加载linux内核时,就设置了下面的参数:
Kernelcommand line: noinitrd root=/dev/nfs console=ttySAC0 init=/initnfsroot=192.168.1.103:/nfsbootip=192.168.1.20:192.168.1.103:192.168.1.1:255.255.255.0::eth0:on
在这行命令里,就是告诉linux内核初始化完成后开始运行init进程,由于init进程就是放在系统根目录下面。而这个进程的代码,就是位于源码的目录system/core/init下面,现在就来仔细地分析这个进程到底做了什么事情,以便理解整个系统运行情况。在分析过程中,会学习很多有用知识,甚至linux编程知识。这么有用,还等什么呢?现在就开始,找到目录system/core/init/init.c代码,先从main函数开始,如下:
#001 int main(int argc, char **argv)
#002 {
#003 int device_fd = -1;
#004 int property_set_fd = -1;
#005 int signal_recv_fd = -1;
#006 int keychord_fd = -1;
#007 int fd_count;
#008 int s[2];
#009 int fd;
#010 struct sigaction act;
#011 char tmp[PROP_VALUE_MAX];
#012 struct pollfd ufds[4];
#013 char *tmpdev;
#014 char* debuggable;
#015
#016
#017 act.sa_handler = sigchld_handler;
#018 act.sa_flags = SA_NOCLDSTOP;
#019 act.sa_mask = 0;
#020 act.sa_restorer = NULL;
#021 sigaction(SIGCHLD, &act, 0);
在上面这段代码里,调用函数sigaction来设置处理子进程发送回来的关闭信号,其中SIGCHLD是设置子进程信号处理,SA_NOCLDSTOP是表示子进程结束时不要向父进程发送SIGCHLD,sigchld_handler是信号SIGCHLD的处理函数。这样做的作用,就是如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。因此需要对SIGCHLD信号做出处理,回收僵尸进程的资源,避免造成不必要的资源浪费。
---------------------------------------------------------------------------------------------------
招收条件: 1、 自学能力强。 2、 有QQ或EMAIL。 3、 交学费1500元(送S3C6410的开发板)。 报名方式: 1、加入QQ: 9073204,注明Android。 2、EMAIL:9073204@qq.com
- Android培训班(9)
- Android培训班
- Android培训班
- Android培训班(96)内核解压过程9
- Android培训班(112)start_kernel函数9
- Android培训班(1)
- Android培训班(2)
- Android培训班(3)
- Android培训班(4)
- Android培训班(5)
- Android培训班(6)
- Android培训班(7)
- Android培训班(8)
- Android培训班(10)
- Android培训班(11)
- Android培训班(12)
- Android培训班(13)
- Android培训班(14)
- 模拟多线程之间的通信
- 【其他】【RQNOJ】函数的交点
- 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之65---BREW 应用中的音频播放
- win7旗舰版系统711错误
- ObQueryNameString一设计缺陷简述
- Android培训班(9)
- MFC CScrollView 对大视图出现滚动条回滚问题的解决
- SQL SERVER 与ACCESS、EXCEL的数据转换
- 生日快乐!
- C++学习笔记(一)
- wince下USB设备驱动程序导读
- 关于argc,argv
- KB956744补丁无法安装的解决办法[我只是碰到一个补丁无法安装, 问题并未解决]
- "There is only one way to do it, the right way” -------Guido van Rossum