Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2851370
  • 博文数量: 523
  • 博客积分: 11908
  • 博客等级: 上将
  • 技术积分: 5475
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-03 15:50
文章分类

全部博文(523)

文章存档

2019年(3)

2013年(4)

2012年(71)

2011年(78)

2010年(57)

2009年(310)

分类: LINUX

2011-07-25 11:56:09

(一)

1).
init进程启动控制台进程
init进程启动servicemanager进程(即runtime进程)
=> 打开/dev/binder等,并设置自己为runtime(context),用于对系统中的所有服务进行统一管理
init进程启动vold/debuggerd/rild进程
2).
init进程启动Zygote进程
3).
runtime进程请求Zygote启动SystemServer进程
4).
SystemServer进程启动两个本地服务: SurfaceFlinger/AudioFlinger
SurfaceFlinger/AudioFlinger向ServiceManager注册
5).
SystemServer进程启动其他Android服务(如WindowManager)
所有的Android服务向ServiceManager注册

(二)
android_src/system/core/init.c

parse_config_file("/init.rc")
snprintf(tmp, sizeof(tmp), "/init.%s.rc", hardware)
parse_config_file(tmp)
action_for_each_trigger("init", action_add_queue_tail) // 运行脚本文件中的on init段
action_for_each_trigger("early-boot", action_add_queue_tail);
action_for_each_trigger("boot", action_add_queue_tail);

(三)
init.rc
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
frameworks/base/cmds/app_process/app_main.cpp
main()
Step 1 => 解析虚拟机的运行参数
Step 2 => 解析dexopt运行参数
Step 3 => 初始化VM虚拟机(Initialize the VM) : 这里启动虚拟机后,这以后就可以运行java代码了
Step 4 => 初始化JNI模块(注册android函数) : 这以后,CPP和JAVA代码之间就可以互相函数调用了
Step 5 => 启动VM虚拟机(Start VM.  This thread becomes the main thread of the VM, and will not return until the VM exits)
Step 6 => 启动进程system_server => 该进程会启动android的后续全部进程
Step 7 => 启动SurfaceFlinger和AudioFlinger  
打开/dev/pmem设备:
开始android机器人开机动画的显示:
Step 8 => 启动其他的各种服务并将这些服务添加到ServiceManager中: 如PowerManager,ActivityManager,WindowManager,InputMethodManagerService,...
这里将启动android系统上电后用户看到的第一个锁屏显示界面(HomeApp) => 最后SystemServer::init2 将会调用 ActivityManagerService.systemReady 通过发送Intent.CATEGORY_HOME intent来启动第一个 activity 
          然后开始等待新的android应用启动请求(提供fork()服务)

(四)

 

阅读(1245) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~