- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
init 进程 1init 启动过程
init 启动过程
众所周知,Linux 中的所有进程都是有init 进程创建并运行的。首先Linux 内核启动,然后在用户空间中启动init 进程,再启动其他系统进程。在系统启动完成完成后,init 将变为守护进程监视系统其他进程。Android 是基于Linux 的操作系统,所以init 也是Android 系统中用户空间的第一个进程,它的进程号是1。下面先简单的看一下init 进程的启动过程。
@/kernel/goodfish/init/main.c
[cpp] view plaincopyprint?1. static int init kernel_init(void * unused) 2. {
[cpp] view plaincopyprint?
3. /*
4. * Wait until kthreadd is all set-up. 5. */
6. wait_for_completion(kthreadd_done); 7. /*
8. * init can allocate pages on any node 9. */
10. set_mems_allowed(node_states[N_HIGH_MEMORY]); 11. /*
12. * init can run on any cpu. 13. */
14. set_cpus_allowed_ptr(current, cpu_all_mask); 15.
16. cad_pid = task_pid(current); 17.
18. smp_prepare_cpus(setup_max_cpus); 19.
do_pre_smp_initcalls();
lockup_detector_init(); 22.
smp_init();
sched_init_smp(); 25.
26. do_basic_setup(); 27.
/* Open the /dev/console on the rootfs, this should never fail */
if (sys_open((const char user *) /dev/console, O_RDWR, 0) 0)
printk(KERN_WARNING Warning: unable to open an initial console.\n)
;
(void) sys_dup(0);
(void) sys_dup(0);
34./*
34.
/*
35.
* check if there is an early userspace init. If yes, let it do all
36.
* the work
37.
*/
38.
39.
if (!ramdisk_execute_command)
40.
ramdisk_execute_command = /init;
41.
42.
if (sys_access((const char user *) ramdisk_execute_command, 0) != 0) {
43.
ramdisk_execute_command = NULL;
44.
prepare_namespace();
45.
}
46.
47.
/*
48.
* Ok, we have completed the initial bootup, and
49.
* were essentially up and running. Get rid of the
[cpp] view plaincopyprint?
50.
* initmem segments and start the user-mode stuff..
51.
*/
52.
53.
init_post();
54.
return 0;
55.
}
/* This is
/* This is a non init function. Force it to be noinline otherwise gcc
* makes it inline to init() and it becomes part of init.text section 3. */
4. static noinline int init_post(void)
5. {
6.
/* need to finish all async init code before freeing the memory */
7.
async_synchronize_full();
8.
free_initmem();
9.
mark_rodata_ro();
10.
syste
文档评论(0)