深入理解Android(03)——深入理解init初始化函数

本文深入探讨Android系统的init进程,作为用户空间的第一个进程,init负责创建关键进程、管理属性服务。主要内容包括init的main函数分析,解析init.rc配置文件,启动zygote服务,以及如何控制和启动其他service。
摘要由CSDN通过智能技术生成

1、概述

init是一个进程,确切地说,它是Linux系统中用户空间地第一个进程。由于Android是基于Linux内核地,所以init也是Android系统中用户空间地第一个进程,它的进程号是1。

init进程有几个重要地职责:

1)init进程负责创建系统中的几个关键进程。

2)Android系统有很多属性,init提供了一个property service(属性服务)来管理他们。

2、init分析

init进程的入口函数是main,代码如下:

int main(int argc, char **argv)
{
    int fd_count = 0;
    struct pollfd ufds[4];
    char *tmpdev;
    char* debuggable;
    char tmp[32];
    int property_set_fd_init = 0;
    int signal_fd_init = 0;
    int keychord_fd_init = 0;


    if (!strcmp(basename(argv[0]), "ueventd"))
        return ueventd_main(argc, argv);


    /* clear the umask */
    umask(0);


    // 创建一些文件夹
    mkdir("/dev", 0755);
    mkdir("/proc", 0755);
    mkdir("/sys", 0755);


    mount("tmpfs", "/dev", "tmpfs", 0, "mode=0755");
    mkdir("/dev/pts", 0755);
    mkdir("/dev/socket", 0755);
    mount("devpts", "/dev/pts", "devpts", 0, NULL);
    mount("proc", "/proc", "proc", 0, NULL);
    mount("sysfs", "/sys", "sysfs", 0, NULL);


        /* We must have some place other than / to create the
         * device nodes for kmsg and null, otherwise we won't
         * be able to remount / read-only later on.
         * Now that tmpfs is mounted on /dev, we can actually
         * talk to the outside world.
         */
    open_devnull_stdio();
    log_init();
    
    INFO("reading config file\n");
    init_parse_config_file("/init.rc");


    /* pull the kernel commandline and ramdisk properties file in */
    import_kernel_cmdline(0);


    get_hardware_name(hardware, &revision);
    snpri
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值