Android init进程一些容易忽视的技术细节

Android init进程作为用户空间第一个进程,做了很多系统初始化工作,其核心分为两块:一是属性,二是init.rc。此外,在具体的项目过程中,常和init进程打交道,里面有不少技术细节值得我们研究清楚。

  • 属性key-value大小限制
bionic/libc/include/sys/System_properties.h
#define PROP_NAME_MAX   32
#define PROP_VALUE_MAX  92

key最大为32个字节,末位\0还要占一个字节,所以真正用于key的最大字串为31。即key = persist.system.donotallow.secsim(32Bytes) 时,会报错。
同理value最大为91Bytes。

  • 属性前缀的作用
    通常,属性都带有前缀,如ro.config、persist.xxx等。
    对于ro前缀,只读属性,即第一次设置之后,以后都不能再改变。
    if(pi != 0) {
        /* ro.* properties may NEVER be modified once set */
        if(!strncmp(name, "ro.", 3)) return -1;

persist前缀属性在初始加载属性时须注意,default属性未加载完成时,不能将其写入文件中,以免覆盖文件中的属性值。
对于persist前缀,在设置属性的同时,还会将其写到/data/property/persist.xxx文件中,在系统重启时,将该属性值恢复到上机关机时的状态。那么什么时候加载的这些persist属性?

on property:vold.decrypt=trigger_load_persist_props
    load_persist_props
void load_persist_props(void)
{
    load_override_properties();
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值