Android-根文件系统启动过程.docVIP

  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 根文件系统启动过程 [置顶] Android 根文件系统启动过程分类: Andriod 2012-01-05 18:15 515人阅读 评论(1) 收藏 举报 androidactionsignalsystemjavaapi 在Android系统启动时,内核引导参数上一般都会设置“init=/init”, 这样的话,如果内核成功挂载了这个文件系统之后,首先运行的就是这个根目录下的init程序。这个程序所了什么呢? 我们只有RFSC(Read the Fucking Source code)!! init程序源码在Android官方源码的system/core/init中,main在init.c里。我们的分析就从main开始。 init: (1)安装SIGCHLD信号。(如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。因此需要对SIGCHLD信号做出处理,回收僵尸进程的资源,避免造成不必要的资源浪费。) (2)对umask进行清零。 何为umask,请看/showArticle/53978.shtml (3)为rootfs建立必要的文件夹,并挂载适当的分区。 /dev (tmpfs) /dev/pts (devpts) /dev/socket /proc (proc) /sys (sysfs) (4)创建/dev/null和/dev/kmsg节点。 (5)解析/init.rc,将所有服务和操作信息加入链表。 (6)从/proc/cmdline中提取信息内核启动参数,并保存到全局变量。 (7)先从上一步获得的全局变量中获取信息硬件信息和版本号,如果没有则从/proc/cpuinfo中提取,并保存到全局变量。 (8)根据硬件信息选择一个/init.(硬件).rc,并解析,将服务和操作信息加入链表。 在G1的ramdisk根目录下有两个/init.(硬件).rc:init.goldfish.rc和init.trout.rc,init程序会根据上一步获得的硬件信息选择一个解析。 (9)执行链表中带有“early-init”触发的的命令。 (10)遍历/sys文件夹,是内核产生设备添加事件(为了自动产生设备节点)。 (11)初始化属性系统,并导入初始化属性文件。 (12)从属性系统中得到ro.debuggable,若为1,則初始化keychord監聽。 (13)打開console,如果cmdline中沒有指定console則打開默認的/dev/console (14)讀取/initlogo.rle(一張565 rle 壓縮的位圖),如果成功則在/dev/graphics/fb0顯示Logo,如果失敗則將/dev/tty0設為TEXT模式并打開/dev/tty0,輸出文本“ANDROID”字樣。 (15)判斷cmdline 中的參數,并设置属性系统中的参数: 1、 如果 bootmode為 - factory,設置ro.factorytest值為1 - factory2,設置ro.factorytest值為2 - 其他的設ro.factorytest值為0 2、如果有serialno参数,則設置ro.serialno,否則為 3、如果有bootmod参数,則設置ro.bootmod,否則為unknown 4、如果有baseband参数,則設置ro.baseband,否則為unknown 5、如果有carrier参数,則設置ro.carrier,否則為unknown 6、如果有bootloader参数,則設置ro.bootloader,否則為unknown 7、通过全局变量(前面从/proc/cpuinfo中提取的)設置ro.hardware和ro.version。 (16)執行所有触发标识为init的action。 (17)開始property服務,讀取一些property文件,這一動作必須在前面那些ro.foo設置后做,以便/data/p不能干預到他們。 - /system/p - /system/p - /data/p - 在讀取默認的property后讀取presistent propertie,在/data/property中 (18)為sigchld handler創建信號機制 (19)確認所有初始化工作完成: device_fd(device init 完成) property

文档评论(0)

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

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

1亿VIP精品文档

相关文档