往期知识点记录:
- 鸿蒙(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
 

 










