当前位置: 首页 > article >正文

基于hispark_taurus开发板示例学习OpenHarmony编译(1)

往期知识点记录:

  • 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总
  • 轻内核A核源码分析系列一 数据结构-双向循环链表
  • 轻内核A核源码分析系列二 数据结构-位图操作
  • 轻内核A核源码分析系列三 物理内存(1)
  • 轻内核A核源码分析系列三 物理内存(2)
  • 轻内核A核源码分析系列四(1)虚拟内存进程空间编号
  • 轻内核A核源码分析系列四(2) 虚拟内存
  • 轻内核A核源码分析系列四(3) 虚拟内存
  • 轻内核A核源码分析系列五 虚实映射(1)基础概念
  • 轻内核A核源码分析系列五 虚实映射(2)虚实映射初始化
  • 轻内核A核源码分析系列五 虚实映射(3)虚拟物理内存映射
  • 轻内核A核源码分析系列五 虚实映射(5)虚实映射解除
  • 轻内核A核源码分析系列五 虚实映射(6)虚拟映射修改转移
  • 轻内核A核源码分析系列五 虚实映射(7)虚实映射Flag属性
  • 轻内核A核源码分析系列六 MMU协处理器(1)
  • 轻内核A核源码分析系列六 MMU协处理器(2)
  • 轻内核A核源码分析系列七 进程管理 (1)
  • 轻内核A核源码分析系列七 进程管理 (2)
  • 轻内核A核源码分析系列七 进程管理 (3)
  • 鸿蒙轻内核调测-内存调测-内存信息统计
  • 鸿蒙轻内核调测-内存调测-内存泄漏检测)
  • 鸿蒙轻内核Kconfig使用笔记)
  • 基于hispark_taurus开发板示例学习OpenHarmony编译(1))
  • 持续更新中……

1、轻量级编译构建工具hb

OpenHarmony开源站点提供了一个基于gn和ninja的支持OpenHarmony组件化开发的编译框架。详细信息可以参考该工具的开源站点 https://gitee.com/openharmony/build_lite 。如果想使用最新的编译工具hb,在一些bugfix或者hb工具新特性合入后,需要卸载重新安装。在OpenHarmony代码根目录下执行如下命令,先卸载再安装,并查询确认下版本号:

python3 -m pip uninstall ohos-build
python3 -m pip install --user build/lite
hb --version

build_lite代码仓只提供了工具的简单readme介绍,更加丰富的编译框架知识、构建指导需要访问docs文档仓获取,地址为 https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-build-mini-lite.md 。构建指导文档详细介绍了组件、芯片解决方案、产品解决方案的配置规则,并提供了新建组件、新建芯片解决方案、新建产品解决方案的使用指导。

2、hispark_taurus芯片开发板解决方案-Device

芯片开发板解决方案是指基于某款开发板的完整解决方案,包含驱动、设备侧接口适配、开发板sdk等。芯芯片开发板是一个特殊的组件,源码路径包含SoC和Board两部分,路径规则为:device/soc/{芯片解决方案厂商}/{芯片}和device/board/{开发板厂商}/{开发板}。
hispark_taurus对应的芯片目录在device/soc/hisilicon/hi3516dv300,主要包含芯片的底层处理驱动,为“媒体/图形子系统”提供基础的多媒体处理功能。看起来master最新分支一直在整改,随时会发生变化。当前的文件树如下:

device/soc/hisilicon/hi3516dv300:
                    ├── sdk_linux
                    │   ├── BUILD.gn
                    │   ├── build.sh
                    │   ├── config.gni
                    │   ├── drv
                    │   ├── out
                    │   └── usr
                    ├── sdk_liteos
                    │   ├── BUILD.gn
                    │   ├── hdf_config                       # HDF驱动配置文件
                    │   └── mpp                              # Hi3516DV300芯片的媒体库文件、模块驱动库文件     
                    └── uboot                                # uboot二进制文件
                        └── u-boot-hi3516dv300_emmc.bin

hispark_taurus对应的开发板目录在device/board/hisilicon/hispark_taurus,主要包含对linux内核和liteo_a内核的适配。当前的文件树如下:

device/board/hisilicon/hispark_taurus
                    ├── BUILD.gn                         # BUILD.gn gn编译构建配置文件
                    ├── linux                            # 开发板对linux内核的适配
                    │   ├── BUILD.gn
                    │   ├── config.gni
                    │   ├── LICENSE
                    │   ├── ohos.build
                    │   ├── system
                    │   └── updater
                    ├── liteos_a                         # 开发板对liteos内核的适配
                    │   ├── board
                    │   ├── BUILD.gn
                    │   ├── config.gni
                    │   └── drivers
                    ├── ohos.build                       # hb构建配置文件
                    └── uboot                            # uboot二进制文件

2.1 hb构建配置文件

ohos.build配置文件是最近新增加的,由hb构建系统进行解析,对描述的子系统和部件进行编译。这个配置文件在开发板目录和产品解决方案目录下都需要。我们先打开开发板目录下的配置文件device\board\hisilicon\hispark_taurus\ohos.build看一下,如下所示。部件parts部分定义了一个子系统subsystem,名称为device_hispark_taurus,命名风格以device开头,接开发板名称。module_list属性配置的信息为同文件夹下BUILD.gn配置文件内的构建目标。后文会分析该文件。

{
"parts": {
    "device_hispark_taurus": {
    "module_list": [
        "//device/hisilicon/hispark_taurus:hispark_taurus"
    ]
    }
},
"subsystem": "device_hispark_taurus"
}

类似的在产品解决方案目录下的配置文件vendor\hisilicon\hispark_taurus\ohos.build,内容如下。部件下面配置的子系统的名称的规则为,product开头,后接product_name。

{
  "parts": {
    "product_ipcamera_hispark_taurus": {
      "module_list": [
        "//vendor/hisilicon/hispark_taurus:hispark_taurus"
      ]
    }
  },
  "subsystem": "product_ipcamera_hispark_taurus"
}

2.2 BUILD.gn编译构建配置文件

编译构建配置文件device\board\hisilicon\hispark_taurus\BUILD.gn的内容如下。根据是轻量系统、标准系统类型,还是linux内核、liteos_a内核,分别构建目标组hispark_taurus。

# Copyright (C) 2021 Hisilicon (Shanghai) Technologies Co., Ltd. All rights reserved.

if (defined(ohos_lite)) {
  group("hispark_taurus") {
    deps = []
    if (ohos_kernel_type == "linux") {
      deps += [ "//device/soc/hisilicon/hi3516dv300/sdk_linux:hispark_taurus_sdk" ]
    } else if (ohos_kernel_type == "liteos_a") {
      deps += [ "//device/soc/hisilicon/hi3516dv300/sdk_liteos/mpp:copy_mpp_libs" ]
    }
  }
} else {
  group("hispark_taurus") {
    deps = [ "linux:hi3516dv300_group" ]

    deps += [
        "//device/soc/hisilicon/common/hal/media:hardware_group",
        "//device/soc/hisilicon/common/hal/middleware:middleware_group",
    ]
  }
}

2.3 开发板内核编译配置文件config.gni

config.gni为开发板编译相关的配置,编译时会采用该配置文件中的参数编译所有OS组件,编译阶段系统全局可见。config.gni的关键字段介绍如下:

kernel_type:            开发板使用的内核类型,例如:“liteos_a”, “liteos_m”, “linux”。
kernel_version:         开发使用的内核版本,例如:“4.19”。
board_cpu:              开发板CPU类型,例如:“cortex-a7”, “riscv32”。
board_arch:             开发芯片arch, 例如: “armv7-a”, “rv32imac”。
board_toolchain:        开发板自定义的编译工具链名称,例如:“gcc-arm-none-eabi”。若为空,则使用默认为ohos-clang。
board_toolchain_prefix:编译工具链前缀,例如:“gcc-arm-none-eabi”。
board_toolchain_type:  编译工具链类型,目前支持gcc和clang。例如:“gcc” ,“clang”。
board_cflags:          开发板配置的c文件编译选项。
board_cxx_flags:       开发板配置的cpp文件编译选项。
board_ld_flags:        开发板配置的链接选项。

以liteos_a内核为例,文件位置在device\board\hisilicon\hispark_taurus\liteos_a\config.gni,内容如下。

# Kernel type, e.g. "linux", "liteos_a", "liteos_m".
kernel_type = "liteos_a"

# Kernel version.
kernel_version = ""

# Board CPU type, e.g. "cortex-a7", "riscv32".
board_cpu = "cortex-a7"

# 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 toolchain.
board_toolchain = ""

# The toolchain path installed, it's not mandatory if you have added toolchain path to your ~/.bashrc.
board_toolchain_path = ""

# Compiler prefix.
board_toolchain_prefix = ""

# Compiler type, "gcc" or "clang".
board_toolchain_type = "clang"

# Board related common compile flags.
board_cflags = [
  "-mfloat-abi=softfp",
  "-mfpu=neon-vfpv4",
]
board_cxx_flags = [
  "-mfloat-abi=softfp",
  "-mfpu=neon-vfpv4",
]
board_ld_flags = []

# Board related headfiles search path.
board_include_dirs = []

# Board adapter dir for OHOS components.
board_adapter_dir = "//device/soc/hisilicon/common/hal"

# Sysroot path.
board_configed_sysroot = ""

# Board storage type, it used for file system generation.
storage_type = "emmc"

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

为了能够帮助到大家能够有规划的学习,这里特别整理了一套纯血版鸿蒙(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.kler.cn/a/305537.html

相关文章:

  • 英飞凌Aurix2G TC3XX GPT12模块详解
  • vue通过iframe方式嵌套grafana图表
  • Python爬虫基础-正则表达式!
  • Kotlin 协程使用及其详解
  • 如何选情绪龙头
  • 「C/C++」C++ STL容器库 之 std::map 键值容器类
  • 记录工作中遇到的问题(持续更新~)
  • TikTok云手机解决运营效率低、封号问题
  • QT消息对话框学习
  • 用户登陆网址都发生了什么?
  • 网络原理1-传输层
  • [mysql]mysql的运算符
  • it基础软件运维管理:从操作系统到数据库,再到中间件和应用系统
  • 测试ASP.NET Core的WebApi项目调用WebService
  • 血缘解析<二>:如何解析带CTE语句的Sql
  • [机器学习]决策树
  • Parallels Desktop 20 for Mac中文版发布了?会哪些新功能
  • 学习笔记-Golang中的Context
  • 基础算法(3)——二分
  • Java邮件:如何配置以实现自动化邮件通知?
  • 平安养老险阜阳中心支公司开展金融教育宣传专项活动
  • ElementUI 快速入门:使用 Vue 脚手架搭建项目
  • SQL 代表什么?SQL 的全称是什么?
  • 二叉树算法 JAVA
  • 微信小程序中的模块化、组件化开发:完整指南
  • 资源管理新视角:利用 FastAPI Lifespan 事件优化你的应用