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

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

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

css 复制代码
python3 -m pip uninstall ohos-build
python3 -m pip install --user build/lite
hb --version

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

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

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

bash 复制代码
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内核的适配。当前的文件树如下:

bash 复制代码
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配置文件内的构建目标。后文会分析该文件。

json 复制代码
{
"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。

json 复制代码
{
  "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。

scss 复制代码
# 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",    ]
  }
}
DD一下: 欢迎大家关注公众号<程序猿百晓生>,可以了解到一下知识点。
erlang 复制代码
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案) 
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......

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

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

makefile 复制代码
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,内容如下。

ini 复制代码
# 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"
相关推荐
python算法(魔法师版)3 小时前
.NET 在鸿蒙系统上的适配现状
华为od·华为·华为云·.net·wpf·harmonyos
bestadc4 小时前
鸿蒙 UIAbility组件与UI的数据同步和窗口关闭
harmonyos
ssslar5 小时前
MIT XV6 - 1.6 Lab: Xv6 and Unix utilities -uptime
操作系统·risc-v·xv6
枫叶丹45 小时前
【HarmonyOS Next之旅】DevEco Studio使用指南(二十二)
华为·harmonyos·deveco studio·harmonyos next
乱世刀疤9 小时前
深度 |国产操作系统“破茧而出”:鸿蒙电脑填补自主生态空白
华为·harmonyos
沙振宇16 小时前
【Web】使用Vue3开发鸿蒙的HelloWorld!
前端·华为·harmonyos
LUCIAZZZ1 天前
JVM之内存管理(二)
java·jvm·后端·spring·操作系统·springboot
尸僵打怪兽1 天前
软考错题集
java·python·计算机网络·操作系统·c·软考·计算机组成原理
bestadc2 天前
鸿蒙 所有API缩略图鉴
harmonyos
马剑威(威哥爱编程)2 天前
HarmonyOS 5.0 分布式数据协同与跨设备同步
分布式·华为·harmonyos·arkts·harmonyos-next