本文介绍基于芯海cst85芯片的cst85_wblink开发板移植OpenHarmony LiteOS-M轻量系统的移植案例。
开发了Wi-Fi连接样例和XTS测试样例,同时实现了wifi_lite, lwip, startup, utils, xts, hdf等部件基于OpenHarmony LiteOS-M内核的适配。
移植架构上采用Board和Soc分离的方案,工具链采用NewLib C库,LiteOS-M内核编译采用gn结合Kconfig图形化配置的方式。
编译构建适配
目录规划
本方案目录结构使用Board和SoC解耦的设计思路:
device
├── board --- 单板厂商目录
│ └── chipsea --- 单板厂商名字:芯海科技
│ └── cst85_wblink --- 单板名:cst85_wblink
└── soc --- SoC厂商目录
└── chipsea --- SoC厂商名字:芯海科技
└── cst85 --- SoC Series名:cst85
产品样例目录规划为:
vendor
└── chipsea --- 开发产品样例厂商目录,芯海科技的产品样例
├── iotlink_demo --- 产品名字:Wi-Fi样例
└── xts_demo --- 产品名字:XTS测试样例
产品定义
以vendor/chipsea/iotlink_demo为例,这里描述了产品使用的内核、单板、子系统等信息。其中,内核、单板型号、单板厂商需要提前规划好,也是预编译指令所关注的信息。这里填入的信息与规划的目录相对应。例如:
{
"product_name": "iotlink_demo", --- 产品名
"version": "3.0", --- 系统版本:3.0
"device_company": "chipsea", --- 单板厂商:chipsea
"board": "cst85_wblink", --- 单板名:cst85_wblink
"kernel_type": "liteos_m", --- 内核类型:liteos_m
"kernel_version": "3.0.0", --- 内核版本:3.0.0
"subsystems": [] --- 子系统
}
单板配置
在产品定义关联到的目录下,以/device/board/chipsea/cst85_wblink为例,需要在liteos_m目录下放置config.gni文件,这个配置文件用于描述该单板的信息,包括cpu, toolchain, kernel, compile_flags等。例如:
# 内核类型
kernel_type = "liteos_m"
# 内核版本
kernel_version = "3.0.0"
# 单板CPU类型
board_cpu = "cortex-m4"
# 工具链,这里使用arm-none-eabi
board_toolchain = "arm-none-eabi"
# 工具链路径,可以使用系统路径,填"",也可以自定义,如下:
board_toolchain_path = ""
# 单板相关的编译参数
board_cflags = []
# 单板相关的链接参数
board_ld_flags = []
# 单板相关的头文件
board_include_dirs = []
# Board adapter dir for OHOS components.
board_adapter_dir = "${ohos_root_path}device/soc/chipsea"
预编译
在正确配置好产品的目录、产品定义、单板配置后,在工程根目录下输入预编译指令hb set,在显示的列表中就可以找到相关的产品。
选择好产品后,输入回车就会在根目录下自动生成ohos_config.json
文件,这里会列出待编译的产品信息:
{
"root_path": "/home/openharmony",
"board": "cst85_wblink",
"kernel": "liteos_m",
"product": "iotlink_demo",
"product_path": "/home/openharmony/vendor/chipsea/iotlink_demo",
"device_path": "/home/openharmony/device/board/chipsea/cst85_wblink/liteos_m",
"device_company": "chipsea",
"os_level": "mini",
"version": "3.0",
"patch_cache": null,
"product_json": "/home/openharmony/vendor/chipsea/iotlink_demo/config.json",
"target_cpu": null,
"target_os": null,
"out_path": "/home/openharmony/out/cst85_wblink/iotlink_demo"
}
内核移植
Kconfig适配
在//kernel/liteos_m的编译中,需要在相应的单板以及SoC目录下使用Kconfig
文件进行配置。我们分别来看一下单板和Soc目录下的相关配置。
单板目录的Kconfig
,以//device/board/chipsea
为例:
device/board/chipsea
├── cst85_wblink --- cst85_wblink单板配置目录
│ ├── Kconfig.liteos_m.board --- 单板的配置选项
│ ├── Kconfig.liteos_m.defconfig.board --- 单板的默认配置项
│ └── liteos_m
│ └── config.gni --- 单板的配置文件
├── Kconfig.liteos_m.boards --- 单板厂商下Boards配置信息
└── Kconfig.liteos_m.defconfig.boards --- 单板厂商下Boards配置信息
在 cst85_wblink/Kconfig.liteos_m.board
中,配置只有SOC_CST85F01被选后,BOARD_CST85_WBLINK才可被选:
config BOARD_CST85_WBLINK
bool "select board cst85_wblink"
depends on SOC_CST85F01
SoC目录的Kconfig
,以//device/soc/chipsea
为例:
device/soc/chipsea/
├── cst85 --- cst85系列
│ ├── Kconfig.liteos_m.defconfig.cst85f01 --- cst85f01芯片默认配置
│ ├── Kconfig.liteos_m.defconfig.series --- cst85系列芯片默认配置
│ ├── Kconfig.liteos_m.series --- cst85系列配置
│ └── Kconfig.liteos_m.soc --- cst85芯片配置
├── Kconfig.liteos_m.defconfig --- SoC默认配置
├── Kconfig.liteos_m.series --- Series配置
└── Kconfig.liteos_m.soc --- SoC配置
cst85/Kconfig.liteos_m.series
配置如下:
config SOC_SERIES_CST85
bool "Chipsea CST85 Series"
select ARM
select SOC_COMPANY_CHIPSEA
select CPU_CORTEX_M4
help
Enable support for Chipsea CST85 series
只有选择了 SOC_SERIES_CST85,在 cst85/Kconfig.liteos_m.soc中才可以选择SOC_CST85F01:
choice
prompt "Chipsea CST85 series SoC"
depends on SOC_SERIES_CST85
config SOC_CST85F01
bool "SoC CST85F01"
endchoice
综上所述,要编译单板BOARD_CST85_WBLINK,则要分别选中:SOC_COMPANY_CHIPSEA、SOC_SERIES_CST85、SOC_CST85F01,可以在kernel/liteos_m
中执行make menuconfig
进行选择配置。
配置后的文件会默认保存在//vendor/chipsea/iotlink_demo/kernel_configs/debug.config
,也可以直接填写debug.config:
LOSCFG_SOC_SERIES_CST85=y
LOSCFG_KERNEL_BACKTRACE=y
LOSCFG_KERNEL_CPUP=y
LOSCFG_PLATFORM_EXC=y
模块化编译
Board
和SoC
的编译采用模块化的编译方法,从kernel/liteos_m/BUILD.gn
开始逐级向下递增。本方案的适配过程如下:
-
在
//device/board/chipsea
中新建文