android系列-init SecondStageMain

本文详细解释了Android系统启动时`property_init`函数的作用,包括系统属性的加载、覆盖和应用,以及`epoll`在I/O复用中的应用,特别是在网络编程中的高效事件处理。
摘要由CSDN通过智能技术生成

1.main 

//android10\system\core\init\main.cpp
int main(int argc, char** argv) {

    if (argc > 1) {

        if (!strcmp(argv[1], "second_stage")) {//4.second_stage
            r.eturn SecondStageMain(argc, argv);
        }
    }
}

2.SecondStageMain

//android10\system\core\init\init.cpp

int SecondStageMain(int argc, char** argv) {
    property_init(); //2.1.初始化系统属性

    //2.2.创建Epoll对象
    Epoll epoll;
    if (auto result = epoll.Open(); !result) {
        PLOG(FATAL) << result.error();
    }

    //注册epoll
    InstallSignalFdHandler(&epoll);

    //开启属性服务
    StartPropertyService(&epoll);

    //加载init.rc文件
    LoadBootScripts(am, sm);
}
2.1.property_init
//android10\system\core\init\property_service.cpp
void property_init() {
    mkdir("/dev/__properties__", S_IRWXU | S_IXGRP | S_IXOTH); //创建目录

    if (__system_property_area_init()) {}//初始化目录内存空间
    
}

(来自chaggpt的回答)

在 Android 系统初始化的过程中,`property_init()` 函数被用于初始化系统属性(system properties)。系统属性是一种键值对,用于存储和传递设备的配置信息、状态和运行时参数。

具体来说,`property_init()` 主要执行以下几个任务:

  • 读取默认属性值

从预定义的源(通常是设备树或其他配置文件)中读取系统属性的默认值。这些默认值在设备启动时会被加载。

  • 处理属性覆盖

如果设备的启动过程中存在覆盖属性的机制,`property_init()` 将会处理这些覆盖。覆盖属性通常是由引导加载程序、命令行参数或其他配置文件提供的。

  • 应用属性值

将最终确定的属性值应用到系统中。这些属性值可以在系统的整个生命周期中用于配置各种组件、决策和行为。

系统属性在 Android 中被广泛用于配置设备的各个方面,例如网络设置、硬件配置、调试开关等。`property_init()` 通常是在 Android 系统启动的早期阶段调用的,确保在其他组件和服务启动之前,系统属性已经得到适当的初始化。

请注意,具体的系统属性的定义和用途可能因设备型号、Android 版本和制造商而异。这些属性可以通过 Android 的属性服务(Property Service)进行访问和管理。

2.2.Epoll

`epoll` 是一种 I/O 复用机制,通常用于 Linux 操作系统中。它允许程序监控多个文件描述符上的事件,以便在它们变为可读、可写或发生错误时得到通知。`epoll` 通常用于提高 I/O 操作的效率,特别是在需要同时处理多个套接字连接的情况下。

使用 `epoll`的情景包括替代传统的 `select` 和 `poll`,尤其在高并发的网络编程中能够更有效地处理。通过注册多个文件描述符,程序可以等待其中之一或多个就绪,从而减少了不必要的轮询操作。

在 `epoll` 的使用过程中,程序需要创建一个 `epoll` 对象。通过调用 `epoll_create` 函数,可以创建这个对象,并得到一个文件描述符。之后,程序可以使用这个文件描述符来注册、删除文件描述符,并等待事件通知。

`epoll` 在 Android 和 Linux 上广泛应用于高效的事件驱动编程,特别适用于处理大量并发连接或大规模数据的场景。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值