第八章本地层启动流程.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八章本地层启动流程

第 * 页 Android系统移植 第五章 本地层的启动流程、调试和设计结构 一、本地层启动流程的本地阶段 二、本地层的结构设计 5.1 本地的启动流程 本地部分内容主要是介绍android系统流程的本地阶段,也就是android系统java部分之前的启动流程。 启动流程的概述:在java启动之前主要设计的几个实体:BootLoader、linux内核、根文件系统和init、init.rc、system文件系统及其中的一个作为守护进程的可执行程序。 启动步骤如下:bootloader运行(linux的通用部分,如uboot的启动);linux内核的运行(linux的通用部分);内核加载根文件系统(linux的通用部分,从flash中加载);init进程运行(用户空间的第一个进程);运行init.rc脚本;加载system和data文件系统;运行各种服务(主要为各个守护进程) Android系统启动时前面的部分和linux区别不大,直到进入用户空间,才体现出android系统和其他linux的区别。这些区别的起点就是被android系统中被运行的第一可执行程序init,其他程序都是被init直接或者间接启动的。 5.1.1 本地的启动流程 了解android系统启动流程需要关注以下几个方面: 系统总体的结构(几个单独的映像) 各个具体的程序的组成部分(如可执行程序和配置内容) 系统运行时的结构(分成若干个进程) 启动流程中系统控制权的转移。 图中的粗线部分表示系统宏观上的几个大模块,细线表示各个独立的文件,虚线的部分则表示了系统运行时的结构,表位数字的表示系统大概的启动流程。 5.1.2 BootLoader运行及加载内核 BootLoader运行到一定的阶段,将加载并启动linux内核,这是一个linux系统标准启动的过程,android中也要通过这种方式实现启动。 BootLoader需要传递内核使用的启动参数,然后跳转到内容地址运行,启动内核,内核启动后BootLoader交出控制权,由linux内核控制系统的启动过程。 一般的android使用的是U-boot,u-boot加载的内容为uImage格式的内核。 5.1.3 linux内核运行和加载根文件系统 Android的linux内核与其他系统中标准的linux内核基本相同。Android只是增加了一些自己的模块,在主体部分是标准的。 Linux内核被BootLoader加载后,传入命令行参数运行,此时内核的运行是一个标准的过程,各个系统差别不大。 Linux内核加载后,进入标准的执行过程,运行到一定的阶段后,将根据实际的命令行参数传入的内容加载根文件系统。在android系统中文件系统常用为内存盘的形式表示,作为ramdisk被加载。 Linux内核启动后会直接运行两个进程,1号进程为init为用户空间进程,2号进程为kthreadd(内核线程的Daemon,linux中进程和线程的概念是统一的,他将启动ksoftirqd、events和kswapd0等内核线程,这些内核线程负责系统的正常运行在各个linux系统中,内核线程的运行方式是相同的)是内核空间进程。 5.1.4 用户空间的第一个进程 Init是linux内核加载完根文件系统后,执行的第一个可执行程序,作为用户空间的第一个进程。 对于linux内核,他只需要知道要运行一个可执行程序,而不用关心这个可执行程序是什么。 对于andriod系统,init就是根目录中的init可执行那个程序,他被内核启动后,作为系用户空间的第一个进程来运行,init执行后系统空间部分进入了android系统特定的环境。 init是一个守护进程,是linux系统中用户空间的第一个进程,即1号进程。由于android是基于linux内核的,所以也是android系统中用户空间的第一个进程。Init进程需要完成极其重要的任务。 Init会在根目录中找到名为init.rc的脚本作为启动脚本,init.rc的脚本将被init可执行程序按照自己的逻辑运行,在不同的平台中,init.rc脚本中的内容可能有自己定义的部分。 5.1.5 挂接各个文件系统 在android系统中根文件系统是一个较小的部分,大约只有几百k字节,其中包括init、init.rc、和少数的几个目录,其他的文件需要init根据init.rc脚本的内容来进行挂接。 挂载的脚本如下: 上述代码描述了挂接system分区、其中的system挂接后被设置为只读方式,这里的几个文件系统都赖在mtd格式的分区。分区名称为system挂接的格式为yaffs2。 通常系统中还会关在date、userdata、cache等分区,当这个几个分区被挂接后,才可以使用sys

文档评论(0)

wuyuetian + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档