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

news2024/11/24 16:59:33

由于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.coloradmin.cn/o/1564595.html

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

相关文章

非关系型数据库-----------探索 Redis高可用 与持久化

目录 一、Redis 高可用 1.1什么是高可用 1.2Redis的高可用技术 二、 Redis 持久化 2.1持久化的功能 2.2Redis 提供两种方式进行持久化 三、Redis 持久化之----------RDB 3.1触发条件 3.1.1手动触发 3.1.2自动触发 3.1.3其他自动触发机制 3.2执行流程 3.3启动时加载…

服务器远程桌面连接不上怎么办?

随着互联网的发展和远程办公的兴起,服务器远程桌面连接成为了许多企业和个人不可或缺的工具。偶尔我们可能会碰到服务器远程桌面连接不上的情况,这时候我们需要找到解决办法,确保高效地远程访问服务器。 天联组网——突破远程连接障碍 在我们…

Linux网络编程二(TCP图解三次握手及四次挥手、TCP滑动窗口、MSS、TCP状态转换、多进程/多线程服务器实现)

文章目录 1、TCP三次握手(1) 第一次握手(2) 第二次握手(3) 第三次握手 2、TCP四次挥手(1) 一次挥手(2) 二次挥手(3) 三次挥手(4) 四次挥手 3、TCP滑动窗口4、TCP状态时序图5、多进程并发服务器6、多线程并发服务器 1、TCP三次握手 TCP三次握手(TCP three-way handshake)是TCP协…

玩转ChatGPT:Kimi测评(科研写作)

一、写在前面 ChatGPT作为一款领先的语言模型,其强大的语言理解和生成能力,让无数用户惊叹不已。然而,使用的高门槛往往让国内普通用户望而却步。 最近,一款由月之暗面科技有限公司开发的智能助手——Kimi,很火爆哦。…

Vue3_2024_7天【回顾上篇watch常见的后两种场景】完

随笔:这年头工作不好找咯,大家有学历提升的赶快了,还有外出人多注意身体,没错我在深圳这边阳了,真的绝啊,最尴尬的还给朋友传染了!!! 之前三种的监听情况,监听…

java发送请求-cookie有关代码

在初始化后添加cookie的代码 用这个httpclients类调custom方法,进行代码定制化 找和cookie有关的方法,设置默认的cookie存储信息 入参是接口 将入参粘贴后找方法,用new实现这个接口 这个方法是无参空构造,可以使用 设置了cookie …

Java项目:86 springboot电影评论网站系统设计与实现

作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本电影评论网站管理员和用户。 管理员功能有个人中心,用户管理,电影类别管理,电影信息管理,留…

Linux系统---进程间通信与管道入门

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 一、进程间通信 1.进程间通信的目的 1.数据传输:一个进程需要把他的数据传给另外一个进程。 2.资源共享&…

idea开发 java web 酒店推荐系统bootstrap框架开发协同过滤算法web结构java编程计算机网页

一、源码特点 java 酒店推荐推荐系统是一套完善的完整信息系统,结合java web开发和bootstrap UI框架完成本系统 采用协同过滤算法进行推荐 ,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式…

Excel列匹配VLookUp功能使用

生活中很多关于excel多列数据进行匹配计算等场景,其中最常用的一个函数就是VLookUp了,下面直接上图: 得到结果如下: 得到结果如下: 注意: 1.在需要把计算完的数据粘贴到另一列或者另个sheet时,复制后,不要直接ctrlv粘贴,这样会把计算公式粘贴到对应的列.正确做法是:右键粘贴,选…

redis 的StringRedisTemplate

6.3 StringRedisTemplate 尽管JSON的序列化方式可以满足我们的需求,但依然存在一些问题,如图: 为了在反序列化时知道对象的类型,JSON序列化器会将类的class类型写入json结果中,存入Redis,会带来额外的内存…

Redis中的复制功能(三)

复制 服务器运行ID 除了复制偏移量和复制积压缓冲区之外,实现部分重同步还需要用到服务器运行ID(run ID): 1.每隔Redis服务器,不论主服务器还是从服务,都会有自己的运行ID2.运行ID在服务器启动时自动生成,由40个随机的十六进制…

基于kmeans的聚类微博舆情分析系统

第一章绪论 1.1研究背景 如今在我们的生活与生产的每个角落都可以见到数据与信息的身影。自从上十世纪八十年代的中后期开始,我们使用的互联网技术已经开始快速发展,近些年来云计算、大数据和物联网等与互联网有相领域的发展让互联网技术达到了史无前例…

浅谈iOS开发中的自动引用计数ARC

1.ARC是什么 我们知道,在C语言中,创建对象时必须手动分配和释放适量的内存。然而,在 Swift 中,当不再需要类实例时,ARC 会自动释放这些实例的内存。 Swift 使用 ARC 来跟踪和管理应用程序的内存,其主要是由…

Vue-Next-Admin:适配手机、平板、PC的开源后台管理模板

摘要:随着移动设备和PC的普及,为了满足不同设备的需求,开发一个能够自适应手机、平板和PC的后台管理系统变得至关重要。本文将介绍一个基于Vue3.x、Typescript、Vite、Element Plus等技术的开源模板库——Vue-Next-Admin,帮助开发…

rust项目组织结构和集成测试举例

概述 在学习rust的过程中,当项目结构略微复杂的时候,写集成测试的时候发现总是不能引用项目中的代码,导致编写测试用例失败。查阅了教程,一般举例都很简单。查阅了谷歌和百度以及ai,也没有找到满意的答案。这里记录一…

Spark-Scala语言实战(10)

在之前的文章中,我们学习了如何在spark中使用RDD的filter,distinct,intersection三种方法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark-…

Android 窗口那些事儿

目录 1. 📂 前言 你,是否有过这些疑问? 2. 🔱 Window 2.1 认识 Window 的几个阶段 1)阶段一:Window 约等于 Activity 2)阶段二:Window 约等于 View 3)阶段三&…

【六 (2)机器学习-机器学习建模步骤/kaggle房价回归实战】

一、确定问题和目标: 1、业务需求分析: 与业务团队或相关利益方进行深入沟通,了解他们的需求和期望。 分析业务流程,找出可能的瓶颈、机会或挑战。 思考机器学习如何帮助解决这些问题或实现业务目标。 2、问题定义:…

Android Studio的Profiler生成trace排查Android冷启动耗时,Kotlin

Android Studio的Profiler生成trace排查Android冷启动耗时,Kotlin 利用AS自带的Profiler抓取trace排查定位冷启动耗时方法,不用写代码,直接配置AS即可完成。 例如下面代码: import android.os.Bundle import androidx.appcompat…