OpenHarmony的系统属性配置取值顺序
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 c
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] | C | D | E | 取值 |
---|---|---|---|---|
有定义 | 忽略 | 忽略 | 忽略 | 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);
更多推荐
所有评论(0)