2 属性权限
我们来看下属性权限的整体流程,简单分析下这个模块。init.cpp -->property_init() init 进程
进入第二阶段的时候,初始化属性。
关键点,创建了一个目录,这个目录就是我们属性后续会存在的地方。加载对应文件中的配
置项,创建对应的 info 文件。
我们便知道了/dev/properties/property_info 存储着属性的相对应信息表。继续跟进
__system_property_area_init,初始化的代码在这里:
主 要 完 成 根 据 扫 描 出 来 的 信 息 , 创 建 对 应 的 上 下 文 , 这 里 我 们 以 模 拟 器 打 开
/dev/properties 目录,使用 ls -ZAl 可以看到。
cat 这个文件就能看到具体的属性和值信息,每一个占用大小为:
#define PROPERTY_KEY_MAX 32
#define PROPERTY_VALUE_MAX 92
这个是我们在传递参数的时候要注意的,我之前遇见过 KEY 超过了 32,导致重启的。
初始化完成后,进行加载属性,然后创建 socket 通信,我们之前讲过 init 最后就是处理系统
的属性更改这类,代码为:这里就是在加载我们系统中的 prop 值。
启动服务,监听 set 操作,在处理的时候会调用 check_mac 进行 selinux 权限的检测。
属性设置已经在 PropertySet 里面进行操作了。那么我们看看具体的操作路径。
static const char property_service_socket[] = “/dev/socket/” PROP_SERVICE_NAME; 代码逻辑,
打开对应的 socket 通信,发送消息,最终还是 init 的 property_service.cpp 在处理。
命令的看完了,我们看下系统方法,底层的 C 实现,
这里需要存储的属性,记录在/data/property persistent_properties 文件里面。在这里我们
再看一个文件,属性的就讲完了。