Android驱动启动流程,android开机启动流程简单分析.doc

android开机启动流程简单分析

android开机启动流程简单分析

android启动

当引导程序启动Linux内核后,会加载各种驱动和数据结构,当有了驱动以后,开始启动Android系统同时会加载用户级别的第一个进程init(system\core\init\init.cpp)代码如下:

int main(int argc, char** argv) {

.....

//创建文件夹,挂载

// Get the basic filesystem setup we need put together in the initramdisk

// on / and then we'll let the rc file figure out the rest.

if (is_first_stage) {

mount("tmpfs", "/dev", "tmpfs", MS_NOSUID, "mode=0755");

mkdir("/dev/pts", 0755);

mkdir("/dev/socket", 0755);

mount("devpts", "/dev/pts", "devpts", 0, NULL);

#define MAKE_STR(x) __STRING(x)

mount("proc", "/proc", "proc", 0, "hidepid=2,gid=" MAKE_STR(AID_READPROC));

mount("sysfs", "/sys", "sysfs", 0, NULL);

}

.....

//打印日志,设置log的级别

klog_init();

klog_set_level(KLOG_NOTICE_LEVEL);

.....

Parser& parser = Parser::GetInstance();

parser.AddSectionParser("service",std::make_unique());

parser.AddSectionParser("on", std::make_unique());

parser.AddSectionParser("import", std::make_unique());

// 加载init.rc配置文件

parser.ParseConfig("/init.rc");

}

加载init.rc文件,会启动一个Zygote进程,此进程是Android系统的一个母进程,用来启动Android的其他服务进程,代码:

从Android L开始,在 /system/core/rootdir 目录中有 4 个 zygote 相关的启动脚本如下图:

在init.rc文件中,有如下代码:

import /init.environ.rc

import /init.usb.rc

import /init.${ro.hardware}.rc

import /init.usb.configfs.rc

import /init.${ro.zygote}.rc

注意到上面的代码import /init.${ro.zygote}.rc,这里会读取ro.zygote这个属性,导入相应的init.rc文件。

ro.zygote的属性可为:zygote32、zygote64、zygote32_64、zygote64_32。

对于这个属性的解释如下。

init.zygote32.rc:zygote 进程对应的执行程序是 app_process (纯 32bit 模式)

init.zygote64.rc:zygote 进程对应的执行程序是 app_process64 (纯 64bit 模式)

init.zygote32_64.rc:启动两个 zygote 进程 (名为 zygote 和 zygote_secondary),对应的执行程序分别是 app_process32 (主模式)、app_process64。

init.zygote64_32.rc:启动两个 zygote 进程 (名为 zygote 和 zygote_secondary),对应的执行程序分别是 app_process64 (主模式)、app_process32

主流的机型属性都为zygote64_32,我们来看看init.zygote64_32.rc文件:

service zygote /system/bin/a

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值