start_class core 具体执行了啥
2016-04-28 13:22
429 查看
在android\system\core\rootdir\init.rc的 on boot最后start_class core
在android\system\core\init\keyword.h中对应的定义:
在android\system\core\init\builtin.c中:
在android\system\core\init\init_parse.c中:
对每一个core service执行:
继而走到service_start()中,定义在android\system\init\init.c
从init进程,fork出子进程,然后执行service进程
/system/bin/sysmon
/system/bin/logd
/sbin/healthd
/system/bin/prepare_param.sh /dev/block/platform/sdio_emmc/by-name/PARAM
/system/bin/lmkd
/system/bin/servicemanager
/system/bin/vold
/system/bin/surfaceflinger
另外
/sbin/eventd, 已经在on early-init中被启动了
被disabled的几个,也不在此时启动:
/system/bin/sh
/sbin/adbd --root_seclabel=u:r:su:s0
/system/bin/bootanimation
/system/bin/simpletest
on boot ........ class_start core on nonencrypted class_start main class_start late_start
在android\system\core\init\keyword.h中对应的定义:
KEYWORD(class_start, COMMAND, 1, do_class_start)
在android\system\core\init\builtin.c中:
int do_class_start(int nargs, char **args) { /* Starting a class does not start services * which are explicitly disabled. They must * be started individually. */ service_for_each_class(args[1], service_start_if_not_disabled); return 0; }
在android\system\core\init\init_parse.c中:
void service_for_each_class(const char *classname, void (*func)(struct service *svc)) { struct listnode *node; struct service *svc; list_for_each(node, &service_list) { svc = node_to_item(node, struct service, slist); if (!strcmp(svc->classname, classname)) { func(svc); } } }
对每一个core service执行:
service_start_if_not_disabled //定义在builtin.c
static void service_start_if_not_disabled(struct service *svc) { if (!(svc->flags & SVC_DISABLED)) { service_start(svc, NULL); } else { svc->flags |= SVC_DISABLED_START; } }
继而走到service_start()中,定义在android\system\init\init.c
void service_start(struct service *svc, const char *dynamic_args) { struct stat s; pid_t pid; int needs_console; int n; char *scon = NULL; int rc; //... pid = fork(); if (pid == 0) { //....... execve(svc->args[0], (char**) arg_ptrs, (char**) ENV); } }
从init进程,fork出子进程,然后执行service进程
/system/bin/sysmon
/system/bin/logd
/sbin/healthd
/system/bin/prepare_param.sh /dev/block/platform/sdio_emmc/by-name/PARAM
/system/bin/lmkd
/system/bin/servicemanager
/system/bin/vold
/system/bin/surfaceflinger
另外
/sbin/eventd, 已经在on early-init中被启动了
被disabled的几个,也不在此时启动:
/system/bin/sh
/sbin/adbd --root_seclabel=u:r:su:s0
/system/bin/bootanimation
/system/bin/simpletest
相关文章推荐
- java删除指定目录及其文件
- 团队冲刺第一阶段个人工作总结10
- 条形码类型及常见条形码介绍
- 那些年,我们用来“躲避”杀毒软件的工具
- 27-Roman to Integer-Leetcode
- Wcf简单实例1
- 构建之法阅读笔记五
- 【Web动画】CSS3 3D 行星运转 && 浏览器渲染原理
- GraphicsMagick在centos环境的安装
- maven的setting配置
- php 随机读取一维数组的一个或多个元素
- 命令行修改root密码
- 人生感悟(一)离职
- 视图
- EOS单向N对1关联
- double由于是双精度,所以比较大小不能直接用>,<或者=,需要使用BigDecimal,具体看例子
- 解读(五):分析KeyboardFragment, 带文字和表情的评论发表面板
- 团队项目个人工作总结(4.28)
- cscope插件,项目根目录、任意子目录下打开vim自动加载cscope.out
- 北京林业大学“计蒜客”杯程序设计竞赛 网络赛 A-喝酒【模拟】