本文章基于意法半导体STM32MP157
芯片的小熊派BearPi-HM Micro开发板,进行小型带屏开发板的移植,实现了ace_engine_lite
、arkui_ui_lite
、aafwk_lite
、appexecfwk_lite
、HDF
等部件基于OpenHarmony LiteOS-A
内核的适配。移植架构上采用Board
与SoC
分离的方案。
编译构建
目录规划
本方案的目录结构使用Board和SoC解耦的设计思路,并把芯片适配目录规划为:
device
├── board --- 单板厂商目录
│ └── bearpi --- 单板厂商名字:小熊派
│ └── bearpi_hm_micro --- 单板名:bearpi_hm_micro
└── soc --- SoC厂商目录
└── common --- 存放公共HDF驱动
└── st --- SoC厂商名字:ST意法半导体
└── stm32mp1xx --- SoC Series名:stm32mp1xx系列芯片
产品样例目录规划为:
vendor
└── bearpi --- 开发产品样例厂商目录,小熊派的产品样例
└── bearpi_hm_micro --- 产品名字:bearpi_hm_micro开发板
预编译适配
在进行移植之前,需要进行预编译适配。
预编译适配主要使用hb set
命令,设置整个项目的根目录、单板目录、产品目录、单板公司名等环境变量,为编译做准备。
具体的预编译适配步骤如下:
- 在
vendor/bearpi/bearpi_hm_micro
目录下新增config.json
文件,用于描述这个产品样例所使用的单板、内核等信息,描述信息可参考如下内容:
{
"product_name": "bearpi_hm_micro", --- 用于hb set进行选择时,显示的产品名称
"version": "3.0", --- 构建系统的版本,1.0/2.0/3.0
"type": "small", --- 构建系统的类型,mini/small/standard
"ohos_version": "OpenHarmony 3.0", --- OpenHarmony系统版本
"device_company": "bearpi", --- 单板厂商名,用于编译时找到/device/board/bearpi目录
"board": "bearpi_hm_micro", --- 单板名,用于编译时找到/device/board/bearpi/bearpi_hm_micro目录
"kernel_type": "liteos_a", --- 内核类型,因为OpenHarmony支持多内核,一块单板可能适配了多个内核,所以需要指定某个内核进行编译
"kernel_version": "", --- 内核版本,一块单板可能适配了多个linux内核版本,所以需要指定某个具体的内核版本进行编译
"subsystems": [ ] --- 选择所需要编译构建的子系统
}
- 在
device/board/bearpi/bearpi_hm_micro/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/board/bearpi/bearpi_hm_micro/hal"
# Sysroot path.
board_configed_sysroot = ""
# Board storage type, it used for file system generation.
storage_type = "emmc"
- 验证
hb set
配置是否正确,输入hb set
能够显示如下图片表示配置正确。
执行hb set
输入项目根目录,并且回车,hb
命令会遍历所有//vendor/<product_company>/<product_name>
目录下的config.json
,给出可选产品编译选项,config.json
的product_name
用于显示产品名,device_company
和board
用于关联出//device/board/<device_company>/<board>
目录,并且匹配<any_dir_name>/config.gni
文件,如果能够匹配多个文件,表示该单板适配了多个内核,那么可以根据config.json
的kernel_type
和kernel_version
来唯一匹配config.gni
的kernel_type
和kernel_version
,即可确定了需要编译适配了哪个内核的单板。