OpenHarmony-2.DeviceInfo适配

server/2024/11/19 9:34:59/
  • DeviceInfo适配说明

1.启动子系统设备信息说明
在这里插入图片描述

2.OHOS

2.1.OHOS 固定值参数适配

  • OHOS 固定值参数:
const.ohos.version.security_patch
const.ohos.releasetype
const.ohos.apiversion
const.ohos.fullname
  • 适配说明:
    OHOS 固定值参数由OHOS系统填充,厂商不能也不需适配,参数主要定义:
/base/startup/init/services/etc/param/ohos_const/ohos.para:13 const.ohos.version.security_patch=2024/08/0114 const.ohos.releasetype=Release15 const.ohos.apiversion=1116 const.ohos.fullname=OpenHarmony-4.1.7.8

2.2.厂商固定值参数适配:

  • 厂商固定值参数:
const.product.devicetype
const.product.manufacturer
const.product.brand
const.product.name
const.build.product
const.product.model
const.software.model
const.product.hardwareversion
const.product.hardwareprofile
const.product.software.version
const.product.bootloader.version
const.build.characteristics
... ...
  • 适配说明:

  由各产品根据自身情况在vendor目录下适配。

  • 标准系统以RK3568为例,在/vendor/hihope/rk3568/etc/para/hardware_rk3568.para中适配,并安装到指定目录。
vendor/hihope/rk3568/etc/param/hardware_rk3568.para :
const.product.hardwareversion=defaultvendor/hihope/rk3568/etc/BUILD.gn:16 ohos_prebuilt_etc("para_for_chip_prod") {17   source = "./param/hardware_rk3568.para"18   install_images = [ chip_prod_base_dir ]19   relative_install_dir = "param"20   part_name = "product_rk3568"21 }

3.厂商动态参数适配

  厂商动态值参数,目前有三种获取形式:cmdline读取,编译宏定义,在BUILD.gn中定义。

  • cmdline中读取的值有:ohos.boot.hardware、ohos.boot.bootslots、ohos.boot.sn等,其中ohos.boot.sn的获取略有不同,具体如下:

    • 标准系统 Serial从参数ohos.boot.sn读取。
      ohos.boot.sn参数值的获取方式:首先从cmdline(由uboot生成)获取,如果获取到的是sn值则直接读取,若获取的是文件路径,则从文件中读取;当获取不到时从默认的Sn文件读取,默认文件为:/sys/block/mmcblk0/device/cid;/proc/bootdevice/cid。

    • 轻量系统与小型系统的Serial各产品在实现过程中可能有自己特殊的算法,因此OpenHarmony支持在hals/utils/sys_param目录下hal_sys_param.c文件中通过HalGetSerial()接口自定算法来获取Serial。

  • 在BUILD.gn中定义,参考文件/base/startup/init/services/etc/BUILD.gn

4.代码分析

startup/init/services/init/standard/init.c :

SystemConfig->LoadSpecialParam

429 void LoadSpecialParam(void)
430 {
431     // read param area size from cfg and save to dac
432     LoadParamAreaSize();
433     // read selinux label
434     LoadSelinuxLabel("init");
435     // from cmdline
436     LoadParamFromCmdLine();
437     // from build
438     LoadParamFromBuild();
439 }
  • LoadParamAreaSize
startup/init/services/etc/param/ohos.para.size:14 default_param=409615 hilog_param=4096016 const_product_param=409617 startup_param=4096018 persist_param=4096019 const_param=4096020 persist_sys_param=409621 devinfo_public_param=4096022 sys_param=409623 bootevent_param=409624 startup_init_param=8192025 hiviewdfx_profiler_param=204826 ohos_boot_param = 819227 bluetooth_param = 819228 hiviewdfx_hiview_param = 204829 telephony_param = 2048030 vendor_camera_param=614431 edm_writable_param = 4096
  • LoadParamFromCmdLine
startup/init/services/param/manager/param_server.c:
230 INIT_LOCAL_API int LoadParamFromCmdLine(void)
231 {
232     CmdLineIteratorCtx ctx;
233
234     ctx.gotSn = false;
235     ctx.cmdline = ReadFileData(BOOT_CMD_LINE);
236     PARAM_CHECK(ctx.cmdline != NULL, return -1, "Failed to read file %s", BOOT_CMD_LINE);
237
238     IterateNameValuePairs(ctx.cmdline, CmdlineIterator, (void *)(&ctx));
239
240     // sn is critical, it must be specified
241     if (!ctx.gotSn) {
242         PARAM_LOGE("Generate default sn now ...");
243         GenerateSnByDefault();
244     }
245
246     free(ctx.cmdline);
247     return 0;
248 }215 static void GenerateSnByDefault(void)
216 {
217     const char *snFileList [] = {
218         "/sys/block/mmcblk0/device/cid",
219         "/proc/bootdevice/cid"
220     };
221
222     for (size_t i = 0; i < ARRAY_LENGTH(snFileList); i++) {
223         int ret = ReadSnFromFile(OHOS_CMDLINE_PARA_PREFIX "sn", snFileList[i]);
224         if (ret == 0) {
225             break;
226         }
227     }
228 }

refer to

  • docs/en/device-dev/subsystems/subsys-boot-init-deviceInfo.md
  • https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-boot-init-deviceInfo.md

http://www.ppmy.cn/server/143142.html

相关文章

解决 electron 打包后部分电脑报错 Error: Dynamic Symbol Retrieval Error: Win32 error 126

electron 开发使用了 ffi-napi 来调用了 C 函数的 dll 文件&#xff0c;在打包上线后&#xff0c;发现某些电脑上运行之后一直报错 Error: Dynamic Symbol Retrieval Error: Win32 error 126 如图所示&#xff1a; 排查了很多原因&#xff0c;有说是路径问题&#xff0c;有说…

Lua资料

Lua脚本语言 cheet sheet Lua & c Lua与C API交互全面解析 Lua语言&#xff1a;和C语言的交互 Lua进阶用法之Lua和C的接口设计 Lua C API 简介 C和Lua之间的相互调用 深入Lua&#xff1a;用户数据userdata 基本数据类型 之 UserData calling-lua-from-c/ Embedding Lua i…

OPC UA 服务器

OPC UA&#xff08;OPC Unified Architecture&#xff09; 是一种平台无关的通信协议&#xff0c;广泛用于工业自动化领域。它由 OPC 基金会开发&#xff0c;主要设计目标是实现安全、可靠和互操作性的数据交换&#xff0c;适用于各种设备和系统之间的通信。 什么是 OPC UA 服务…

剧本杀门店预约小程序,解锁沉浸式推理体验

一、开发背景 剧本杀作为一种热门娱乐游戏&#xff0c;深受大众的欢迎&#xff0c;但随着市场的快速发展&#xff0c;竞争也在不断加大&#xff0c;对于剧本杀线下商家来说面临着发展创新。 剧本杀线下门店数量目前正在逐渐增加&#xff0c;竞争激烈&#xff0c;而门店的获客…

SpringBoot 中常见的设计模式

在 Spring Boot 中&#xff0c;很多设计模式是通过 Spring 框架本身来实现的&#xff0c;但我们也可以在实际开发过程中看到多种设计模式的应用。以下是几个常见的设计模式及其在 Spring Boot 中的应用实例&#xff1a; 1. 单例模式 (Singleton Pattern) 在 Spring 中&#x…

后端-Result.java工具类和SystemCode.java工具类

一.Result.java工具类 package com.hs.util; /** * 响应格式类 * 作用&#xff1a;统一服务端的响应数据格式 */ public class Result<T> { /** * 响应代码 */ private int status; /** * 响应信息 */ private String message;…

Qt邮箱程序改良版(信号和槽)

上一版代码可以正常使用,但是会报错 上一篇文章 错误信息 "QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread" 指出了一个问题&#xff0c;即在非主线程中尝试启用或禁用套接字通知器&#xff08;QSocketNotifier&#xff09;…

【Diffusion模型】Cold Diffusion: 无噪声反转任意图像变换

Cold Diffusion: Inverting Arbitrary Image Transforms Without Noise 标准的扩散模型涉及图像变换--添加高斯噪声和反转这种退化的图像复原算子。我们观察到,扩散模型的生成行为与图像降级的选择并无密切关系,事实上,通过改变这种选择,可以构建整个生成模型系列。即使使用…