OpenHarmony(鸿蒙南向开发)——轻量系统芯片移植指南(二)

news2024/11/18 7:42:33

往期知识点记录:

  • 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总
  • 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~
  • OpenHarmony(鸿蒙南向开发)——轻量系统芯片移植指南(一)
  • OpenHarmony(鸿蒙南向开发)——轻量系统芯片移植指南(二)
  • 持续更新中……

移植安全子系统

安全子系统提供网络设备连接、认证鉴权等功能,依赖mbedtls实现硬件随机数以及联网功能。

由于每个厂商芯片硬件与实现硬件随机数的方式不同,需要适配硬件随机数接口。

移植指导

OpenHarmony提供了mbedtls的开源三方库,路径为“//third_party/mbedtls”。此库中提供了“mbedtls_platform_entropy_poll”、“mbedtls_hardclock_poll”、“mbedtls_havege_poll”、“mbedtls_hardware_poll”等几种产生随机数的方式。厂商需要根据芯片适配“mbedtls_hardware_poll”方式。

移植实例

  1. “config.json”添加文件系统。 路径:“vendor/MyVendorCompany/MyProduct/config.json”

修改如下:

    {
      "subsystem": "security",
      "components": [
        { "component": "hichainsdk", "features":[] },
        { "component": "huks", "features":[]}
      ]
    },
  1. 配置宏,打开硬件随机数接口相关代码。 根据mbedtls的编译文件可以看出,配置宏的位置在"MBEDTLS_CONFIG_FILE=<…/port/config/config_liteos_m.h>"文件中。

路径:“third_party/mbedtls/BUILD.gn”

    if (ohos_kernel_type == "liteos_m") {
      defines += [
        "__unix__",
        "MBEDTLS_CONFIG_FILE=<../port/config/config_liteos_m.h>",
      ]
    }

根据代码我们可以看出需要配置“MBEDTLS_NO_PLATFORM_ENTROPY”、“MBEDTLS_ENTROPY_HARDWARE_ALT”两个宏,才能编译硬件随机数的相关代码。

路径:“third_party/mbedtls/library/entropy.c”

    #if !defined(MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES)
    #if !defined(MBEDTLS_NO_PLATFORM_ENTROPY)
        mbedtls_entropy_add_source( ctx, mbedtls_platform_entropy_poll, NULL,
                                    MBEDTLS_ENTROPY_MIN_PLATFORM,
                                    MBEDTLS_ENTROPY_SOURCE_STRONG );
    #endif
    ......
    #if defined(MBEDTLS_ENTROPY_HARDWARE_ALT)
        mbedtls_entropy_add_source( ctx, mbedtls_hardware_poll, NULL,
                                    MBEDTLS_ENTROPY_MIN_HARDWARE,
                                    MBEDTLS_ENTROPY_SOURCE_STRONG );
    #endif
    ......
    #endif /* MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES */
    }
  1. 适配硬件随机数接口 接口定义如下:

路径:“third_party/mbedtls/include/mbedtls/entropy_poll.h”

    int mbedtls_hardware_poll( void *data,unsigned char *output, size_t len, size_t *olen );

表1 安全子系统配置项

配置项意义
disable_huks_binary是否编译HUKS源码。
(1) 默认值: false,不编译HUKS源码。
(2) 其他值: true,编译HUKS源码。
disable_authenticate是否需要裁剪hichain认证功能。
(1) 默认值: true,不裁剪。
(2) 其他值: false,裁剪hichain认证功能。
huks_use_lite_storage是否采用轻量化存储方案。无文件系统、仅有flash存储的设备,可采用轻量化存储方案。
(1) 默认值: true,使用轻量化存储。
(2) 其他值: false,不使用轻量化存储。
huks_use_hardware_root_key是否使用硬件根密钥。设备存在硬件根密钥能力时,需要根据自身能力适配硬件根密钥方案;HUKS提供的RKC方案仅为模拟实现。
(1) 默认值:false,默认值,默认无硬件根密钥。
(2) 其他值:true,设备具有硬件根密钥相关能力时,应自行适配。
huks_config_file是否使用HUKS默认配置文件。
(1) 默认值:“”:使用HUKS默认配置文件hks_config.h。
(2) 其他文件:产品可在HUKS支持能力集合中自行选择所要支持的特性。

说明: 在添加安全子系统时,可直接通过配置feature来选择安全子系统特性。

{
   "subsystem": "security",
   "components": [
     { "component": "hichainsdk", "features":[] },
     { "component": "huks", "features":
       [
         "disable_huks_binary = false",
         "disable_authenticate = false"
       ]
     }
   ]
 },

移植通信子系统

通信子系统目前涉及Wi-Fi和蓝牙适配,厂商应当根据芯片自身情况进行适配。

移植指导

Wi-Fi编译文件内容如下:

路径:“foundation/communication/wifi_lite/BUILD.gn”

group("wifi") {
  deps = [ "$ohos_board_adapter_dir/hals/communication/wifi_lite/wifiservice:wifiservice" ]
}

从中可以看到厂商适配相关接口的.c文件存放目录应为“$ohos_board_adapter_dir/hals/communication/wifi_lite/wifiservice”,且该目录下BUILD.gn文件中的目标应为“wifiservice”。需要厂商适配的Wi-Fi接口见表1 、表2 和表3,蓝牙接口见表4和表5。

表1 wifi_device.h

接口作用
EnableWifi启用Wi-Fista模式。
DisableWifi禁用Wi-Fi sta模式。
IsWifiActive检查Wi-Fi sta模式是否启用。
Scan扫描热点信息。
GetScanInfoList获取所有扫描到的热点列表。
AddDeviceConfig配置连接到的热点信息。
GetDeviceConfigs获取配置连接到的热点信息。
RemoveDevice删除指定的热点配置信息。
ConnectTo接到指定的热点。
Disconnect断开Wi-Fi连接。
GetLinkedInfo获取热点连接信息。
RegisterWifiEvent为指定的Wi-Fi事件注册回调。
UnRegisterWifiEvent取消注册以前为指定Wi-Fi事件注册的回调。
GetDeviceMacAddress获取设备的MAC地址。
AdvanceScan根据指定参数启动Wi-Fi扫描。

表2 wifi_hotspot_config.h

接口作用
SetBand设置该热点的频段。
GetBand获取该热点的频段。

表3 wifi_hotspot.h

接口作用
EnableHotspot启用Ap热点模式。
DisableHotspot禁用Ap热点模式。
SetHotspotConfig设置指定的热点配置。
GetHotspotConfig获取指定的热点配置。
IsHotspotActive检查Ap热点模式是否启用。
GetStationList获取连接到此热点的一系列STA。
GetSignalLevel获取指定接收信号强度指示器(RSSI)和频带指示的信号电平。
DisassociateSta使用指定的MAC地址断开与STA的连接。
AddTxPowerInfo将hotspot功率发送到beacon。

表4 ohos_bt_gatt.h

接口作用
InitBtStack初始化蓝牙协议栈。
EnableBtStack使能蓝牙协议栈。
DisableBtStack禁用蓝牙协议栈。
SetDeviceName设置蓝牙设备名称。
BleSetAdvData设置广播数据。
BleStartAdv开始广播。
BleStartAdvEx传入构建好的广播数据,参数,开启蓝牙广播。
BleStopAdv停止发送广播。
BleUpdateAdv更新advertising参数。
BleSetSecurityIoCap设置蓝牙的IO能力为NONE,配对方式为justworks。
BleSetSecurityAuthReq设置蓝牙是否需要配对绑定。
BleGattSecurityRsp响应安全连接请求。
ReadBtMacAddr获取设备MAC地址。
BleSetScanParameters设置扫描参数。
BleStartScan开始扫描。
BleStopScan停止扫描。
BleGattRegisterCallbacks注册gap,GATT事件回调函数。

表5 ohos_bt_gatt_server.h

接口作用
BleGattsRegister使用指定的应用程序UUID注册GATT服务器。
BleGattsUnRegister断开GATT服务器与客户端的连接。
BleGattsDisconnect断开GATT服务器与客户端的连接。
BleGattsAddService添加了一个服务。
BleGattsAddIncludedService将包含的服务添加到指定的服务。
BleGattsAddCharacteristic向指定的服务添加特征。
BleGattsAddDescriptor将描述符添加到指定的特征。
BleGattsStartService启动一个服务。
BleGattsStopService停止服务。
BleGattsDeleteService删除一个服务。
BleGattsClearServices清除所有服务。
BleGattsSendResponse向接收到读取或写入请求的客户端发送响应。
BleGattsSendIndication设备侧向APP发送蓝牙数据。
BleGattsSetEncryption设置GATT连接的加密类型。
BleGattsRegisterCallbacks注册GATT服务器回调。
BleGattsStartServiceEx根据传入的服务列表,创建gatt服务。
BleGattsStopServiceEx传入gatt服务句柄,停止gatt服务。

说明: 不同版本接口可能存在差异,需要根据当前版本的具体文件进行适配。

适配实例

  1. 在“config.json”中添加communication子系统。 路径:“vendor/MyVendorCompany/MyProduct/config.json”

修改如下:

    { 
        "subsystem": "communication", 
        "components": [ 
            { "component": "wifi_lite", "features":[] }
        ] 
    },
  1. 添加适配文件。

在“vendor/MyVendorCompany/MyProduct/config.json”文件中,通常将配置“ohos_board_adapter_dir”配置为 “//vendor/MyVendorCompany/MyProduct/adapter”。

在“ohos_board_adapter_dir”目录下根据上述适配指导中提到的头文件,适配Wi-Fi、蓝牙接口。

移植外设驱动子系统

外设驱动子系统提供OpenHarmony专有的外部设备操作接口。本模块提供设备操作接口有:FLASH, GPIO, I2C, PWM, UART, WATCHDOG等。

OpenHarmony提供了两种驱动适配方式:使用外设驱动子系统、使用HDF驱动框架。由于轻量级系统的资源有限,这里建议使用IOT子系统方式。

移植指导

厂商需要根据OpenHarmony提供的接口定义实现其功能,IOT子系统接口定义的头文件如下:

base/iot_hardware/peripheral/
├── BUILD.gn
└── interfaces
    └── kits
        ├── iot_errno.h
        ├── iot_flash.h
        ├── iot_gpio.h
        ├── iot_i2c.h
        ├── iot_pwm.h
        ├── iot_uart.h
        ├── iot_watchdog.h
        ├── lowpower.h
        └── reset.h

其中“base/iot_hardware/peripheral/BUILD.gn”文件如下:

import("//build/lite/config/subsystem/lite_subsystem.gni")
import("//build/lite/ndk/ndk.gni")

lite_subsystem("iothardware") {
  subsystem_components = [
    "$ohos_vendor_adapter_dir/hals/iot_hardware/wifiiot_lite:hal_iothardware",
  ]
}
if (ohos_kernel_type == "liteos_m") {
  ndk_lib("iothardware_ndk") {
    deps = [
      "$ohos_vendor_adapter_dir/hals/iot_hardware/wifiiot_lite:hal_iothardware", #依赖厂商的适配
    ]
    head_files = [ "//base/iot_hardware/peripheral/interfaces/kits" ]
  }
}

从中可以看到厂商适配相关接口的存放目录应为“$ohos_vendor_adapter_dir/hals/iot_hardware/wifiiot_lite”,且该目录下BUILD.gn文件中的目标应为hal_iothardware。

移植实例

  1. 在“config.json”中添加iot_hardware子系统。 路径:“vendor/MyVendorCompany/MyProduct/config.json”

修改如下:

    { 
        subsystem": "iot_hardware", 
        components": [ 
            { "component": "iot_controller", "features":[] }
        ] 
    },
  1. 添加适配文件。

在“vendor/MyVendorCompany/MyProduct/config.json”文件中,通常将配置“vendor_adapter_dir”配置为 “//device/MyDeviceCompany/MyBoard/adapter”。

在“vendor_adapter_dir”目录下进行适配:

    hals/iot_hardware/wifiiot_lite
    ├── BUILD.gn
    ├── iot_flash.c
    ├── iot_gpio.c
    ├── iot_i2c.c
    ├── iot_lowpower.c
    ├── iot_pwm.c
    ├── iot_reset.c
    ├── iot_uart.c
    └── iot_watchdog.c

其中BUILD.gn内容如下:

    static_library("hal_iothardware") {   #目标名
        sources = [                       #厂商适配的源文件
          "iot_watchdog.c",
          "iot_reset.c",
          "iot_flash.c",
          "iot_i2c.c",
          "iot_gpio.c",
          "iot_pwm.c",
          "iot_uart.c"
        ]
        include_dirs = [ ]
    }

其中,“include_dirs”需要根据工程实际情况包含两个路径:

  • iot子系统的头文件路径
  • 适配iot子系统所使用到的SDK的头文件路径

配置其他子系统

除上述子系统之外,还有一些必要但是无需进行移植的子系统。如:分布式任务调度子系统、DFX子系统。

这些子系统添加方式比较简单,在“vendor/MyVendorCompany/MyProduct/config.json”文件中进行如下配置即可:

{
  "subsystem": "distributed_schedule",
  "components": [
    { "component": "system_ability_manager", "features":[] }  # 此处部件名不同版本可能有变化,请根据实际代码填写
  ]
},
{
  "subsystem": "hiviewdfx",
  "components": [
    { "component": "hilog_lite", "features":[] },
    { "component": "hievent_lite", "features":[] }
  ]
},

经常有很多小伙伴抱怨说:不知道学习鸿蒙开发哪些技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?

为了能够帮助到大家能够有规划的学习,这里特别整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技术知识点。

在这里插入图片描述

《鸿蒙 (Harmony OS)开发学习手册》(共计892页):https://gitcode.com/HarmonyOS_MN/733GH/overview

如何快速入门?

1.基本概念
2.构建第一个ArkTS应用
3.……

开发基础知识:

1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……

在这里插入图片描述

基于ArkTS 开发

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……

在这里插入图片描述

鸿蒙开发面试真题(含参考答案):https://gitcode.com/HarmonyOS_MN/733GH/overview

在这里插入图片描述

OpenHarmony 开发环境搭建

图片

《OpenHarmony源码解析》:https://gitcode.com/HarmonyOS_MN/733GH/overview

  • 搭建开发环境
  • Windows 开发环境的搭建
  • Ubuntu 开发环境搭建
  • Linux 与 Windows 之间的文件共享
  • ……
  • 系统架构分析
  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ……

图片

OpenHarmony 设备开发学习手册:https://gitcode.com/HarmonyOS_MN/733GH/overview

图片
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2133137.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库与表的操作

目录 1. 库的操作 1.1创建数据库案例 1.2字符集和校验规则 1.2.1查看系统默认字符集以及校验规则 1.2.2 查看数据库支持的字符集 1.2.3查看数据库支持的字符集校验规则 1.2.4校验规则对数据库的影响 1.3.1查看数据库 1.3.2显示创建语句 1.3.3修改数据库 1.3.4 数据…

将一句英文颠倒输出

例如&#xff1a; 输入&#xff1a;s “i am from beijing" 输出&#xff1a;”beijing form am i“ #include <stdio.h> #include <string.h>//i am form nanjing //ginjnan mrof ma i //nanjing form am i//逆序算法(首尾互换) void Reserve(char *s,in…

windows 创建新用户,并分配到指定组

右击电脑 -> 点击管理 在右边右击&#xff0c;选择新用户&#xff0c;输入相关信息创建 创建用户后&#xff0c;选择用户&#xff0c;右击&#xff0c;选择属性&#xff0c;添加 点击高级 点击立即查找&#xff0c;可以搜索出所有可用的组&#xff0c;为其选择即可

mosh java 2.4 inheritance继承

1.面向对象编程的第三个特点 继承 继承的好处 java不能继承多个父级 代码文件结构 1.main.java package org.example; //package org.codewithme;//import org.example.UIControl;//TIP To <b>Run</b> code, press <shortcut actionId"Run"/> or /…

《深度学习》PyTorch 手写数字识别 案例解析及实现 <上>

目录 一、了解MINIST数据集 1、什么是MINIST 2、查看MINIST由来 二、实操代码 1、下载训练数据集 2、下载测试数据集 运行结果&#xff1a; 3、展示手写数字图片 运行结果&#xff1a; 4、打包图片 运行结果&#xff1a; 5、判断当前pytorch使用的设备 1&#xff…

RK3568 外接摄像头预览方向错误

1.测试发现摄像头预览方向被旋转了90度 2.问题原因: device\rockchip\common\external_camera_config.xml 配置文件旋转了90度: 3.解决对策 修改orientation为0度

MultiSnapRecyclerView:让Android RecyclerView的滚动停靠更灵活

在Android应用开发中&#xff0c;RecyclerView是一个强大且灵活的组件&#xff0c;用于展示大量数据集合。然而&#xff0c;标准的RecyclerView只支持单一的滚动停靠点&#xff0c;这在某些场景下可能不够灵活。为了解决这个问题&#xff0c;TakuSemba开发了一个名为MultiSnapR…

Vue3+TS项目给el-button统一封装一个点击后转圈效果的钩子函数按钮防抖

前言 每个按钮都要单独定义一个loading变量&#xff0c;并且在接口请求前修改为true&#xff0c;接口响应后再修改为false&#xff0c;封装后这段重复的逻辑就可以统一管理不用每次都写一遍了。 效果 新建一个公共的src\common.ts import { ref } from "vue"expor…

Apache-wed服务器环境的安装

一。安装httpd并且开启httpd yum install httpd systemctl start httpd 二。关闭防火墙 systemctl stop firewall 三。常规配置wed服务 mkdir /www vim index.html&#xff08;里面写入自己的内容&#xff09; chmod 755 index.htm chmod 755 /www vim /etc/httpd/co…

管家婆云辉煌手机端怎么连接蓝牙打印机?

管家婆云辉煌手机端可以连接蓝牙打印机&#xff0c;这样手机可以发送打印任务到蓝牙打印机&#xff0c;完成打印任务。具体的设置步骤如下&#xff1a; 一、首先完成手机和蓝牙打印机配对&#xff0c;打开蓝牙打印机后。手机开启蓝牙和定位服务 点击手机设置&#xff0c;进入手…

价值流案例研究:实战经验与成功实践的深度解析

价值流在实际应用中的强大效益 在全球化和数字化竞争愈加激烈的背景下&#xff0c;企业正面临如何优化内部流程、提升客户体验、减少成本和提高效益的多重挑战。《价值流指南》不仅是一种理论工具&#xff0c;更为企业提供了系统化的实践框架&#xff0c;以实现从理论到实战的…

Threejs之加载3D模型(上)

本文目录 前言一、模型类型1.1 支持的模型类型1.2 模型加载器 二、常用模型加载器2.1 代码示例2.1.1 GLTFLoader2.1.1.1 代码2.1.1.2 效果 前言 Three.js 是一个基于 WebGL 的 JavaScript 3D 库&#xff0c;它提供了丰富的 API 来在网页上创建和显示 3D 图形。加载 3D 模型到 T…

(学习总结16)C++模版2

C模版2 一、非类型模板参数二、模板的特化1. 概念2. 函数模板特化3. 类模板特化全特化偏特化类模板特化应用示例 三、模板分离编译1. 什么是分离编译2. 模板的分离编译3. 解决方法 模板总结 以下代码环境为 VS2022 C。 一、非类型模板参数 模板参数分为类型形参与非类型形参。…

硬件实用技巧:螺丝M标准、螺丝长度以及螺帽M直径

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/142205318 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

[LWIP] 如何实现LWIP热插拔功能

LWIP 1.4.1 硬件stm32f429 HAL 1.8.1 UCOSIII 步骤如下 1、在lwip的opt.h中使能宏定义LWIP_NETIF_LINK_CALLBACK 链接发生变化时调用回调函数 2、在初始化结束后调用函数netif_set_link_callback&#xff0c;为网卡设置一个回调函数&#xff0c;回调参考代码如下 /*** bri…

【诉讼流程-健身房-违约-私教课-多次沟通无效-民事诉讼-自我学习-铺平通往法律的阶梯-讲解(1)】

【诉讼流程-健身房-违约-私教课-多次沟通无效-前期法律流程-民事诉讼-自我学习-铺平通往法律的阶梯-讲解&#xff08;1&#xff09;】 &#xff08;1&#xff09;前言说明1、目的2、说明1- 本章你将会看到的内容2 - 健身房其中一些套路1、先给予体验课。2、合同里的文字陷阱3、…

【DOA估计】一种基于高阶广义奇异值分解的多声源方向估计方法【附MATLAB代码】

微信公众号&#xff1a;EW Frontier QQ交流群&#xff1a;554073254 摘要 一种基于高阶广义奇异值分解的多声源方位估计方法本文提出了一种有效的宽带声源波达方向&#xff08;DOA&#xff09;估计方法。所提出的框架提供了一种有效的方法来构建一个宽带互相关矩阵从多个窄带互…

压测服务器并使用 Grafana 进行可视化

简介 仓库代码 GitCode - 全球开发者的开源社区,开源代码托管平台 参考 Welcome! - The Apache HTTP Server Project Grafana | 查询、可视化、警报观测平台 https://prometheus.io/docs/introduction/overview/

html+css+js网页设计 旅游 厦门旅游网10个页面

htmlcssjs网页设计 旅游 厦门旅游网10个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&am…

基于vue框架的宠物寄养系统3d388(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,宠物信息,宠物分类,寄养店,宠物寄养,宠物领养,家庭环境,用户宠物 开题报告内容 基于Vue框架的宠物寄养系统开题报告 一、引言 随着人们生活水平的提高和宠物文化的普及&#xff0c;宠物已成为许多家庭不可或缺的一员。因此&…