OpenHarmony的系统属性配置取值顺序

注意:这是比较久以前做的一个资料汇总,不一定匹配最新的代码,请参考使用。

 

[A] L1: ohos_const [L1系统常量属性]

base\startup\init\services\etc_lite\param\ohos_const\ohos.para

const.ohos.version.security_patch=2022-09-01
const.ohos.releasetype=[A]Beta3
const.ohos.apiversion=9
const.ohos.fullname=[A]OpenHarmony-3.2.7.5

[B] L2: ohos_const [L2系统常量属性]

base\startup\init\services\etc\param\ohos_const\ohos.para

const.ohos.version.security_patch=2022-03-30
const.ohos.releasetype=[B]Beta3
const.ohos.apiversion=9
const.ohos.fullname=[B]OpenHarmony-3.2.7.5

[C] L0+L1+L2:ohos.para [系统变量属性]

base\startup\init\services\etc\param\ohos.para

const.actionable_compatible_property.enabled=false  # C
const.postinstall.fstab.prefix=/system              # C
const.secure=1                                      # C
security.perf_harden=1                              # C
const.allow.mock.location=0                         # C
const.debuggable=1                                  # C
const.build.characteristics=[C]characteristics      # C+D
const.product.model=[C]ohos                         # C+D
const.product.name="[C]OpenHarmony 2.0 Canary"      # C+D
persist.sys.usb.config=hdc                          # C
const.sandbox=enable                                # C
const.product.devicetype=[C]devicetype              # C+D
const.software.model=[C]model                       # C+D
const.product.manufacturer=[C]manufacturer          # C+D
const.product.brand=[C]brand                        # C+D
const.build.product=[C]product                      # C+D
const.product.hardwareversion=[C]hardwareversion    # C+D
const.product.bootloader.version=[C]bootloader      # C+D
const.product.cpu.abilist=[C]abilist                # C+D
const.product.software.version=[C]OpenHarmony 3.2.7.5  # C+D
const.product.incremental.version=[C]inc_version       # C
const.product.firstapiversion=1                        # C+D
const.product.build.type=[C]build-type                 # C  --debug+release
const.product.build.user=[C]build-user                 # C
const.product.build.host=[C]build-host                 # C
const.product.build.date=[C]build-date                 # C
const.product.hardwareprofile=[C]hardwareprofile       # C+D
const.ohos.buildroothash=[C]buildroothash              # C

[D] L0+L1+L2:vendor.para【vendor自定义变量属性】

L1: vendor\hihope\dayu410\hals\utils\sys_param\vendor.para

const.build.characteristics=[D]****     # C+D
const.product.manufacturer=[D]****      # C+D
const.product.brand=[D]****             # C+D
const.product.name=[D]****              # C+D
const.build.product=[D]****             # C+D
const.product.model=[D]****             # C+D
const.software.model=[D]****            # C+D
const.product.hardwareversion=[D]****   # C+D
const.product.hardwareprofile="aout:true,display:true"  # C+D
const.ohos.serial=[D]1234567890         # D
const.product.bootloader.version=[D]bootloader  # C+D
const.product.cpu.abilist=[D]****       # C+D
const.product.software.version="[D]OpenHarmony 3.2 Beta3"  # C+D
const.product.firstapiversion=1         # C+D

L2:vendor\hihope\rk3568\etc\param\

hardware_rk3568.para:
const.product.hardwareversion=[D]hardwareversion
​
product_rk3568.para:
const.product.brand=[D]brand
const.build.product=[D]product

 

[E] L1:hal_sys_param.c【写在代码中的属性】

vendor\hihope\dayu410\hals\utils\sys_param\hal_sys_param.c

static const char OHOS_DEVICE_TYPE[]     = {"[E]****"};
static const char OHOS_DISPLAY_VERSION[] = {"[E]OpenHarmony 3.2 Beta3"};
static const char OHOS_MANUFACTURE[]     = {"[E]****"};
static const char OHOS_BRAND[]           = {"[E]****"};
static const char OHOS_MARKET_NAME[]     = {"[E]****"};
static const char OHOS_PRODUCT_SERIES[]  = {"[E]****"};
static const char OHOS_PRODUCT_MODEL[]   = {"[E]****"};
static const char OHOS_SOFTWARE_MODEL[]  = {"[E]****"};
static const char OHOS_HARDWARE_MODEL[]  = {"[E]****"};
static const char OHOS_HARDWARE_PROFILE[]   = {"aout:true,display:true"};
static const char OHOS_BOOTLOADER_VERSION[] = {"[E]bootloader"};
static const char OHOS_ABI_LIST[]           = {"[E]****"};
static const char OHOS_SERIAL[]             = {"[E]1234567890"};  // provided by OEM.
static const char SN_FILE[]                 = {"/sys/block/mmcblk0/device/cid"};
static const int OHOS_FIRST_API_VERSION     = 1;

这部分属性基本上只有 SN_FILE[] 有效,其他的属性:

如果与系统相关而与vendor无关,建议直接修改[C];如果与vendor强相关,建议直接修改[D].

如果要是用[E]中定义的属性,可以在:

base\startup\init\interfaces\innerkits\syspara\parameter.c

base\startup\init\interfaces\innerkits\syspara\param_comm.c

中对应的Get函数中,直接调用[E]中定义的HalXxx()接口来获取[E]中定义的属性(已确认可行),例如GetSerial_()函数就是直接调用HalGetSerial()函数来读取烧录在mmc中的产品序列号。

L0+L1 系统,在配置了 enable_ohos_startup_init_feature_begetctl_liteos=true
的前提下,在 \base\startup\init\interfaces\innerkits\BUILD.gn 中会配置依赖
deps += [ "$ohos_product_adapter_dir/utils/sys_param:hal_sysparam" ]
同时定义 defines += [ "LITEOS_SUPPORT" ]
然后在 \base\startup\init\interfaces\innerkits\syspara\目录下的代码中,
就可以通过宏 LITEOS_SUPPORT 直接控制获取系统属性的Get函数,如:
#ifdef LITEOS_SUPPORT
   //获取在hal_sysparam.c中定义的属性
   return HalGetXxxx();
#else
   //获取在 ohos.para、vendor.para中定义的属性
   GetProperty("const.product.brand", xxx)
#endif

 

实例分析

设备名称:GetDeviceType() ==》》 const.product.devicetype=[C]devicetype

# const.product.devicetype 在[C]定义有,在[D]未定义,虽然在[E]代码中有 OHOS_DEVICE_TYPE, 但并未起作用

 

厂家信息:GetManufacture() ==》》const.product.manufacturer=[D]

# const.product.manufacturer 在[C]定义有,但被[D]中的定义覆盖,虽然在[E]代码中有 OHOS_MANUFACTURE, 但并未起作用

 

品牌信息:GetBrand() ==》》const.product.brand=[D]

# const.product.brand 在[C]定义有,但被[D]中的定义覆盖,虽然在[E]代码中有 OHOS_BRAND, 但并未起作用

 

硬件版本号:GetHardwareModel() ==》》const.product.hardwareversion=[D]

# const.product.hardwareversion 在[C]定义有,但被[D]中的定义覆盖,在[E]代码中没有 hardwareversion

 

设备序列号:GetSerial() ==》》static const char OHOS_SERIAL[] = {"[E]1234567890"};

# ohos.boot.sn 应该不存在这个属性

 

操作系统名:GetOSFullName() == 》》const.ohos.fullname=[A]OpenHarmony-3.2.7.5

# const.ohos.fullname 属性只在[A]/[B] 定义有,不会被覆盖

 

软件版本号:GetDisplayVersion() ==》》const.product.software.version="[D]OpenHarmony 3.2 Beta3"

# const.product.software.version 在[C]定义有,但被[D]中的定义覆盖,在[E]代码中没有 software.version

 

BootLoader版本号:GetBootloaderVersion()==》》const.product.bootloader.version=[D]bootloader

# const.product.bootloader.version 在[C]定义有,但被[D]中的定义覆盖,虽然在[E]代码中有 OHOS_BOOTLOADER_VERSION, 但并未起作用

 

构建时间:GetBuildTime()==》》const.product.build.date=[C]build-date

# const.product.build.date 属性只在[C] 定义有,不会被覆盖

 

汇总

属性定义取值优先级汇总

A/B[ohos_const]CDE取值
有定义忽略忽略忽略A/B
--有定义无定义忽略C
--有定义有定义[覆盖]忽略D
----有定义忽略D
------有定义E
--------NULL

其他属性

ohos.para.dac
syscap.para

其他的属性文件,有对应的配置、生成方法和使用方法,待整理。

 

基于以上理解,syspara_lite组件已经用不到了,经确认可以在产品全量配置信息中删除它:

{ "component": "syspara_lite", "features":[] },

同时修改: \vendor\hihope\dayu410\hals\utils\sys_param\BUILD.gn

  include_dirs = [
#    "//base/startup/syspara_lite/hals",
    "//base/startup/init/interfaces/hals",
  ]

更新 shared_library("hal_sysparam") 需要的头文件路径,不再是 syspara_lite 的路径即可。

不过还是建议保留(不确定NDK或xts测试用例是否对该组件有依赖)。

在代码中修改属性值

可以参考WriteParam()的调用

WriteParam("const.product.build.date", BUILD_TIME, NULL, LOAD_PARAM_NORMAL);

 

 

 

 

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐