OpenHarmony(鸿蒙南向开发)——轻量系统芯片移植案例(三)

物联网解决方案之芯海cst85芯片移植案例

本文介绍基于芯海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_CP
<think>好的,我现在需要帮助用户了解如何将鸿蒙轻量系统LiteOS移植到其他硬件平台。首先,我应该回顾用户提供的引用内容,看看里面有哪些有用的信息。 根据引用[1],HarmonyOS轻量系统使用LiteOS-M内核,小型和标准系统使用LiteOS-A或Linux。用户问的是轻量系统,所以可能是指LiteOS-M。引用[3]提到一个将LiteOS移植到ESP32的项目,这应该是一个实际的案例。引用[4]指出移植LiteOS-A需要注意初始化和硬件配置,这可能对移植过程有帮助。引用[5]给出了LiteOS-A的代码示例,虽然用户问的是轻量系统,但代码结构可能有参考价值。 接下来,我需要整理移植的基本步骤。根据引用中的信息,移植大概需要以下几个步骤:硬件选型、获取源码、配置内核、驱动适配、任务开发、编译调试。每个步骤需要详细说明,并结合引用中的具体内容。 例如,在硬件选型部分,引用[3]提到ESP32芯片,说明需要选择支持的硬件。获取源码部分,引用[3]提到从鸿蒙开源仓库获取,可能需要提供具体的仓库地址或分支。配置内核部分,引用[4]提到初始化和定制化配置,可能需要修改特定文件。驱动适配部分,引用[5]的代码示例展示了GPIO控制,说明需要实现HAL层的接口。编译调试部分,引用[3]提到使用工具链,可能需要具体说明如何配置编译环境。 另外,用户可能需要的文档或教程在哪里?引用[3]中的项目可能提供资源文件,引用[4]和[5]的代码示例可以作为参考。可能需要指导用户查阅官方文档和开源社区。 还需要生成相关问题,考虑用户可能遇到的后续问题,比如移植常见错误、性能优化、具体芯片移植案例等。 最后,确保回答符合格式要求:使用中文,行内公式用$...$,独立公式用$$...$$,但当前问题可能不涉及数学公式,所以可能不需要。结构清晰,分步骤说明,引用正确标识。</think>### HarmonyOS LiteOS移植教程 根据技术文档和开源项目实践,LiteOS移植需要遵循以下核心步骤: #### 一、硬件选型与准备 1. **选择兼容芯片**:优先选择支持RISC-V/ARM Cortex-M架构的芯片,例如ESP32[^3]、STM32等 2. **硬件特性验证**:确认目标硬件满足LiteOS-M的最小系统要求: - 16KB以上RAM - 支持中断控制器 - 具备定时器模块 #### 二、源码获取与配置 1. 从鸿蒙开源仓库获取LiteOS-M内核: ```bash git clone https://gitee.com/openharmony/kernel_liteos_m.git ``` 2. 关键目录结构: ``` kernel_liteos_m/ ├── arch/ # 架构相关代码 ├── components/ # 可选组件 └── kernel/ # 核心内核 ``` #### 、内核移植流程 1. **架构适配**(以ARM Cortex-M3为例): - 在`arch/arm/cortex-m3`中实现: - 中断向量表`los_interrupt.c` - 上下文切换`los_context.S` - 系统时钟配置`los_timer.c` 2. **板级支持(BSP)开发**: ```c // board/your_board/hal_platform_init.c void HalClockInit(void) { // 配置系统时钟 SystemCoreClockUpdate(); SysTick_Config(SystemCoreClock / 1000); } ``` #### 四、驱动开发规范 1. 遵循HDF驱动框架: ```c #include "hdf_device_desc.h" static int32_t GpioDriverInit(struct HdfDeviceObject *device) { // GPIO初始化代码 return HDF_SUCCESS; } struct HdfDriverEntry g_gpioDriverEntry = { .moduleVersion = 1, .moduleName = "HDF_GPIO_MODULE", .Bind = GpioDriverBind, .Init = GpioDriverInit, .Release = GpioDriverRelease, }; ``` #### 五、编译系统配置 修改`build/lite/product/your_product.json`: ```json { "product_name": "your_product", "device_company": "your_vendor", "target_cpu": "cortex-m3", "kernel_type": "liteos_m" } ``` #### 六、验证与调试 1. 烧录后通过串口输出调试信息: ```c #include "los_sys.h" void main() { LOS_KernelInit(); printf("System init success!\n"); LOS_Start(); } ``` ### 关键文档资源 1. 官方移植指南:[OpenHarmony移植文档](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/porting/porting-minimum-system.md) 2. ESP32移植案例:[鸿蒙LiteOS移植到ESP32项目](https://gitee.com/your_project)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值