基于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


相关推荐
疯狂飙车的蜗牛5 小时前
从零玩转CanMV-K230(4)-小核Linux驱动开发参考
linux·运维·驱动开发
yutian06066 小时前
Keil MDK下载程序后MCU自动重启设置
单片机·嵌入式硬件·keil
析木不会编程8 小时前
【小白51单片机专用教程】protues仿真独立按键控制LED
单片机·嵌入式硬件·51单片机
枯无穷肉12 小时前
stm32制作CAN适配器4--WinUsb的使用
stm32·单片机·嵌入式硬件
不过四级不改名67713 小时前
基于HAL库的stm32的can收发实验
stm32·单片机·嵌入式硬件
嵌入式大圣13 小时前
单片机UDP数据透传
单片机·嵌入式硬件·udp
云山工作室13 小时前
基于单片机的视力保护及身姿矫正器设计(论文+源码)
stm32·单片机·嵌入式硬件·毕业设计·毕设
嵌入式-老费13 小时前
基于海思soc的智能产品开发(mcu读保护的设置)
单片机·嵌入式硬件
liyinuo201715 小时前
嵌入式(单片机方向)面试题总结
嵌入式硬件·设计模式·面试·设计规范
艺术家天选16 小时前
STM32点亮LED灯
stm32·单片机·嵌入式硬件