- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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 well 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_uniqueServiceParser());
parser.AddSectionParser(on, std::make_uniqueActionParser());
parser.AddSectionParser(import, std::make_uniqueImportParser());
// 加载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/app_process64 -Xzygote /system/bin --zygote --sta
您可能关注的文档
- analogy类比.ppt
- Analysis-of-Wild-Honey-Suckle-诗歌-野金银花分析.ppt
- and5.1PowerManagerService深入分析(三)updatePowerStateLocked函数.doc
- ANDREW 智能天线.ppt
- android AlarmManager 研究.docx
- Android 4.2 由Context引发的思考.docx
- Android Activity的启动过程.doc
- Android Device Administration 设备管理器——实现一键锁屏.doc
- Android RecyclerView工作原理分析.doc
- Android Service的启动过程.doc
最近下载
- 职场心理学培训课件.pptx VIP
- 第一单元作文“青春情怀”导写及范文 统编版高中语文必修上册.docx VIP
- 2024年大学毕业生薪资待遇与行业发展报告.pptx VIP
- 2025年新版招聘看护队考试题及答案.pdf VIP
- 2025最新小学“学宪法讲宪法”知识竞赛试题库及答案.docx VIP
- 博饼规则(含图及奖品分布).xls VIP
- 2024年~2016年历年事业单位场监督管理局面试真题及答案解析18套.docx VIP
- 从商业角度看《孙子兵法》受日本人喜爱的原因.docx VIP
- 抗精神药物常见不良反应.pptx VIP
- 统编版高中语文必修上册第一单元“青春价值”单元主题作文导写及范文赏析3篇.docx
文档评论(0)