编译环境搭建
首先请搭建 OpenHarmony 基础环境,相关操作请参考 快速入门环境搭建章节 。用户态和 LiteOS-A 的内核态编译均使用 llvm 编译器编译,安装方法在搭建基础环境中已提供。若选择移植 linux 内核,请执行如下命令安装 gcc-arm-linux-gnueabi 交叉编译工具链,用于编译 linux 内核态镜像:
sudo apt-get install gcc-arm-linux-gnueabi
编译构建系统介绍
编译构建流程、编译脚本编写、目录规则、独立编译单个组件、独立编译芯片解决方案等介绍请见 编译构建子系统介绍 。
新建芯片解决方案
了解编译框架和搭建完编译环境后,请参考如下步骤新建芯片解决方案:
- 新建目录
芯片解决方案的目录规则为:
device/{芯片解决方案厂商}/{开发板}。以海思的 hispark_taurus 开发板为例,在代码根目录执行如下命令建立目录:
mkdir -p device/hisilicon/hispark_taurus
芯片解决方案目录树的规则如下:
device
└── company # 芯片解决方案厂商
└── board # 开发板名称
├── BUILD.gn # 编译脚本
├── hals # OS南向接口适配
├── linux # 可选,linux内核版本
│ └── config.gni # linux版本编译配置
└── liteos_a # 可选,liteos内核版本
└── config.gni # liteos_a版本编译配置
以 hispark_taurus 移植 linux 内核为例,目录树应该如下:
device
└── hisilicon
└── hispark_taurus
├── BUILD.gn
├── hals
├── ......
└── linux
└── config.gni
目录树建立后开发板相关的源码放到 hispark_taurus 目录下。
- 配置开发板编译选项
步骤 1 中的
config.gni可配置开发板相关的编译选项,编译构建框架将会遵照该配置文件中的参数编译所有用户态 OS 组件。其中关键的字段说明如下:
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: 开发板配置的链接选项。
DD一下:欢迎大家关注工粽号<程序猿百晓生>,可以了解到以下知识点。
`欢迎大家关注工粽号<程序猿百晓生>,可以了解到以下知识点。`
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.鸿蒙版性能优化指南
.......
还以海思的 hispark_taurus 开发板为例,对应的 device/hisilicon/hispark_taurus/config.gni 内容如下:
# Board CPU type, e.g. "cortex-a7", "riscv32".
board_cpu = "cortex-a7"
# 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 = "mips-linux-gnu-gcc"
# The toolchain path installed, it's not mandatory if you have added toolchain path to your ~/.bashrc.
board_toolchain_path =
rebase_path("//prebuilts/gcc/linux-x86/arm/arm-linux-ohoseabi-gcc/bin",
root_build_dir)
# Compiler prefix.
board_toolchain_prefix = "arm-linux-ohoseabi-"
# Compiler type, "gcc" or "clang".
board_toolchain_type = "gcc"
# Board related common compile flags.
board_cflags = [
]
board_cxx_flags = [
]
board_ld_flags = []
# Board related headfiles search path.
board_include_dirs = []
board_include_dirs += [ rebase_path(
"//prebuilts/gcc/linux-x86/arm/arm-linux-ohoseabi-gcc/target/usr/include",
root_build_dir) ]
# Board adapter dir for OHOS components.
board_adapter_dir = ""
# Sysroot path.
board_configed_sysroot = ""
# Board storage type, it used for file system generation.
storage_type = "emmc"
- 编写开发板编译脚本
步骤 1 中的
BUILD.gn为新增的开发板的编译入口,主要用于编译开发板相关的代码,主要为设备侧驱动、设备侧接口适配(媒体,图形等)和开发板的 SDK 等等。 海思的 hispark_taurus 开发板的device/hisilicon/hispark_taurus/BUILD.gn可写成:
# group名称建议与开发板名称一致
group("hispark_taurus") {
deps = [ "//kernel/linux/patches:linux_kernel" ] # 拉起内核编译
deps += [
...... # 开发板其他编译单元
]
}
- 编译调试
在开发板目录下执行
hb set和hb build即可启动芯片解决方案的编译,编译框架会以开发板下的BUILD.gn为入口启动编译。