Android 4.4 属性系统 - 初始化与系统服务启动
Android 4.4 的属性系统是一个关键的组件,它负责存储和管理 Android 系统的各种属性。属性系统提供了简单的方法来获取和设置属性,使得应用程序和服务可以在不同的进程中安全地共享数据。
本篇文章将详细介绍 Android 4.4 属性系统初始化的过程,以及如何启动系统服务。我们将分析源码并提供详细的注解,帮助您理解其中的工作原理。
属性系统初始化过程 在 Android 4.4 中,属性系统是由 init 进程维护的。在 init 进程的 main 函数中,调用了以下代码来启动系统服务:
```
// Start system services.
for (i = 0; i < ARRAY_SIZE(system_server_actions); i++) {
action_t *action = &system_server_actions[i];
if (!strcmp(action->name, "start_system_server")) {
property_set("ctl.start", "system_server");
break;
}
}
```
在这个 for 循环中,init 进程遍历了一个名为 system_server_actions 的数组,并调用了每个 action 的函数指针。当遇到名称为 “start_system_server”的 action 时,init 进程调用了 property_set 函数,设置了属性 “ctl.start” 的值为 “system_server”。这样一来,就会触发系统服务器进程的启动。
接下来,我们需要了解 property_set 函数是如何工作的。property_set 函数实际上是通过一个 socket 来发送属性设置请求的。属性服务端会在一个指定的 socket 上监听这些请求,然后进行处理。这也就意味着,属性系统的客户端(例如 init 进程)可以通过发送 socket 请求的方式来获取和设置属性。
系统服务启动过程 接下来,让我们来看看如何启动属性服务。在 init 进程中,调用了以下函数来启动属性服务:
```c
static void start_property_service(void)
{
struct prop_info *pi;
char buf[PROPERTY_VALUE_MAX];
const char *prop;
/* Load properties from files */
load_properties_from_file(PROP_PATH_SYSTEM_BUILD);
load_properties_from_file(PROP_PATH_SYSTEM_DEFAULT);
/* Start the property service */
pi = create.PropInfo("/dev/socket/property_service",
sizeof(buf), buf, PROPERTY_SERVICE_BACKLOG);
if (pi == NULL) {
LOG_FATAL("Failed to create property service socket\n");
exit(1);
}
/* Bind and listen on the socket */
if (bind.socket(pi->fd, (struct sockaddr *)&pi->sa, sizeof(pi->sa)) < 0 ||
listen(pi->fd, PROPERTY_SERVICE_BACKLOG) < 0) {
PLOG(FATAL) << "listen";
exit(1);
}
/* Wait for connections */
for (;;) {
socklen_t len = sizeof(pi->sa);
int client = accept(pi->fd, (struct sockaddr *)&pi->sa, &len);
if (client >= 0) {
handle_property_connection(client, pi->buf, sizeof(pi->buf));
} else {
PLOG(ERROR) << "accept";
}
}
}
```
start_property_service 函数首先从两个文件中加载属性:PROP_PATH_SYSTEM_BUILD 和 PROP_PATH_SYSTEM_DEFAULT。这两个文件包含了 Android 系统的一些基本属性,例如设备型号、硬件信息等等。
接着,函数调用 create_prop_info 函数创建了一个 prop_info 结构体,该结构体包含了属性服务所需的参数。create_prop_info 函数返回了一个指向 prop_info 结构体的指针,我们将这个指针保存在变量 pi 中。
接下来,函数调用 bind_socket 和 listen 函数绑定和监听属性
资源下载
加入本站QQ群获取更多实时游戏软件,线报,资源,福利点我加群
免责声明:
多特下载站仅为用户提供信息存储空间服务,所有资源均来源于网络或用户上传。我们无法对所有内容进行逐一审核,因此不保证资源的绝对准确性和完整性。用户在使用过程中应自行判断并承担相关风险。如涉及版权问题,请及时联系我们处理。对于因使用本站资源引发的一切争议、损失或法律责任,除法律明确规定外,多特下载站概不负责。请用户务必遵守法律法规,合理合法使用下载内容。侵删请致信E-mail: caozl@nbrjwl.com
同类推荐