Android系统10 RK3399 init进程启动(三十三) property属性系统框架

 配套系列教学视频链接:

      安卓系列教程之ROM系统开发-百问100ask

说明

系统:Android10.0

设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)

前言

属性系统在Android系统开发中会经常用到, 本章节重点让大家快速了解属性的作用,以及Android系统设计的框架模型。


一, property属性框架介绍

   属性是android系统用于为系统提供公共信息, 进程间通信,以及用于行为控制的键值对, key一般都是以点分格式存在, 如[ro.kernel.lcd.width]: [720], 同时键值对一般存放在共享内存中供各个进程使用,  网上最简单, 最基本的模型如下所示:


其实Android老版本就是这样设计的, 作为开发使用属性, 理解上面模型基本也足够了, 但是新版本Android系统, 在上面的基础做了部分改动, 主要增加了selinux权限控制, 新框架模型如下所示:

主要分成以下部分:

  1. Property service, 作为服务端,其实就是init进程,通过epoll机制处理socket的请求, 负责修改各个共享内存中的属性值。
  2. Property client, 作为客户端,其实就是各种想获取和修改属性的进程,通过socket发送请求来修改属性,获取属性不需要套接字, 但是需要一定的selinux权限。
  3. 属性文件,包含了系统默认的属性,如/system/build.prop, /default.prop文件。
  4. 属性信息文件, /dev/__properties__/property_info文件, 汇总了所有的属性文件中的属性, selinux信息, 而这些信息又来自于system, vendor,odm等分区的property_contexts文件。
  5. Selinux属性文件: /dev/__properties__/u:object_r:xxx:s0, 存储了拥有相同selinux安全上下文的属性,修改和获取属性,其实就是修改和和获取此文件的属性。也是这个模型中的共享内存,固定128k大小

二, 属性的存储方式

  属性存储在Selinux属性文件(如/dev/__properties__/u:object_r:xxx:s0), 该文件创建在内存中, 里面内容主要是以字典树的形式存储, 包括属性名字和属性的值, 在Android 源码中有注释:

bionic/libc/system_properties/include/system_propertie/prop_area.h

示意图:

     整个树是存储在文件中(共享内), class prop_area表示这块内存区域, struct prop_bt 表示树杈, struct prop_info表示树叶,用于存放实际的key和value,字典树存储会利用字符串的公共前缀来减少查询时间,最大限度的减少无谓的字符串比较,查询效率比哈希树高, 典型应用就是用于统计,排序和保存大量的字符串(不仅限于字符串),经常被搜索引擎系统用于文本词频统计 。

   字典树的概念, 大家可以大体了解一下, 有三个基本性质:

1、根节点不包含字符,除根节点外每一个节点都只包含一个字符

2、从根节点到某一个节点,路径上经过的字符连接起来,就是该节点对应的字符串

3、每个节点的所有子节点包含的字符都不相同,也就是找到对应单词、字符是唯一的。

字典树模型:

保存”big”和 “bit”时,由于它们的前2个字母是相同的,所以希望它们共享这些字母,而只对剩下的部分进行分开存储。可以很明显地发现,字母树很好地利用了串的公共前缀,节约了存储空间。

三,详细的框架模型

上面的模型基本了解就够了, 如果需要了解init启动过程的初始化部分, 可以参考如下框架, 初学属性系统的时候, 可以不需要太去深究这个模型, 主要是让大家知道, 属性系统用起来很简单, 但是设计的其实比较复杂:

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旗浩QH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值