OpenHarmony开源社区
直播中

软通动力HOS

3年用户 221经验值
擅长:EMC/MEI设计 EDA/IC设计 处理器/DSP
私信 关注
[经验]

OpenHarmony恢复启动子系统init进程之参数空间配置

图片1.png

参数由key和值构成,key 的格式由多重前缀构成。

const.postinstall.fstab.prefix=/system

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。这种数据结构提高了查找效率。

16641830046729ay03on1pa

参数分类

类别

前缀

说明

常量参数

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

hw_sc.build.os.releasetype=Release

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.actionable_compatible_property.enabled root:root:0777

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规则信息每一位的定义如下:

IMG_256

跟文件权限不同的是,第三个比特表示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 SYS_POWER_CTRL "ohos.startup.powerctrl=" //电源控制

#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 参数

回帖(1)

他在笑

2022-9-26 18:16:45
感谢分享,太棒了
举报

更多回帖

发帖
×
20
完善资料,
赚取积分