#打卡不停更#OpenHarmony恢复启动子系统init进程之参数空间配置 原创 精华
参数由key和值构成,key 的格式由多重前缀构成。
const.secure=1
security.perf_harden=1
const.allow.mock.location=0
const.debuggable=1
const.build.characteristics=default
const.product.model=ohos
const.product.name="OpenHarmony 3.1 Release"
persist.sys.usb.config=hdc
参数物理空间使用的是一维数组存储每个参数,但是从逻辑上使用Trie树(前缀树)的数据结构存储,从根节点往下依次连成最终的key。这种数据结构提高了查找效率。
参数分类
类别 | 前缀 | 说明 |
---|---|---|
常量参数 | const. | 从赋值开始永远不会变更 |
常驻参数 | persist. | 可写并可持久化保存参数,重启后不会丢失。为保持一致,会有个定时器定期的批量保存到文件 |
临时参数 | 其他 | 可以随时修改,但是系统重启后参数丢失。 |
参数来源
类别 | 路径 | 说明 |
---|---|---|
内核参数 | /proc/cmdline | 内核参数中部分参数转换成ohos.boot.xxx=valXXX系统参数 |
os常量值 | /system/etc/param/ohos_const/*.para | os常量值 |
vendor参数值 | /vendor/etc/param/*.para | 厂商定义的参数文件,可覆盖系统参数值 |
系统参数 | /system/etc/param/*.para | 系统参数,如果跟厂商参数重复,忽略系统参数 |
/proc/cmdline |
#cat /proc/cmdline
mem=640M console=ttyAMA0,115200 mmz=anonymous,0,0xA8000000,384M clk_ignore_unused rootdelay=10 hardware=Hi3516DV300 init=/init root=/dev/ram0 rw blkdevparts=mmcblk0:1M(boot),15M(kernel),20M(updater),10M(misc),3307M(system),256M(vendor),-(userdata) initrd=0x84000000,0x290e00
获取hardware,bootgroup,mem等参数值加入参数。
例如: ohos.boot.hardware=Hi3516DV300
- 参数文件 ohos.para
const.actionable_compatible_property.enabled=false
const.postinstall.fstab.prefix=/system
const.product.name="OpenHarmony 3.1 Release"
persist.sys.usb.config=hdc
- 参数文件 ohos.para.dac
const.postinstall.fstab.prefix root:root:0777
const.secure root:root:0777
security.perf_harden root:root:0777
const.allow.mock.location root:root:0777
const.debuggable root:root:0777
persist.sys.usb.config root:root:0777
DAC(Discretionary Access Control)自主访问控制方式管理
需要根据用户、组用户、读写权限等进行验证权限,才能到指定文件读取参数值。
可以通过参数路径为相同前缀的所有系统参数定义一类访问权限信息;DAC信息通过":"分三段来描述,分别为参数的user,group以及UGO规则信息。
UGO规则信息每一位的定义如下:
跟文件权限不同的是,第三个比特表示watch权限。
功能 | 说明 |
---|---|
get | 获取系统参数的值 |
set | 设置系统参数的值 |
wait | 同步等待系统参数的值匹配,支持模糊匹配,例如: hd*, 则匹配hdc,hdi等等。“*”表示匹配任何值 |
watch | 将一个参数加入监视队列,当参数发生变化,通知用户 |
trigger参数
将jobs、系统控制命令这些纳入trigger参数范围。
类型 | 特征 | 说明 |
---|---|---|
BOOT | “pre-init”, “boot”, “early-init”, “init”, “early-init”, “late-init”, “post-init”, | |
“fs”, “early-fs”, “post-fs”, “late-fs”, “early-boot”, “post-fs-data”,“reboot”, “suspend” | 需要优先执行的jobs | |
PARAM | 以param:为前缀的jobs | 参数操作相关的命令 |
参数类型的jobs: |
"name" : "param:sys.sysctl.extra_free_kbytes=*",
"condition" : "sys.sysctl.extra_free_kbytes=*",
"cmds" : [
"write /proc/sys/vm/extra_free_kbytes ${sys.sysctl.extra_free_kbytes}"
]
}, {
"name" : "param:sys.sysctl.tcp_def_init_rwnd=*",
"condition" : "sys.sysctl.tcp_def_init_rwnd=*",
"cmds" : [
"write /proc/sys/net/ipv4/tcp_default_init_rwnd ${sys.sysctl.tcp_def_init_rwnd}"
]
}, {
"name" : "param:security.perf_harden=0",
"condition" : "security.perf_harden=0",
"cmds" : [
"write /proc/sys/kernel/perf_event_paranoid 1",
"write /proc/sys/kernel/perf_event_max_sample_rate ${debug.perf_event_max_sample_rate:-100000}",
"write /proc/sys/kernel/perf_cpu_time_max_percent ${debug.perf_cpu_time_max_percent:-25}",
"write /proc/sys/kernel/perf_event_mlock_kb ${debug.perf_event_mlock_kb:-516}"
]
}
trigger参数根据类型在存储的时候,添加对应的前缀,方便与其他参数存储在Trie树中,方便查找。
#define OHOS_CTRL_START "ohos.ctl.start=" //控制启动
#define OHOS_CTRL_STOP "ohos.ctl.stop=" //控制停止
#define OHOS_SERVICE_CTRL_PREFIX "ohos.servicectrl." //服务控制
#define OHOS_BOOT "ohos.boot." // boot 参数
这些文章整理个合集应该更好