OpenHarmony实战:轻量系统芯片移植准备

由于OpenHarmony工程需要在Linux环境下进行编译,此章节将指导厂商搭建OpenHarmony的编译环境、获取OpenHarmony源码,并且创建厂商工作目录完成厂商芯片的编译框架适配。

搭建编译环境

开展移植前请参考开发环境准备完成环境搭建工作。

获取源码

获取操作

请参考获取源码完成源码下载并进行编译。

icon-note.gif

 说明: 本文档仅适用于OpenHarmony LTS 3.0.1及之前版本,所以请获取对应版本的源码。

目录介绍

OpenHarmony源码重要目录介绍见表1 OpenHarmony重要目录,其中device和vendor目录为芯片厂商和终端模组厂商工作区域(在搭建编译框架部分详细介绍)。

表1 OpenHarmony重要目录

目录用途
build编译框架所在目录。
kernel/liteos_m内核所在的目录,其中arch目录描述支撑的内核架构。
device芯片厂商适配目录,其中“config.gni”描述当前芯片使用的arch,工具链,编译链接选项等。
vendor终端模组厂商适配目录,其中“config.json”描述需要集成的OpenHarmony子系统列表。
utilsfile,kv等相关的适配。

搭建编译框架

厂商开展移植工作时,需要在工程中按照公司名、芯片型号、开发板型号等创建工作目录,并且将所创目录加入到OpenHarmony的编译框架中,使厂商的工作目录能够参与编译,开发者可参照以下步骤进行操作。

  1. 新增芯片厂商。 基于某款芯片进行OpenHarmony的适配,需要在device目录下创建芯片厂商目录,目录内文件描述内核类型,编译工具链,编译链接选项,内核配置选项等。

    创建目录规则:“device/{芯片厂商}/{芯片开发板}”。

    例:“device/MyDeviceCompany/MyBoard”

    device
    ├── hisilicon                                   # hisilicon芯片相关目录,创建目录时可供参考
    ├── MyDeviceCompany                             # MyDeviceCompany 芯片厂商
    │   └── MyBoard                                 # MyBoard 芯片型号
    │          ├── BUILD.gn
    │          ├── liteos_m
    │          │   └── config.gni                   # 芯片工具链,编译链接选项
    │          └── target_config.h                  # 内核配置选项
    └── qemu                                        # qemu相关

    编译脚本:将“device/MyDeviceCompany/MyBoard”下的文件添加到OpenHarmony编译框架中。

    路径:“device/MyDeviceCompany/MyBoard/BUILD.gn”

    group("MyBoard") {    #将此BUILD.gn文件加入解析print("MyDeviceCompany MyBoard is under developing.")
    }

    开发板编译配置:包括内核类型、工具链类型以及编译参数等内容(详见表2“config.gni”主要配置项)。

    路径:“device/MyDeviceCompany/MyBoard/liteos_m/config.gni”

    # Kernel type, e.g. "linux", "liteos_a", "liteos_m".
    kernel_type = "liteos_m"# Kernel version.
    kernel_version = ""# Board CPU type, e.g. "cortex-a7", "riscv32".
    board_cpu = "cortex-m4"# Board arch, e.g.  "armv7-a", "rv32imac".
    board_arch = ""# Toolchain name used for system compiling.
    # E.g. gcc-arm-none-eabi, arm-linux-harmonyeabi-gcc, ohos-clang,  riscv32-unknown-elf.
    # Note: The default toolchain is "ohos-clang". It's not mandatory if you use the default toochain.
    board_toolchain = "arm-none-eabi-gcc"# The toolchain path instatlled, it's not mandatory if you have added toolchian path to your ~/.bashrc.
    board_toolchain_path = ""# Compiler prefix.
    board_toolchain_prefix = "arm-none-eabi-"# Compiler type, "gcc" or "clang".
    board_toolchain_type = "gcc"# Board related common compile flags.
    board_cflags = []
    board_cxx_flags = board_cflags
    board_ld_flags = []# Board related headfiles search path.
    board_include_dirs = []# Board adapter dir for OHOS components.
    board_adapter_dir =""

    表2 “config.gni”主要配置项

    配置项介绍
    kernel_type开发板使用的内核类型,例如:“liteos_a”,“liteos_m”,“linux”。
    kernel_version开发板使用的内核版本。
    board_cpu开发板CPU类型,例如:“cortex-m4”,“cortex-a7”,“riscv32”。
    board_arch开发芯片arch指令集, 例如:“armv7-a”。
    board_toolchain开发板自定义的编译工具链名称,例如:“gcc-arm-none-eabi”。若为空,则使用默认为ohos-clang。
    board_toolchain_path编译工具链路径,为空则默认使用环境变量中的工具链。
    board_toolchain_prefix编译工具链前缀,例如:“arm-none-eabi-”。
    board_toolchain_type编译工具链类型,目前支持gcc和clang。
    board_cflags开发板配置的c文件编译选项。
    board_cxx_flags开发板配置的cpp文件编译选项。
    board_ld_flags开发板配置的链接选项。
    board_include_dirs开发板配置的系统头文件路径列表。
    board_adapter_dir开发板适配文件路径。
  2. 新增模组终端厂商。 基于某款具备OpenHarmony能力的芯片进行模组终端开发,需要在vendor下创建模组厂商目录,目录内容主要是使用的OpenHarmony子系统能力。

    创建目录规则:“vendor/{产品模组厂商}/{产品模组名称}”。

    例:“vendor/MyVendorCompany/MyProduct”

    vendor
    ├── hisilicon                                            # hisilicon 产品相关目录,可供参考
    └── MyVendorCompany                                      # MyVendorCompany 产品模组厂商└── MyProduct                                     # 具体产品├── BUILD.gn└── config.json                            # 产品子系统列表

    编译脚本:将“vendor/MyVendorCompany/MyProduct/BUILD.gn”下的文件添加到OpenHarmony编译框架中。

    路径:“vendor/MyVendorCompany/MyProduct/BUILD.gn”

    group("MyProduct") {print("MyVendorCompany MyProduct is under developing.")
    }

    产品配置信息:包括产品名、设备厂商、内核类型以及所添加的子系统列表等信息(详见表3)。

    路径:“vendor/MyVendorCompany/MyProduct/config.json”

    {"product_name": "MyProduct","ohos_version": "OpenHarmony 1.0","device_company": "MyDeviceCompany","board": "MyBoard","kernel_type": "liteos_m","kernel_version": "","subsystems": [{"subsystem": "startup","components": [{ "component": "bootstrap", "features":[] },{ "component": "syspara_lite", "features":["enable_ohos_startup_syspara_lite_use_thirdparty_mbedtls = false"]}]}],"vendor_adapter_dir": "","third_party_dir": "","product_adapter_dir": "//vendor/MyVendorCompany/MyProduct/hals",
    }

    表3 “config.json”文件配置项

    配置项介绍
    product_name产品名称,hb set时显示产品名称。
    ohos_versionOpenHarmony版本号,与实际版本保持一致即可。
    device_company芯片厂商名称,与device的二级目录名称一致。
    board开发板名称,与device的三级目录名称一致。
    kernel_type内核类型,应与开发板移植的OpenHarmony系统内核类型匹配。
    kernel_version内核版本号,与config.gni中kernel_version值匹配。
    subsystem产品选择的子系统,应为OS支持的子系统。子系统定义请见build/lite/components目录下的各子系统描述文件。
    components产品选择的某个子系统下的组件,子系统支持的组件详见build/lite/components/{子系统}.json文件。
    features产品配置的某个组件的特性,详见子系统源码目录对应的BUILD.gn文件。
    vendor_adapter_dir适配IOT外设,UtilsFile文件读写能力,一般指向device下目录。使用详见文件子系统移植实例步骤2。
    third_party_dir芯片厂自身三方软件目录,例如mbedtls,lwip等。如果使用OpenHarmony提供的三方软件,可暂时设空,也可参考hispark_pegasus的配置 。
    product_adapter_dir适配hal_token以及系统参数,一般指向vendor下目录。使用详见启动恢复子系统移植实例步骤1。

    icon-note.gif

     说明:

    1. 编译构建系统会对字段进行有效性检查,其中:
    • device_company,board,kernel_type,kernel_version应与芯片厂商配置匹配。

    • subsystem,component应与“build/lite/components”下的部件描述匹配。

最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。 

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

鸿蒙(HarmonyOS NEXT)最新学习路线

  •  HarmonOS基础技能

  • HarmonOS就业必备技能 
  •  HarmonOS多媒体技术

  • 鸿蒙NaPi组件进阶

  • HarmonOS高级技能

  • 初识HarmonOS内核 
  • 实战就业级设备开发

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

《鸿蒙 (OpenHarmony)开发入门教学视频》

《鸿蒙生态应用开发V2.0白皮书》

图片

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

图片

 《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

图片

 《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

图片

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

图片

 获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料

总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。 

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

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

相关文章

【Redis】Redis的类型及相关操作

一、常用的key操作命令 keys * 查看当前数据库的键值 ttl key 查看还有多少秒过期,-1表示永不过期,-2表示过期 del / unlink key 同样是删除,unlink是非阻塞删除,del则有可能导致阻塞 select dbindex 切换数据库 flushdb 清空…

群晖配置FTP服务结合内网穿透实现公网访问本地NAS中储存文件

文章目录 1. 群晖安装Cpolar2. 创建FTP公网地址3. 开启群晖FTP服务4. 群晖FTP远程连接5. 固定FTP公网地址6. 固定FTP地址连接 本文主要介绍如何在群晖NAS中开启FTP服务并结合cpolar内网穿透工具,实现使用固定公网地址远程访问群晖FTP服务实现文件上传下载。 Cpolar内…

文章分享:《呼吸道传染病标本采集及检测专家共识》

【摘要】呼吸道传染病临床特点多表现为发热和(或)呼吸道症状,病原学组成复杂,标本类型选择多样,如何从发热伴呼吸道症候群患者中早期正确识别出潜在呼吸道传染病患者是防控的关键环节。增强医务人员对呼吸道传染病临床…

unity学习(78)--unity调试--长痛不如短痛

1.在vs2022中,工具--获取工具与功能。 2. 安装图中工具,原来我早就安装了。 3 f9下断 同时点击图中按钮 vs此时变为如下状态 unity中出现如下提示: 4 在unity中运行游戏,vs这边确实成功断住了!

第四百三十七回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 们在上一章回中介绍了"不同平台上换行的问题"相关的内容,本章回中将介绍如何在页面上显示蒙板层.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们…

简易线程池实现

简易线程池实现 ThreadPool.hpp&#xff08;线程池&#xff09; #ifndef THREADPOOL_HPP #define THREADPOOL_HPP#include <iostream> #include <cstdlib> #include <unistd.h> #include <vector> #include <queue> #include "sem.hpp&qu…

【已解决】java: 无效的目标发行版: 19

问题描述 现在从Spring Boot官网下载的Spring boot文件的诸多配置的版本&#xff0c;无法直接选择和电脑已有配置相匹配的。所以直接下载安装包&#xff0c;并用IDEA打开后无法直接运行。 我在网站上下载的配置如下图&#xff1a; 我遇到的问题是运行时报错java: 无效的目标发…

Flink Checkpoint 状态后端详解:类型、特性对比及场景化选型指南

Apache Flink 提供了多种状态后端以支持 Checkpoint 机制下的状态持久化&#xff0c;确保在故障发生时能够快速恢复状态并实现 Exactly-Once 处理语义。以下是几种常见状态后端的详细介绍及其对比情况&#xff0c;以及不同场景下的选型建议&#xff1a; 1. MemoryStateBackend…

Go项目结构整洁实现|GitHub 3.5k

一、前言 hi&#xff0c;大家好&#xff0c;这里是白泽。今天给大家分享一个GitHub &#x1f31f; 3.5k 的 Go项目&#xff1a;go-backend-clean-arch https://github.com/amitshekhariitbhu/go-backend-clean-architecture 这个项目是一位老外写的&#xff0c;通过一个 HTT…

【QT学习】4.浮动窗口

结果&#xff1a; 代码&#xff1a; //制作核心控件&#xff1a;文本编辑框QTextEdit* pTextEditnew QTextEdit;//制作浮动控件connect(pMenu1,&QMenu::triggered,[](QAction* pAction){qDebug()<<pAction->text()<<endl;if(pAction->text()"浮动…

WebGIS 之 Openlayer

1.导入第三方依赖 <link rel"stylesheet" href"https://lib.baomitu.com/ol3/4.6.5/ol.css"> <script src"https://lib.baomitu.com/ol3/4.6.5/ol.js"></script>2.初始化地图 初始化地图new ol.Map({}) 参数target:制定初始化…

国资委确定首批起航企业,重点布局人工智能、量子信息等新兴领域

国务院国资委近日按照“四新”&#xff08;新赛道、新技术、新平台、新机制&#xff09;标准&#xff0c;遴选确定了首批启航企业&#xff0c;加快新领域新赛道布局、培育发展新质生产力。 据了解&#xff0c;去年以来&#xff0c;国务院国资委围绕加快培育创新型国有企业&…

【华为OD机试C++】求int型正整数在内存中存储时1的个数

《最新华为OD机试题目带答案解析》:最新华为OD机试题目带答案解析,语言包括C、C++、Python、Java、JavaScript等。订阅专栏,获取专栏内所有文章阅读权限,持续同步更新! 文章目录 描述输入描述输出描述示例1示例2代码描述 输入一个 int 型的正整数,计算出该 int 型数据在内…

汉语语音基本特性

发音的生理基础和过程 人的发音生理机构如图 2.3.1所示,发音时由肺部收缩送出一股直流空气,经气管流至喉头声门处(声门即声带开口处),在发声之初,声门处的声带肌肉收缩,声带并拢间隙小于 1mm,这股直流空气冲过很小的缝隙,使声带得到横向和纵向的速度,此时,声带向两边运动,缝隙…

【LeetCode热题100】【链表】K 个一组翻转链表

题目链接&#xff1a;25. K 个一组翻转链表 - 力扣&#xff08;LeetCode&#xff09; 递归迭代&#xff0c;迭代翻转每组的链表节点&#xff0c;递归翻转下一组的链表节点 class Solution { public:ListNode* reverseKGroup(ListNode* head, int k) {ListNode*nextHeadhead; …

事件队列事件循环(EventLoop) 宏任务 微任务详解 面试题

事件队列 事件循环 EventLoop 宏任务 微任务详解 一、概念二、宏任务&#xff08;多个&#xff09;、微任务&#xff08;1个&#xff09;三、Promise 的构造函数四、process.nextTick在事件循环中的处理五、vue nextTick原理 一、概念 event: 事件 loop: 循环&#xff0c;循环…

突破编程_C++_C++14新特性(C++14新特性概览)

1 C14 的发展背景 C14 是 C 编程语言的一个重要版本&#xff0c;它的发展背景紧密关联于C语言的发展历程以及计算机科学领域的整体进步。 首先&#xff0c;C 语言起源于 20 世纪 80 年代早期&#xff0c;它的设计初衷是为了提供一种功能强大、高效且可移植的编程语言&#xf…

系统学习Docker:1_Docker简介以及2_安装Docker

01-Docker简介 什么是Docker 在不同的机器和操作系统中安装运行环境和依赖库是一件很烦人的事情&#xff0c;容器就是为了解决这一问题而出现的技术。 容器是一种虚拟化技术&#xff0c;将应用程序及其依赖项&#xff08;环境、系统工具等&#xff09;打包到一个独立的可移植…

数据结构:链表的双指针技巧

文章目录 一、链表相交问题二、单链表判环问题三、回文链表四、重排链表结点 初学双指针的同学&#xff0c;请先弄懂删除链表的倒数第 N 个结点。 并且在学习这一节时&#xff0c;不要将思维固化&#xff0c;认为只能这样做&#xff0c;这里的做法只是技巧。 一、链表相交问题 …

[Linux]基础IO(中)---理解重定向与系统调用dup2的使用、缓冲区的意义

重定向理解 在Linux下&#xff0c;当打开一个文件时&#xff0c;进程会遍历文件描述符表&#xff0c;找到当前没有被使用的 最小的一个下标&#xff0c;作为新的文件描述符。 代码验证&#xff1a; ①&#xff1a;先关闭下标为0的文件&#xff0c;在打开一个文件&#xff0c;…