【OpenHarmony实战】系统参数SystemParameter完全指南:param get/set调试技巧与案例精解

1. 系统参数概述

1.1 功能简介

OpenHarmony 系统参数为各系统服务提供简单易用的键值对访问接口,使得各个系统服务可以通过系统参数进行业务功能的配置和状态管理。

(系统参数同android中的系统参数是类似的,命令有所差异)

最常用的命令

clike 复制代码
hdc shell param get 系统参数键
hdc shell param set 系统参数键  系统参数值

或者进入hdc shell
param get 系统参数键
param set 系统参数键  系统参数值

甚至你还可以直接进入param shell模式(小众但是个人觉得还是比较好用的):
hdc shell     #进入shell
然后param shell   #进入Param面板
然后直接get/set
比如:
watch persist.sys.usb.config
get persist.sys.usb.config
set persist.sys.usb.config mtp
set persist.sys.usb.config  hdc
退出param shell模式直接exit即

param shell面板示例:

1.2 基本操作原语

系统参数支持以下基本操作:

  • get:获取系统参数的值
  • set:设置系统参数的值
  • wait:同步等待系统参数的值变更
  • watch:异步观察系统参数的值变更

2. 系统参数定义与分类

2.1 系统参数命名规范

系统参数名称采用点分格式,由多段组成,每一段可以由字母、数字、下划线组成,总长度不超过96字节。

命名格式示例

plaintext 复制代码
[const|persist].$sub_system.$desc

其中 $sub_system 为子系统或模块名称,$desc 为参数描述字符。

2.2 系统参数分类

系统参数分为三大类:

类别 前缀 说明 值最大长度
常量参数 const. 常量参数,一旦赋值后续不会再变更 4096字节
可写参数 其它 可写参数,重启后丢失 96字节
可持久化 persist. 可写并可持久化保存参数,重启后不会丢失 96字节

2.3 参数值类型

系统参数支持三种赋值方式:

  • 字符串const.product.name=OHOS-PRODUCT
  • 数字const.os.version.api=26
  • 布尔const.telephony.enable=false(支持0,1,false,true)

2.4常见的系统参数

命令 说明
param get const.product.cpu.abilist 查看系统支持的 CPU 架构,如 arm64-v8a
param get const.product.developmentmode 查看是否处于开发模式
param get persist.sys.hilog.debug.on 查看是否开启 hilog 调试日志,返回 truefalse
param get debug.init.log.level 查看 init 日志级别,如 INFODEBUG
param get startup.bootanim.enable 查看是否启用开机动画
param set persist.sys.usb.config hdc 是否开启HDS usb设备识别
param persist.init.bootevent.enable #true 开机启动

3. 系统参数权限管理

3.1 默认权限

当系统参数没有定义任何DAC、MAC权限时,默认权限为:

DAC User DAC Group DAC UGO MAC SELinux Label
root root 775 default_param

不同进程对默认权限参数的访问行为:

操作 系统Native进程 系统应用进程 三方应用进程
get 允许 允许 允许
watch 允许 允许 允许
set 不允许 不允许 不允许

3.2 DAC访问控制

通过 .para.dac 文件配置自主访问控制,位于 /base/startup/init/services/etc/param/ohos.para.dac

配置示例

plaintext 复制代码
const.product.              = root:root:0775
persist.init.               = root:root:0775
startup.appspawn.           = root:root:0750
startup.uevent.             = ueventd:ueventd:0775

DAC信息通过 ":" 分三段描述:user:group:UGO规则

3.3 MAC访问控制(SELinux)

添加selinux标签步骤

  1. 在parameter.te中定义标签
java 复制代码
type servicectrl_param, parameter_attr;
  1. 在parameter_contexts中关联参数前缀
java 复制代码
ohos.servicectrl.           u:object_r:servicectrl_param:s0
  1. 给init授权
java 复制代码
allow servicectrl_param tmpfs:filesystem associate;
allow init servicectrl_param:file { map open read relabelto relabelfrom };
  1. 设置写权限
java 复制代码
allow { init samgr hdf_devmgr } servicectrl_param:parameter_service { set };
  1. 设置读权限
java 复制代码
allow { xxx } servicectrl_param:file { map open read };

权限设置建议

  • 公开只读参数:使用 default_param
  • 可写参数:增加 {component}_writable_param 标签
  • 内部隐私参数:增加 {component}_private_param 标签

4. 系统参数标签与内存管理

4.1 标签文件大小配置

每个标签默认分配1K内存,能存放5个左右的系统参数。如需扩展,在 ohos.para.size 文件中配置:

配置示例

plaintext 复制代码
devinfo_public_param=30720
hilog_param=40960

默认系统参数的共享内存大小为80KB。

4.2 共享内存映射

init会根据系统参数标签在 /dev/parameters/ 目录下创建对应的共享内存映射文件:

bash 复制代码
-rwxr-xr-- 1 root root 30720 2017-08-10 16:22 u:object_r:default_param:s0
-rwxr-xr-- 1 root root  1024 2017-08-10 16:22 u:object_r:devinfo_private_param:s0

4.3 参数加载顺序

系统参数按以下顺序加载:

  1. 内核参数/proc/cmdline(转换为 ohos.boot.xxx 形式)
  2. OS系统参数/system/etc/param/ohos_const/*.para
  3. vendor参数/vendor/etc/param/*.para
  4. system参数/system/etc/param/*.para(已存在参数忽略)
  5. persist参数/data/parameters/(覆盖默认参数)

5. 开发指南

5.1 系统参数定义文件

系统参数定义文件后缀名为 .para

示例内容

plaintext 复制代码
const.product.name=OHOS-PRODUCT
const.os.version.api=26
const.telephony.enable=false|true

注意:系统参数值不支持注释及换行。

5.2 配置文件安装

标准系统安装方法

gn 复制代码
ohos_prebuilt_para("ohos.para") {
    source = "//base/startup/init/services/etc/ohos.para"
    part_name = "init"
    module_install_dir = "etc/param"
}

5.3 C/C++接口使用

基本操作示例

c 复制代码
// 设置和获取参数
char key1[] = "rw.sys.version";
char value1[] = "10.1.0";
int ret = SetParameter(key1, value1);

char valueGet1[128] = {0};
ret = GetParameter(key1, "version=10.1.0", valueGet1, 128);

// 获取设备信息
char* deviceType = GetDeviceType();
printf("Product type = %s\n", deviceType);

5.4 ArkTs接口使用

导入模块

typescript 复制代码
import systemparameter from '@ohos.systemParameterEnhance';

同步获取参数值

typescript 复制代码
try {
    let info: string = systemparameter.getSync("const.ohos.apiversion");
    console.log(JSON.stringify(info));
} catch(e) {
    console.log("getSync unexpected error: " + e);
}

异步获取参数值

typescript 复制代码
import { BusinessError } from '@ohos.base';

systemparameter.get("const.ohos.apiversion", (err: BusinessError, data: string) => {
    if (err == undefined) {
        console.log("get value success:" + data);
    } else {
        console.log("get value err:" + err.code);
    }
});

5.5 Shell命令操作

常用命令

bash 复制代码
# 获取参数值
param get [key]

# 设置参数值
param set key value

# 等待参数值匹配
param wait key value

6. 常见问题排查

6.1 设置系统参数失败

排查步骤

  1. 使用 param set 命令测试是否可设置成功
  2. 检查DAC权限配置是否正确
  3. 检查SELinux权限,根据 avc: denied 告警信息设置规则
  4. 检查系统参数标签内存是否充足

6.2 读取系统参数失败

排查步骤

  1. 确认参数是否已设置:param get key
  2. 检查DAC读权限配置
  3. 检查SELinux读权限设置

6.3 三方应用无法访问系统参数

原因分析

  • 默认DAC规则只允许三方应用get和watch权限
  • 三方应用的selinux权限默认未设置

解决方案

  1. 重新设置DAC规则,增加set权限
  2. 参照MAC访问控制权限设置进行selinux配置

6.4 错误码说明

系统参数操作可能返回的错误码包括:

  • PARAM_CODE_INVALID_NAME(101):参数名不符合规范
  • PARAM_CODE_NOT_FOUND(106):没有找到该参数
  • PARAM_CODE_READ_ONLY(107):参数为只读
  • DAC_RESULT_FORBIDED(1001):DAC权限被禁止
  • SELINUX_RESULT_FORBIDED(1002):selinux权限被禁止

关注鸿蒙百川带你学习更多鸿蒙操作系统知识

相关推荐
鸿蒙小白龙3 小时前
OpenHarmony中的系统服务管理配置讲解
harmonyos·鸿蒙·鸿蒙系统·open harmony
ai安歌4 小时前
【走进鸿蒙002】文件操作案例:创建、写入和读取文件
鸿蒙
爱笑的眼睛116 小时前
【鸿蒙心迹】 我和新人的鸿蒙应用上架之路
经验分享·华为·harmonyos
2501_919749036 小时前
鸿蒙:使用AppStorageV2实现跨Ability共享
华为·harmonyos
Devil枫6 小时前
HarmonyOS SDK地图服务教程
华为·harmonyos
安卓开发者6 小时前
鸿蒙Next Asset Store Kit:打造关键资产的铜墙铁壁
华为·harmonyos
AI创界者7 小时前
华为手机鸿蒙系统 4.2 / 4.3 安装谷歌框架的详细教程
华为·智能手机·harmonyos
程序员潘Sir8 小时前
鸿蒙应用开发从入门到实战(十六):线性布局案例
harmonyos·鸿蒙
Georgewu18 小时前
【 技术开源共建 】开源日历组件ossimplecalendarview快速集成
harmonyos