【入门到实战】OpenHarmony南向子系统开发:DeviceInfo适配

鸿蒙实战开发(5.0)DeviceInfo适配规范 OHOS 固定值参数由OHOS系统填充,厂商不能也不需适配,目前这部分参数主要定义在/base/startup/init/services/etc/param/ohos_const/ohos.para文件中。 阅读详情

往期鸿蒙5.0全套实战文章必看:(文中附带全栈鸿蒙5.0学习资料)


DeviceInfo适配

启动子系统设备信息说明

系统参数接口名描述
const.product.devicetypeconst char* GetDeviceType(void)返回当前设备类型
const.product.manufacturerconst char* GetManufacture(void)返回当前设备生产厂家信息
const.product.brandconst char* GetBrand(void)返回当前设备品牌信息
const.product.nameconst char* GetMarketName(void)返回当前设备传播名
const.build.productconst char* GetProductSeries(void)返回当前设备产品系列名
const.product.modelconst char* GetProductModel(void)返回当前设备认证型号
const.software.modelconst char* GetSoftwareModel(void)返回当前设备内部软件子型号
const.product.hardwareversionconst char* GetHardwareModel(void)返回当前设备硬件版本号
const.product.hardwareprofileconst char* GetHardwareProfile(void)返回当前设备硬件profile
ohos.boot.snconst char* GetSerial(void)返回当前设备序列号(SN号)
const.product.software.versionconst char* GetDisplayVersion(void)返回当前设备用户可见的软件版本号
const.product.bootloader.versionconst char* GetBootloaderVersion(void)返回当前设备Bootloader版本号
const.product.udidint GetDevUdid(char *udid, int size)获取设备udid(先通过参数获取,获取失败通过计算获取)
const char *AclGetSerial(void);返回当前设备序列号(SN号)(带访问权限检查)
int AclGetDevUdid(char *udid, int size);获取设备udid(带访问权限检查)

设备信息来源

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文件中。

厂商固定值参数的适配:

  • 厂商固定值参数:

    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中适配,并安装到指定目录。

      ohos_prebuilt_etc("para_for_chip_prod") {
          source = "./para/hardware_rk3568.para"
          install_images = [ chip_prod_base_dir ]
          relative_install_dir = "para"
          part_name = "product_rk3568"
      }
      
    • 轻量系统与小型系统在产品对应的hals/utils/sys_param/vendor.para文件中配置。例如:

      const.product.manufacturer=Talkweb
      
      const.product.brand=Talkweb
      
      const.product.name=Niobe
      
      const.build.product=Niobe
      
      const.product.model=Niobe407
      
      const.software.model="2.0.0"
      
      const.product.hardwareversion="1.0.0"
      
      const.product.hardwareprofile="RAM:192K,ROM:1M,ETH:true"
      ... ...
      

厂商动态参数的适配

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

  1. 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。

  2. 编译宏定义的形式获取参数,目前主要在轻量系统与小型系统中用到,例如:

    defines = [
        "INCREMENTAL_VERSION=\"${ohos_version}\"",
        "BUILD_TYPE=\"${ohos_build_type}\"",
        "BUILD_USER=\"${ohos_build_user}\"",
        "BUILD_TIME=\"${ohos_build_time}\"",
        "BUILD_HOST=\"${ohos_build_host}\"",
        "BUILD_ROOTHASH=\"${ohos_build_roothash}\"",
    ]
    
  3. 在BUILD.gn中定义,可参考文件/base/startup/init/services/etc/BUILD.gn,例如:

    if (target_cpu == "arm64") {
        extra_paras += [ "const.product.cpu.abilist=arm64-v8a" ]
    }
    if (build_variant == "user") {
        extra_paras += [
            "const.secure=1",
            "const.debuggable=0",
        ]
    } else if (build_variant == "root") {
        extra_paras += [
            "const.secure=0",
            "const.debuggable=1",
        ]
    }
    if (device_type != "default") {
        extra_paras += [
            "const.product.devicetype=${device_type}",
            "const.build.characteristics=${device_type}",
        ]
    }
    module_install_dir = "etc/param"
    
    
特别说明:
  1. 小型系统的产品需要在hals/utils/sys_param/BUILD.gn中添加vendor.para的编译,具体如下:

    copy("vendor.para") {
        sources = [ "./vendor.para" ]
        outputs = [ "$root_out_dir/vendor/etc/param/vendor.para" ]
    }
    
  2. 轻量系统的产品由于没有文件系统,在编译时会把hal_sys_param.c和vendor.para文件转化为头文件,编译时直接编译到系统中。

OpenHarmony-2.DeviceInfo适配 ohos.boot.sn参数值的获取方式:首先从cmdline(由uboot生成)获取,如果获取到的是sn值则直接读取,若获取的是文件路径,则从文件中读取;当获取不到时从默认的Sn文件读取,默认文件为:/sys/block/mmcblk0/device/cid;在BUILD.gn中定义,参考文件/base/startup/init/services/etc/BUILD.gn。厂商动态值参数,目前有三种获取形式:cmdline读取,编译宏定义,在BUILD.gn中定义。1.启动子系统设备信息说明。 阅读详情

相关推荐

React Native for OpenHarmony 设备信息获取实战:DeviceInfo 接入与踩坑指南

在跨端应用开发中,设备信息获取是构建兼容层的基础能力,涉及设备型号、系统版本、唯一标识等关键数据。react-native-device-info 通过统一的 JS 接口封装了各平台原生实现,开发者无需深入底层即可快速构建设备识别层,这在高碎片化的硬件生态中尤为重要。其技术价值体现在帮助业务实现差异化适配、性能监控与用户画像,适用于手机、平板及各类开发板。在 OpenHarmony 场景下,由于设备树多样、权限管控严格,接入该库常面临 RK3568 设备树选型、API 返回空值及 React Native

weixin_28707365的博客 206

HarmonyOS应用开发-基础建设

鸿蒙开发正当时,现在入手正是好时机。还在犹豫不决的朋友们,小编在这里建议大家早点入手!在这里分享一份鸿蒙学习路线图帮助那些不知道怎么入门的朋友,另外一些鸿蒙开发的资料文档也顺便分享给大家,扫下方二维码就能免费送呢!1、UI开发(ArkTS声明式开发范式)概述2、开发布局3、添加组件4、显示图片5、使用动画6、支持交互事件7、性能提升的推荐方法设置深色模式上传文件在新窗口中打开页面管理位置权限并发概述使用异步并发能力进行开发使用多线程并发能力容器类库。

m0_56144365的博客 1178

OpenHarmony HDF驱动框架在RK3588平台的Linux内核适配与UART串口配置实战

本文详细介绍了在RK3588平台上适配OpenHarmony HDF驱动框架的实战过程,重点涵盖Linux内核编译、HDF框架集成与UART串口设备树配置。通过环境搭建、内核配置修改、设备树编写及HDF驱动适配等步骤,帮助开发者解决嵌入式开发中的常见问题,实现高效的驱动开发与硬件调试。

threejs5artist的博客 822

【Openharmony】【4.0R】hello程序之“hap_pack.gni”模板使用方法

Openharmony4.0 Release LiteOS-A内核 “hap_pack.gni”模板简单使用方法记录

luyixiaoqingge的博客 1149

鸿蒙OpenHarmony【@ohos.enterprise.deviceInfo(设备信息管理)】ArkTS API

本模块提供企业设备信息管理能力,包括获取设备序列号等。

hhhhhh2323的博客 619

OpenHarmony实战开发-一次开发,多端部署、常见问题

设备类型分为default(默认设备)、tablet、tv、wearable、2in1等,有多种查询设备类型的方式。

m0_70749039的博客 1184

bootdevice驱动分析

最近在一些项目里接触到了hw笔记本+linux,hw在笔记本上自己做了一个linux内核原本没有驱动——bootdevice。研究了一下发现,这好像是从安卓的内核里面扣过来的,不清楚是安卓内核本身就有还是hw自己做的。github上找到一个hw安卓内核分析了一下,感觉还挺有意思的,分享一下。 bootdevice驱动写的非常加单,是用来记录启动设备的驱动,这是驱动的说明Support multiple bootdevice, eMMC or UFS,这毕竟是安卓的内核,启动设备仅支持emmc和ufs的识别,

sium__的专栏 2470

OpenHarmony与React Native动画适配优化实战

在跨平台移动应用开发中,动画效果是提升用户体验的关键技术之一。React Native的AnimatedInterpolation模块通过将输入范围映射到输出范围,实现了复杂的动画效果,如颜色渐变和位置变化。然而,在OpenHarmony这样的分布式操作系统上,由于其独特的渲染机制和线程模型,标准的RN动画实现可能面临性能瓶颈。本文深入探讨了如何通过计算下沉、批处理机制和内存池优化等技术手段,解决OpenHarmony环境下动画卡顿和帧率不稳定的问题。这些优化不仅适用于颜色渐变动画,也可广泛应用于UI过渡、

weixin_30376083的博客 433

React Native for OpenHarmony 实战:DeviceInfo 设备信息详解

DeviceInfo是指应用程序能够获取的关于运行设备的各种信息集合,包括但不限于设备型号、操作系统版本、屏幕参数、唯一标识符等。在React Native应用中,DeviceInfo是连接JavaScript层与原生层的关键桥梁,使跨平台应用能够感知并适应不同的设备环境。在React Native生态系统中,是最广泛使用的设备信息获取库,它通过原生模块桥接技术,将各平台的设备信息API封装为统一的JavaScript接口。

Abin 1156

海康工业相机BayerRG8转BGR8实战:手把手教你用OpenCV实现高效图像转换

本文详细解析了海康工业相机BayerRG8格式到BGR8格式的高效转换实战。针对工业视觉项目中高帧率、大分辨率场景下的性能瓶颈,文章对比了海康SDK原生方案与OpenCV多种转换方法的优劣,并提供了从基础实现到高级优化(如多线程流水线、内存管理、SIMD指令集应用)的完整代码示例与性能调优策略,帮助开发者构建稳定、高效的图像处理系统。

weixin_29237635的博客 523

5分钟搞定Vivado IP核的VCS仿真:从Export脚本到Verdi波形查看全流程

本文详细介绍了如何利用Vivado的Export Simulation功能,快速搭建Vivado IP核的VCS与Verdi联合仿真环境。通过自动化脚本生成、FSDB波形配置及高效调试技巧,实现从工程导出到波形查看的全流程,大幅提升FPGA验证效率,尤其适合IC验证工程师和竞赛团队。

weixin_29306261的博客 479

OpenHarmony子系统开发 - init启动引导组件(八)

ueventd负责监听内核设备驱动插拔的netlink事件,根据事件类型动态管理相应设备的dev节点。

__Benco的博客 1534

【32】C# WinForm入门到精通 ——打开文件OpenFileDialog 【属性、方法、事件、实例、源码】

本文介绍了WinForm开发中OpenFileDialog控件的关键属性及其应用。OpenFileDialog是.NET Framework提供的文件对话框控件,主要用于选择、打开文件操作。文章详细讲解了11个核心属性:AddExtension(自动补全扩展名)、AutoUpgradeEnabled(外观升级)、CheckFileExists/CheckPathExists(文件/路径存在验证)、DefaultExt(默认扩展名)、DereferenceLinks(解析快捷方式)、FileName/File

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1534

Flutter三方库适配OpenHarmony【apple_product_name】deviceInfo系统API调用

本文详细介绍了OpenHarmony系统中deviceInfo模块的使用方法,重点分析了apple_product_name库如何利用productModel和marketName两个核心属性实现设备识别功能。文章涵盖API导入方式、属性特性对比、三级降级策略设计以及性能优化实践等内容。deviceInfo作为基础服务工具包的重要组件,提供无需权限即可访问的设备硬件信息,其属性值在设备生命周期内保持不变,适合缓存优化。通过深入解析源码实现,展示了如何利用标准化接口获取设备型号标识符和市场名称,为开发者提供了

小淼淼的博客 743

YOLOv11改进 | 注意力篇 | YOLOv11引入24年动态卷积块注意力(Dynamic-CBAM),并构建C2PSA_DynamicCBAM

1.Dynamic-CBAM介绍1.1 摘要:重度抑郁症是一种普遍而严重的心理健康状况,对您的情绪,思想,行动和对世界的整体感知产生负面影响。由于抑郁症的症状不明显,确定一个人是否抑郁是很复杂的。然而,他们的声音可能是我们可以识别抑郁症迹象的因素之一。抑郁的人会表现出不适、悲伤,他们可能说话缓慢、颤抖,声音中失去情感。在这项研究中,我们提出了动态卷积块注意力模块(DynamicCBAM),用于在注意力-GRU网络中通过分析人类的音频信号来分类情感。

tsg6698的博客 1001

把 ABAP ALE Change Pointers 讲透:从 CDHDR/CDPOS 到 BDCP2,再到 RBDMIDOC 的自动分发链路

摘要:SAP ALE Change Pointers机制在系统集成中实现业务变更与数据分发的解耦。它记录业务对象变更(如SAP主数据修改),但不立即发送,而是由后续分发逻辑决定发送时机和方式。该机制包含两层:Change Documents记录审计级变更明细,Change Pointers标记需分发的关键变更。配置核心包括全局开关、消息类型激活和字段选择。典型应用如零售价格条件变更自动推送至POS系统,通过BDCP2表存储待处理队列,由RBDMIDOC程序定时评估生成IDoc。运维需关注定期清理和性能优化,

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 208

React Native鸿蒙版:DeviceInfo获取唯一标识

本文深入探讨在React Native for OpenHarmony环境下获取设备唯一标识的实战方法。通过分析OpenHarmony 6.0.0平台特性,详细讲解DeviceInfo API的使用技巧、适配要点及安全考量。文章包含5个可运行代码示例、3个mermaid图表和2个实用对比表格,帮助开发者解决设备标识获取中的常见问题,确保应用在OpenHarmony设备上的稳定运行与用户隐私合规。读者将掌握从基础配置到高级应用的全流程实现,避免在OpenHarmony平台上遇到标识获取失败、权限不足等典型问题

Abin 910

SAP UI5 本地开发工具 fiori-tools-proxy 中间件详解及使用场景

该中间件基于 http-proxy-middleware 库实现,分为 ui5 资源代理和 backend 代理两大模式,并可与 fiori run 或 ui5 serve 命令无缝集成,通过配置 ui5.path、ui5.url 以及 backend.path、backend.url 等参数,实现与目标系统的灵活对接和安全配置 (就后端系统代理而言,fiori-tools-proxy 内置 @sap-ux/backend-proxy-middleware,可将以指定前缀(如。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 516

React Native鸿蒙:DeviceInfo应用版本读取

在React Native跨平台开发中,DeviceInfo模块是获取设备和应用信息的核心工具。它提供了丰富的API来查询设备型号、操作系统版本、应用版本号等关键信息,是实现设备适配、功能降级和用户行为分析的重要基础。本文深入探讨了在React Native for OpenHarmony环境下使用DeviceInfo模块获取应用版本信息的完整方案。通过架构分析、平台差异对比和实战代码,我们系统地解决了OpenHarmony 6.0.0 (API 20)平台上应用版本读取的关键问题。

2501_91746149的博客 723

详解账务核心,从入门到精通

本文系统阐述了账务体系的设计原理与实现方法,围绕支付交易的基础设施——账务系统展开深入探讨。文章首先从账务实现原理出发,强调从客户场景中抽象能力的重要性,详细解析了账务总架构及其与外围系统的协同关系。随后重点剖析了账户子系统的设计,包括账户生态、主体管理、结构设计等核心要素,并针对热点账户问题提出了多种创新解决方案。此外,文章还深入探讨了会计日切原理、营销类账务处理等专业领域,最后以支付机构场景为例,全面解析了清结算业务的账务实现模型。全文通过理论结合实践的方式,为构建高效、可靠的账务系统提供了系统性的方法

银行信息系统应用架构详解 528

CUDA编程00 - 配置CUDA开发环境

第一步:在一台装有Nvidia显卡和驱动的机器上,用nvidia-smi命令查看显卡所支持cuda版本。安装时按提示下一步即可,安装完成用 nvcc -V 命令检查是否成功。第二步: 到Nvidia官网下载CUDA Toolkit并安装,第三步:编写HelloWorld。

GPU全栈博主 1359

Flutter在OpenHarmony平台的适配开发实践

跨平台开发框架Flutter通过其高效的渲染引擎和丰富的组件库,为开发者提供了构建高性能应用的解决方案。其核心原理在于使用Dart语言编写业务逻辑,通过Skia图形库实现跨平台UI渲染。在OpenHarmony生态中,Flutter需要特别处理平台特定的适配问题,如字体渲染、暗黑模式等。这种技术组合特别适合需要快速迭代且追求原生性能的应用场景,如文中的'幸运大转盘'应用。通过Riverpod状态管理和模块化架构,开发者可以高效实现用户中心等核心功能,同时利用OpenHarmony的分布式特性增强应用能力。

weixin_34174105的博客 606

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

OpenHarmony 仓颉开发实战:BasicServicesKit 中 ohos.device_info 模块设备信息查询全解

本文系统讲解仓颉(Cangjie)在 OpenHarmony 应用开发中使用的 `ohos.device_info` 模块:如何通过 `import kit.BasicServicesKit.*` 导入模块、`DeviceInfo` 类的 35 个只读静态属性如何按“标识、版本、机型、构建”四类组织、哪些属性依赖 `ohos.permission.sec.ACCESS_UDID` 敏感权限,并附一

gitblog_00221的博客 185

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Flutter三方库迁移OpenHarmony:设备型号识别适配实战

跨平台应用开发中,获取用户可读的设备型号是一项常见需求。Flutter通过统一的MethodChannel机制实现Dart与原生代码的通信,但迁移到OpenHarmony标准系统时,原生的设备信息接口与iOS/Android存在显著差异,直接复用会导致MissingPluginException。适配的核心逻辑在于理解新系统的能力边界:通过ArkTS侧新增插件实现,借助deviceInfo模块获取原始设备字段,再映射为产品展示名。这一过程不仅能解决社交、客服等场景中展示对方设备型号的痛点,也是Flutter

weixin_30074763的博客 273

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Flutter+OpenHarmony智能门禁开发实战

跨平台开发框架Flutter与开源操作系统OpenHarmony的结合,为智能硬件开发提供了新的技术路径。Flutter基于Skia引擎的渲染机制保证了UI性能,其热重载特性显著提升开发效率;OpenHarmony的分布式能力则解决了设备互联难题。在智能门禁场景中,这种技术组合通过统一硬件接口、优化通信协议,实现了多平台覆盖与功能扩展。特别是利用Flutter的插件生态快速集成蓝牙、NFC等模块,配合OpenHarmony的硬件抽象层,开发者可以高效构建支持多种开门方式的智能门禁系统。该方案在实际项目中验证

weixin_33862993的博客 385
上一篇: 【入门到实战】OpenHarmony南向子系统开发:Seccomp策略使能开发指南
下一篇: 【入门到实战】OpenHarmony南向子系统开发:ueventd介绍说明
懂你的大海
博客等级 码龄6年 9049粉丝 1381原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值