当前位置: 首页 > news >正文

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

1. 系统参数概述

1.1 功能简介

OpenHarmony 系统参数为各系统服务提供简单易用的键值对访问接口,使得各个系统服务可以通过系统参数进行业务功能的配置和状态管理。
(系统参数同android中的系统参数是类似的,命令有所差异)

最常用的命令

hdc shell param get 系统参数键
hdc shell param set 系统参数键  系统参数值或者进入hdc shell
param get 系统参数键
param set 系统参数键  系统参数值甚至你还可以直接进入param_shell(小众但是个人觉得还是比较好用的):hdc shell param_shell然后直接get/set
比如:
watch persist.sys.usb.config
get persist.sys.usb.config
set persist.sys.usb.config mtp
set persist.sys.usb.config  hdc

1.2 基本操作原语

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

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

2. 系统参数定义与分类

2.1 系统参数命名规范

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

命名格式示例

[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 UserDAC GroupDAC UGOMAC SELinux Label
rootroot775default_param

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

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

3.2 DAC访问控制

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

配置示例

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中定义标签
type servicectrl_param, parameter_attr;
  1. 在parameter_contexts中关联参数前缀
ohos.servicectrl.           u:object_r:servicectrl_param:s0
  1. 给init授权
allow servicectrl_param tmpfs:filesystem associate;
allow init servicectrl_param:file { map open read relabelto relabelfrom };
  1. 设置写权限
allow { init samgr hdf_devmgr } servicectrl_param:parameter_service { set };
  1. 设置读权限
allow { xxx } servicectrl_param:file { map open read };

权限设置建议

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

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

4.1 标签文件大小配置

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

配置示例

devinfo_public_param=30720
hilog_param=40960

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

4.2 共享内存映射

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

-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

示例内容

const.product.name=OHOS-PRODUCT
const.os.version.api=26
const.telephony.enable=false|true

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

5.2 配置文件安装

标准系统安装方法

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++接口使用

基本操作示例

// 设置和获取参数
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接口使用

导入模块

import systemparameter from '@ohos.systemParameterEnhance';

同步获取参数值

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

异步获取参数值

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命令操作

常用命令

# 获取参数值
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权限被禁止

关注鸿蒙百川带你学习更多鸿蒙操作系统知识
在这里插入图片描述

http://www.dtcms.com/a/415431.html

相关文章:

  • 大型网站的空间广州营销型网站建设公司哪家名气大
  • 网站本地被劫要怎么做马上飞做的一些网站
  • 牡丹江做网站公司公司网站维护费大概需要多少
  • 定时/延时消息从RocketMQ 4.x到RocketMQ 5.0的演变:从固定延时等级到精准延时时间
  • 最大似然估计与协方差正则化:从推导到实践
  • 苏宁item_search - 按关键字搜索商品接口深度分析及 Python 实现
  • 企业大型网站建设要多少钱动漫设计作品
  • linux基础服务(2)
  • 学校微网站模板下载企业大学网站建设计划
  • 【华为 ICT HCIA eNSP 习题汇总】——题目集24
  • 广府网站建设学剪辑有必要报班吗
  • 好的企业管理网站瓯网
  • 氛围编程(Vibe Coding)的局限性
  • 台州网站制作套餐建设网站有哪些参考文献
  • 数据集 - LaTeX OCR
  • Java面试-并发面试(一)
  • 比特之绘:位图的二进制诗学
  • 【K8s-Day 32】StatefulSet 深度解析:为你的数据库和有状态应用保驾护航
  • 优质的营销网站建设广告公司取名
  • Webpack5 第四节
  • 设计网站公司力荐亿企邦松江新城投资建设发展有限公司网站
  • 家用电器:从解放双手到智能生活的变革者
  • 上海网站建设大概多少钱WordPress允许用户修改评论
  • 如何给网站做seo优化用网站做宣传的方案
  • 使用神经网络预测天气
  • 青海省建设工程信息网站最近十大新闻
  • 建设银行网站显示404企业活动网站创意案例
  • XAMPP下载安装教程(附下载链接,图文并茂)
  • 杭州网站建设浙江搜搜网站收录
  • Redis-分布式锁-redission原理