Chinaunix首页 | 论坛 | 博客
  • 博客访问: 849022
  • 博文数量: 168
  • 博客积分: 5431
  • 博客等级: 大校
  • 技术积分: 1560
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-22 11:56
文章存档

2015年(2)

2014年(1)

2013年(12)

2012年(12)

2011年(15)

2010年(5)

2009年(16)

2008年(41)

2007年(64)

分类: 嵌入式

2010-09-08 09:53:58

Android系统初始化流程分析
  本文介绍Android的kernel启动后,第一个初始化进程的处理内容(类似于Meego的init进程,但是Android简化了很多标准的Linux处理方式,应该是为了加速系统的启动速度的缘故)。

  从上电复位到bootloader的运行以及kernel的初始化部分会有专门的文章进行介绍,此处专注于系统此后的行为!
  kernel初始化最后阶段的thread退化(退化的方式另有专门的文章)成init进程。我们就分析下这个进程的内容!。
system/core/init/init.c
 除了Linux下创建进程的一些标准处理后(signal处理,mask初始化等)便开始正式的初始化。
1)这部分完成基本的fs的初始化。
    mkdir("/dev", 0755); 用于后面创建设备节点
    mkdir("/proc", 0755);为mount procfs准备
    mkdir("/sys", 0755); 为mount sysfs作准备

    mount("tmpfs", "/dev", "tmpfs", 0, "mode=0755"); mount tmpfs
    mkdir("/dev/pts", 0755);
    mkdir("/dev/socket", 0755);
    mount("devpts", "/dev/pts", "devpts", 0, NULL); mount登录终端设备
    mount("proc", "/proc", "proc", 0, NULL); mount procfs
    mount("sysfs", "/sys", "sysfs", 0, NULL); mount sysfs
需要值得一提的是Linux下是使用script来完成处理的,而Android却是直接使用syscall,应该也是为了提升系统的开机速度考虑的。
2)创建null device,重定向标准输入,输出以及标准出错。由于Android基本处于非terminal下,所以很多输出都是重定向如null的。同时为了跟踪系统的行为Android使用kmsg系统。
    open_devnull_stdio();
    log_init();  初始化kmsg系统
3)这部分内容比较重要。关于/init.rc是一个配置文件。我们可以按照语法添加自己的初始化命令以及注册service等。详细清看我转载的一篇文章 android的init.rc文件的语法
    parse_config_file("/init.rc");





阅读(1692) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~