内核Anriod系统init过程分析详解.doc

curl_init  时间:2021-04-19  阅读:()

Anriod系统init过程分析详解

本文使用的软件版本Android:4.2.2Linux内核 3.1 .10本文及后续几篇文章将对 Android的初始化init过程进行详细地、剥丝抽茧式地分析并且在其中穿插了大量的知识希望对读者了解Android的启动过程又所帮助。本章主要介

绍了与硬件相关初始化文件名的确定以及属性服务的原理和实现。

Android本质上就是一个基于Linux内核的操作系统。与Ubuntu Linux、 Fedora Linux类似。只是Android在应用层专门为移动设备添加了一些特有的支持。既然Android是Linux内核的系统那么基本的启动过程也应符合Linux的规则。如果研宄过其他Linux系统应该了解一个完整的Linux系统首先会将一个Linux内核装载到内存也就是编译Linux内核源代码生成的bzlmage文件对于为

Android优化的Linux内核源代码会生成zlmage文件。该文件就是Linux内核的二进制版本。由于zlmage在内核空间运

行而我们平常使用的软件都是在应用空间运行关于内核空间和应用空间的详细描述可以参考《Android深度探索

卷1  :HAL与驱动开发》一书的内容在后续的各卷中将会对Android的整体体系进行全方位的剖析 。内核空间和应用空间是不能直接通过内存地址级别访问的所以就需要建立某种通讯机制。

目前Linux有很多通讯机制可以在

用户空间和内核空间之间交互 例如设备驱动文件位于/dev目录中 、内存文件/proc、 /sys目录等 。了解Linux的同学都应该知道Linux的重要特征之一就是一切都是以文件的形式存在的例如一个设备通常与一个或多个设备文件对

应。这些与内核空间交互的文件都在用户空间 所以在Linux内核装载完需要首先建立这些文件所在的目录。而完成这

些工作的程序就是本文要介绍的 initoInit是一个命令行程序。其主要工作之一就是建立这些与内核空间交互的文件所在的目录。当Linux内核加载完后要做的第一件事就是调

在分析init的核心代码之前还需要初步了解 init除了建立用init程序也就是说 init是用户空间执行的第一个程序

一些目录外还做了如下的工作 1 .初始化属性2.处理配置文件的命令主要是initre文件 包括处理各种Action 。3.性能分析使用bootchart工具 。4.无限循环执行command

启动其他的进程 。 尽管init完成的工作不算很多 Init程序不过代码还是非常复杂的并不是由一个源代码文

件组成的而是由一组源代码文件的目标文件链接而成的

这些文件位于如下的目录 <Android源代码本目录其中init.c是>/system/core/init init的主文件现在打

开该文件看看其中的内容。由于init是命令行程序所以分析init.c首先应从main函数开始现在好到main函数 代码如下 int main int arge,char**argv

int fd_count=0;struct pol lfd ufds[4];char*tmpdev;char*debuggable;chartmp[32];int property_set_fd_init=0int signal_fd_init=0; int

iIsI_ch下ar面ger的=代fals码e;开始建立if各(!s种trc用mp户(ba空se间na的me目(ar录gv[O ]如),’ueventd")) /dev

、 return ueventd_main(argc,argv); if

/(p!srotrcm、 p/(sbyasse等name(argv[O]), "watchdogd"))mkdir(r"e/dtuervn"wat0c7h5d5o)g;d_main(argc,argv) /*clear theumasmkk*/dir(7proc",0755);mkdir("/sys" 0755);mount("tmpfs", "/dev", "tmpfs",

MS—NOSUID, "mode=0755");

mkdir("/dev/pts" 0755);mkdir(*7clev/socket",0755);mountf’devpts", "/dev/pts", "devpts",0,NULL)mountf’proc""/proc" "proc" 0,NULL);mo u ntf’sysfs" "/sys" "sysfs" 0,N U L L) /*/dev/.booting文件是否可读写和建7close(open("/dev/.booting" O_WRONLY|O_CREAT

0000)); open_devnul l_stdio();klog_init();

//初始化属性property_i n it();get_hardware_name(hardware,

&am p;revision);

//处理内核命令行process_kernel_cmdl ine();

. . . . . . . . is_charger=!strcmp(bootmode, "charger");

INFO("property init\n");if (! is_charger)property_load_boot_defaults(); INFOf’reading configfi le\n");

//分析/init.rc文件的内容init_parse_config_fi le(7init.rc");. . . . . //执行初始化文件中的麴action_for_each」 rigger("init" action_add_queue_tai l);//在charger模式下略过mount文件系统的工作if

(! is_charger) {action_for_each_trigger("early-fs",action_add_queue_tai l);action_for_each_trigger("fs" action_add_queue_tai l);action_for_each_trigger(Hpost-fs",action_add_queue_tai l);

action_for_each_trigger("post-fs-data",action_add_queue_tai l);

}queue_bui ltin_action(property_service_init_action,"property_service_init");queue_bui ltin_action(signal_init_action, "signaljnit");queue_bui ltin_action(check_startup_action,

"check—startup"); if (is_charger) {action_for_each_trigger("charger",action_add_queue_tai l);

}else{action_for_each」 rigger(''early-boot"action_add_queue_tai l);action_for_each_trigger("boot",action_add_queue_tai l);

/* run al l property triggers based on currentstate of the properties 7

HostNamaste$24 /年,美国独立日VPS优惠/1核1G/30GB/1Gbps不限流量/可选达拉斯和纽约机房/免费Windows系统/

HostNamaste是一家成立于2016年3月的印度IDC商家,目前有美国洛杉矶、达拉斯、杰克逊维尔、法国鲁贝、俄罗斯莫斯科、印度孟买、加拿大魁北克机房。其中洛杉矶是Quadranet也就是我们常说的QN机房(也有CC机房,可发工单让客服改机房);达拉斯是ColoCrossing也就是我们常说的CC机房;杰克逊维尔和法国鲁贝是OVH的高防机房。采用主流的OpenVZ和KVM架构,支持ipv6,免...

月神科技 国内上新成都高防 全场八折促销续费同价!

月神科技是由江西月神科技有限公司运营的一家自营云产品的IDC服务商,提供香港安畅、香港沙田、美国CERA、成都电信等机房资源,月神科技有自己的用户群和拥有创宇认证,并且也有电商企业将业务架设在月神科技的平台上。本次带来的是全场八折促销,续费同价。并且上新了国内成都高防服务器,单机100G集群1.2T真实防御,上层屏蔽UDP,可定制CC策略。非常适合网站用户。官方网站:https://www.ysi...

无忧云:洛阳BGP云服务器低至38.4元/月起;雅安高防云服务器/高防物理机优惠

无忧云怎么样?无忧云,无忧云是一家成立于2017年的老牌商家旗下的服务器销售品牌,现由深圳市云上无忧网络科技有限公司运营,是正规持证IDC/ISP/IRCS商家,主要销售国内、中国香港、国外服务器产品,线路有腾讯云国外线路、自营香港CN2线路等,都是中国大陆直连线路,非常适合免备案建站业务需求和各种负载较高的项目,同时国内服务器也有多个BGP以及高防节点。一、无忧云官网点击此处进入无忧云官方网站二...

curl_init为你推荐
支持ipad支持ipad支持ipad步骤ios重庆电信网速测试电信100M下载速度多少M,为什么我家里电信100M下载速度最快5M美妙,是不是严重缩水win7如何关闭445端口如何判断445端口是否关闭谷歌sbgoogle一下"SB",虽然显示的是baidu排第一,链接的不是baidu.icloudiphone自己用icloud把iPhone抹掉了.激活却不是自己的id怎么破win7关闭135端口win7下怎么关135和8909端口chromeframeicharts 怎么支持ie8
沈阳虚拟主机 vps服务器租用 中国域名网 sharktech 荣耀欧洲 美国主机评论 全球付 gateone 免费静态空间 权嘉云 河南移动邮件系统 hostloc 佛山高防服务器 中国电信测速网 web服务器安全 超级服务器 工信部icp备案查询 广东服务器托管 中国电信宽带测速 数据湾 更多