start_class core 具体执行了啥

来源:互联网 发布:淘宝如何开通淘金币 编辑:程序博客网 时间:2024/05/18 00:45


在android\system\core\rootdir\init.rc的 on boot最后start_class core

on boot    ........class_start coreon 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



0 0