WS53指导资料

- hardware
  - SoC Wi-Fi、BLE和SLE Combo芯片 硬件用户指南
    - 前言
    - 封装与管脚
    - 电性能参数
    - 原理图设计建议
    - PCB设计建议
    - 热设计建议
    - 焊接工艺
    - 潮敏参数
    - 接口时序
    - 注意事项
    - 缩略语
  - 单板硬件关键器件选型指导
    - 前言
    - 关键器件选型约束
  - 射频测试 用户指南
    - 前言
    - 测试指令
    - 注意事项
- 软件资料
  - AT命令 使用指南
    - 前言
    - 指令说明
    - Wi-Fi模块AT指令
    - BLE&SLE模块AT指令
    - PLAT模块AT指令
  - BLE BQB认证测试 指导书
    - 前言
    - 蓝牙BQB认证简介
    - BQB协议认证
    - BQB 射频认证
    - WS53特性支持情况
    - 常见问题&测试命令汇总(FAQ)
  - BOOT API开发参考
    - 前言
    - 接口介绍
  - Boot移植应用 开发指南
    - 前言
    - Boot简介
    - RomBoot功能说明
    - LoaderBoot功能说明
    - FlashBoot说明
  - CJSON 开发指南
    - 前言
    - API接口说明
    - 开发指南
  - CoAP 开发指南
    - 前言
    - API接口说明
    - 开发指南
  - EFUSE 使用指南
    - 前言
    - 概述
    - 软件编程接口使用指导
    - Burntool烧写efuse_cfg.bin说明
  - FOTA 开发指南
    - 前言
    - 概述
    - 升级包制作
    - 升级包传输
    - 升级包保存
    - 升级包本地升级
    - AB面升级
    - FAQ
  - HTTP 开发指南
    - 前言
    - 开发指南
  - MQTT 开发指南
    - 前言
    - API接口描述
    - 开发指南
    - 注意事项
  - NV存储 用户指南
    - 前言
    - NV简介
    - NV编译预置
    - NV API指南
    - NV项汇总
  - SAMPLE用例 用户指南
    - 前言
    - SAMPLE简介
    - 外设SAMPLE用例
  - SDK 开发指南
    - 前言
    - 概述
    - 系统接口
  - SDK开发环境搭建 用户指南
    - 前言
    - 开发环境搭建
    - 编译
    - 新建APP
  - Syschannel 使用指南
    - 前言
    - Syschannel 简介
    - Syschannel 使用指南
    - Syschannel 编译指导
    - Syschannel 适配常见问题
  - TLS&DTLS 开发指南
    - 前言
    - API接口说明
    - 开发指南
    - 硬件适配
    - 注意事项
  - WFA认证测试指导书
    - 前言
    - WLAN WFA协议认证介绍
    - WS53 WFA认证
    - 缩略语
  - lwIP 开发指南
    - 前言
    - 概述
    - 功能特性
    - 开发指引
    - 网络安全
    - 常见问题
    - 术语
  - 产测FAQ
    - 前言
    - FAQ
    - 注意事项
    - 版本问题记录
  - 产线工装 用户指南
    - 前言
    - 测试软件准备
    - 单板测试方案
    - TX/RX测试参考
    - WLAN Facility与固件版本
    - 产线生产ESD防护要求
  - 低功耗 开发指南
    - 前言
    - 概述
    - 超深睡模式
    - 深睡模式
    - 浅睡模式
    - 常见问题
  - 单板冒烟 测试指南
    - 前言
    - 概述
    - 单板冒烟测试
  - 安全模块 使用指南
    - 前言
    - 概述
    - 错误码
    - 网络安全注意事项
  - 文件系统 使用指南
    - 前言
    - LFS简介
    - LFS编译预置
    - LFS接口API
  - 星闪认证测试 指导书
    - 前言
    - 星闪认证简介
    - 星闪协议认证
    - 星闪射频认证
    - 星闪特性支持
    - 常见问题&测试命令汇总（FAQ）
  - 特性开发说明书
    - 前言
    - 混杂模式特性说明
    - 动态国家码特性说明
    - BLE配网特性说明
    - 安全启动特性说明
    - FLASH在线解密特性说明
  - 第三方软件 移植指南
    - 前言
    - 移植指引
    - 常见问题
  - 设备驱动 开发指南
    - 前言
    - Pinctrl
    - GPIO
    - UART
    - SPI
    - QSPI
    - I2C
    - ADC
    - DMA
    - PWM
    - WDT
    - Timer
    - Systick
    - TCXO
    - SFC
    - eFuse
    - REBOOT
    - I2S
  - 软件 开发指南
    - 前言
    - 概述
    - Wi-Fi 软件开发指南
    - BLE&SLE 软件开发指南
    - 注意事项
  - 运维手册
    - 前言
    - 系统/平台模块
    - Wi-Fi模块
  - 鸿蒙XTS认证 指导书
    - 前言
    - 概述
    - 准备工作
    - 编译openharmony静态库
    - XTS版本编译和执行

### 该页内容

- 前言
- 移植指引
  - 概述
  - CMake构建
- 常见问题
  - CMake基本语法
  - 头文件引用问题

# 前言

概述

本文档详细的描述了WS53V100移植第三方软件到SDK中的构建操作指导，同时提供了常见的问题解答及故障处理方法。

读者对象

本文档主要适用于以下工程师：

- 技术支持工程师

- 软件开发工程师

符号约定

在本文中可能出现下列标志，它们所代表的含义如下。

符号 | 说明
--- | ---
| 表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。
| 表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。
| 表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。
| 用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。 “须知”不涉及人身伤害。
| 对正文中重点信息的补充说明。 “说明”不是安全警示信息，不涉及人身、设备及环境伤害信息。

修改记录

文档版本 | 发布日期 | 修改说明
--- | --- | ---
01 | 2024-07-29 | 第一次正式版本发布。 更新“CMake构建”小节内容。 更新“CMake基本语法”小节内容。
00B01 | 2024-06-11 | 第一次临时版本发布。

# 移植指引

- 概述

- CMake构建

## 概述

WS53V100的SDK使用CMake作为构建工具，因此建议使用CMake进行第三方库的移植，从而保证编译的完整性和连贯性。其主要文件编译依赖CMakeLists.txt文件，当需要新增并编译第三方组件时，需要对CMake框架进行修改新增，即修改CMakeLists.txt。

## CMake构建

以移植cjson为例（SDK已集成该组件，可以参考对应文件的修改），移植的步骤如下：

1. 将第三方组件放置于“opensource”目录下（例如：opensource/cjson/cjson，新增一层路径便于对文件路径处理）。

2. 在“opensource”目录下，找到本层级的CMakeLists.txt，在该文件内新增一行

       add_subdirectory_if_exist(cjson)

   即可将对应的opensource/cjson路径新增到编译框架中。

3. 对新增组件内部opensource/cjson路径的CMakeList.txt进行修改。

   设置组件名称：

       set(COMPONENT_NAME "cjson")

   将xxx.c加入到编译：

       set(SOURCES xxx.c)

   私有头文件引用路径：

       set(PRIVATE_HEADER yyy)

   私有编译参数：

       set(COMPONENT_CCFLAGS zzz)

   设置输出路径：

       set(LIB_OUT_PATH ...)

4. 现在，已经成功将一个名为“cjson”（COMPONENT_NAME）的组件新增到框架中了，最后应开启对该组件的编译。通过修改“build/config/target_config/ws53/config.py”中对应的target的“ram_component”，将需要编译的组件加入到编译流程中。例如：

   想要编译的target名称为“ws53-liteos-app”，则找到“ws53-liteos-app”字典下的ram_component，在该数组中新增值“cjson”，当启动“ws53-liteos-app”的编译时，CMake就会尝试编译“cjson”（SOURCES）

# 常见问题

本章节对用户常见的编译问题进行收集整理，并为用户提供基本的参考。

- CMake基本语法

- 头文件引用问题

## CMake基本语法

除了上文提到的“COMPONENT_NAME”、“SOURCES”、“PRIVARE_HEADER”、“COMPONENT_CCFLAGES”、“LIB_OUT_PATH”之外，还可以定义公共头文件、公共编译参数等。

用户可参考标准CMakeLists.txt的开发流程，对SDK进行定制化修改。

若在三方组件中已有CMakeLists.txt可进行调用，也可以opensource路径下的CMakeLists.txt将文件夹直接add_subdirectory_if_exits（目录名称），来进行编译

## 头文件引用问题

当用户在开发过程中需要引用新增第三方组件的头文件时，可以在第三方组件的CMakeLists.txt中指定公共的头文件。

例如，需要引用cjson组件下的“cJSON.h”（实际上已全文件引用，仅作参考），则需要在opensource/cjson中的CMakeLists.txt增加：

    set （PUBLIC_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/cjson/cJSON.h）