Combo解决方案之ASR芯片移植案例
本方案基于OpenHarmony LiteOS-M内核,使用ASR582X芯片的 DEV.WIFI.A开发板 进行开发移植。作为典型的IOT Combo(Wi-Fi+BLE)解决方案,本文章介绍ASR582X的适配过程。
编译移植
目录规划
本方案的目录结构使用 Board和Soc解耦的思路 :
device
├── board --- 单板厂商目录
│ └── lango --- 单板厂商名字:朗国
│ └── dev_wifi_a --- 单板名:DEV.WIFI.A
└── soc --- SoC厂商目录
└── asrmicro --- SoC厂商名字:翱捷科技
└── asr582x --- SoC Series名:ASR582X系列芯片
产品样例目录规划为:
vendor
└── asrmicro --- 开发产品样例厂商目录,翱捷科技的产品样例
├── wifi_demo --- 产品名字:Wi-Fi样例代码
└── xts_demo --- 产品名字: XTS测试样例
产品定义
以vendor/asrmicro/wifi_demo
为例,这里描述了产品使用的内核、单板、子系统等信息。其中,内核、单板型号、单板厂商需要提前规划好,也是预编译指令(hb set
)所关注的。这里填入的信息与规划的目录相对应。例如:
{
"product_name": "wifi_demo", --- 产品名
"type": "mini", --- 系统类型: mini
"version": "3.0", --- 系统版本: 3.0
"device_company": "lango", --- 单板厂商:lango
"board": "dev_wifi_a", --- 单板名:dev_wifi_a
"kernel_type": "liteos_m", --- 内核类型:liteos_m
"kernel_version": "3.0.0", --- 内核版本:3.0.0
"subsystems": [] --- 子系统
}
这里的device_company和board用于关联出//device/board/<device_company>/目录。
单板配置
在关联到的目录下,以device/board/lango/dev_wifi_a
为例,需要在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 = rebase_path("//device/soc/asrmicro/gcc/gcc-arm-none-eabi/Linux64/bin")
# 单板相关的编译参数
board_cflags = []
# 单板相关的链接参数
board_ld_flags = []
# 单板相关的头文件
board_include_dirs = []
预编译
在正确配置好产品的目录、产品定义、单板配置后,在工程根目录下输入预编译指令hb set
,在显示的列表中就可以找到相关的产品。
选择好产品后,输入回车就会在根目录下自动生成ohos_config.json
文件,这里会将要编译的产品信息列出。
内核移植
Kconfig适配
在//kernel/liteos_m的编译中,需要在相应的单板以及SoC目录下使用Kconfig
文件进行索引。
单板目录的Kconfig
,以//device/board/lango
为例:
├── dev_wifi_a --- dev_wifi_a单板配置目录
│ ├── Kconfig.liteos_m.board --- 单板的配置选项
│ ├── Kconfig.liteos_m.defconfig.board --- 单板的默认配置项
│ └── liteos_m
│ └── config.gni --- 单板的配置文件
├── Kconfig.liteos_m.boards --- 单板厂商下Boards配置信息
└── Kconfig.liteos_m.defconfig.boards --- 单板厂商下Boards默认配置信息
在 dev_wifi_a/Kconfig.liteos_m.board
中,配置只有SOC_ASR5822S被选后,BOARD_DEV_WIFI_A才可被选:
config BOARD_DEV_WIFI_A
bool "select board DEV_WIFI_A"
depends on SOC_ASR5822S
SoC目录的Kconfig
,以//device/soc/asrmicro
为例:
├── asr582x --- ASR582X系列
│ ├── Kconfig.liteos_m.defconfig.asr5822s --- ASR5822S芯片默认配置
│ ├── Kconfig.liteos_m.defconfig.series --- ASR582X系列默认配置
│ ├── Kconfig.liteos_m.series --- ASR582X系列配置
│ └── Kconfig.liteos_m.soc --- ASR582X芯片配置
├── Kconfig.liteos_m.defconfig --- SoC默认配置
├── Kconfig.liteos_m.series --- Series配置
└── Kconfig.liteos_m.soc --- SoC配置
在 asr582x/Kconfig.liteos_m.series中:
config SOC_SERIES_ASR582X
bool "ASR582X Series"
select ARM
select SOC_COMPANY_ASRMICRO --- 选择 SOC_COMPANY_ASRMICRO
select CPU_CORTEX_M4
help
Enable support for ASR582X series
只有选择了 SOC_SERIES_ASR582X,在 asr582x/Kconfig.liteos_m.soc中才可以选择SOC_ASR5822S:
choice
prompt "ASR582X series SoC"
depends on SOC_SERIES_ASR582X
config SOC_ASR5822S --- 选择 SOC_ASR5822S
bool "SoC ASR5822S"
endchoice
综上所述,要编译单板BOARD_DEV_WIFI_A,则要分别选中:SOC_COMPANY_ASRMICRO、SOC_SERIES_ASR582X、SOC_ASR5822S,可以在kernel/liteos_m
中执行make menuconfig
进行选择配置
配置后的文件会默认保存在//vendor/asrmicro/wifi_demo/kernel_configs/debug.config
,也可以直接填写debug.config:
LOSCFG_BOARD_DEV_WIFI_A=y
LOSCFG_SOC_COMPANY_ASRMICRO=y
LOSCFG_SOC_SERIES_AS