property_service分析
通过以上分析,只有property_service对properties有写的权限,其它地方都只有读取的权限,Bionic中虽然也可以Set,但是实际还是通过socket把命令发给property_service实现。
system/core/init/property_service.c
system/core/init/property_service.h
property_service初始化
property_service的初始化动作的发起是在init中
system/core/init/init.c
int main(int argc, char **argv)
{
//完成初始化环境变量等动作
property_init();
//启动property_service
queue_builtin_action(property_service_init_action, "property_service_init");
for(;;) {
if (!property_set_fd_init && get_property_set_fd() > 0) {
ufds[fd_count].fd = get_property_set_fd();
ufds[fd_count].events = POLLIN;
ufds[fd_count].revents = 0;
fd_count++;
property_set_fd_init = 1;
}
for (i = 0; i < fd_count; i++) {
if (ufds[i].revents == POLLIN) {
if (ufds[i].fd == get_property_set_fd())
handle_property_set_fd();
else if (ufds[i].fd == get_keychord_fd())
handle_keychord();
else if (ufds[i].fd == get_signal_fd())
handle_signal();
}
}
}
void service_start(struct service *svc, const char *dynamic_args)
{
if (properties_inited()) {
//如果初始化完成了,获取