使用 VSCode + CMake + Ninja 构建 W801 程序

发布于 2023-03-26 17: 47: 25

前言

由于 CDK 编译太过缓慢, 而且 makefile 嵌套过于繁琐

因此本人简单整理了一下 SDK, 使用 CMake 重新编写了项目的构建流程,

最终形成了一个项目模板: https: //github. com/github0null/w801_cmake_template

有需要的童鞋可以使用

步骤

引用自 Github 仓库 README

HLK-W801 Vscode 项目模板, 使用 VSCode + CMake + Ninja 构建

本处使用的开发板为 HLK-W801-KIT-V1. 1

注意: 该仓库内的 SDK 有少量改动, 可能与官方的有出入
少量改动:

  • 移除了 BT 模块 (只保留 BLE) , AT 模块, 以及默认的 demo 程序的耦合
  • 修复编译过程中的大部分 Warning, 目前还剩 5 个左右

安装

  • 安装 CMake v3. 20+ 以及 Ninja

    • 打开系统的 cmd, 执行 cmake --helpninja --help 检查是否已安装完成
  • 克隆源码, 在 VSCode 中打开工程文件夹:

    • 在当前工作区打开终端, 执行 git submodule initgit submodule update, 拉取子模块 (此步骤要从 github 克隆仓库, 请确保网络通畅)
  • 安装 csky 编译器 (系统中已安装则可忽略该步骤) :

    • 打开工程的目录: sdk/tools/w800/toolchain/
    • csky-elfabiv2-tools-mingw-minilibc-20210423. 7z 编译器解压, 将解压后的目录移动到你的磁盘其他位置上
    • 打开系统属性- 高级- 环境变量设置, 将解压后编译器的路径 xxx\xx\csky-elfabiv2-tools-mingw-minilibc-20210423\bin 设置到环境变量 Path
    • 保存设置, 之后关闭所有 VSCode 实例
  • 再次打开 VSCode, 打开工程的目录, 在终端中执行 csky-elfabiv2-gcc -v 检查编译器是否已安装
  • 安装 VSCode 插件: CMake Tools

编译

  • 打开 CMake Tools 的工具栏
  • 选择 Configure All Projects 生成配置
  • 选择 w801. fls 为构建目标

    setup_cmake_target. png

  • 之后, 点击旁边的 build 图标启动构建
  • 编译完成后, 工程根目录下会生成一个 bin 文件夹, 固件将存放在其中

    build_done. png


烧录

  • 按下 ctrl+shift+B 打开可用任务, 选择 flash (select serialport) 回车, 之后输入串口名称, 回车启动烧录

    flash. png

  • 烧录结束后, 将打印如下 log:

    run. png

  • 由于程序烧录完后立即开始运行, 而烧录器串口打开较慢, 因此 log 有些缺失, 按下复位键重启程序即可看到完整 log:

    run2. png

本例程中, 默认开启固件加密以及数字签名, 上电后将校验固件签名

项目相关配置可以在项目根目录下的 w800sdk. conf 中进行更改

默认配置如下:

########################################
# WinnerMicro W800 Configuration
########################################

##########################
# Firmware Configuration
##########################

#
# Flash Map: 
#  Bootloader[0x08000000-0x08010000]:  64  KB
#  OTA_REGION[0x08010000-0x080D0000]:  768 KB
#  IMG_REGION[0x080D0000-0x08200000]:  Image Region,  MAX 0x130000 Bytes
#   - APP_IMG[0x080D0000-? ? ? ? ? ? ? ? ? ? ]:  App Code,   Size:  1MB + 128KB  (End:  0x081F0400) 
#   - USR_DAT[0x081F1000-0x081FB000]:  User Data  (Max Size:  40KB)   (End:  0x081FB000) 
#  SYSTEM_DAT[0x081FB000-0x08200000]:  System parameter defined in wm_internal_fls. c
#
CONFIG_W800_IMAGE_OTA_ADDR    = 0x08010000
CONFIG_W800_IMAGE_HEADER_ADDR = 0x080D0000
CONFIG_W800_IMAGE_APP_ADDR    = 0x080D0400
CONFIG_W800_IMAGE_APP_SIZE    = 0x00120000
CONFIG_W800_IMAGE_USR_ADDR    = 0x081F1000
CONFIG_W800_IMAGE_END_ADDR    = 0x081FB000

# External P-SRAM Max Size
CONFIG_W800_EXT_PSRAM_SIZE = 0x00800000

#
# Firmware Security
#

# 固件类型
#  0x0:  SECBOOT;  
#  0x1:  User Image
#  0xE:  ft 测试程序
#  其它值:  用户自定义
CONFIG_W800_IMAGE_TYPE = 1

# 固件签名
#  0:  IMAGE 不包含签名部分;  
#  1:  IMAGE 包含 128bytes 签名
CONFIG_W800_IMAGE_SIGN             = 1
#  固件签名所用 RSA 密钥对路径  (为空则使用默认密钥)  
CONFIG_W800_IMAGE_SIGN_PRIKEY_PATH = ""
CONFIG_W800_IMAGE_SIGN_PUBKEY_PATH = ""

# 固件加密
#  是否启用固件加密
CONFIG_W800_CODE_ENCRYPT     = 1
#  芯片内置 8 组 RSA 私钥用于解密固件加密的秘钥,  用户可任选一组使用,  取值范围 0~7  (目前只能选 0)  
CONFIG_W800_PRIKEY_SEL       = 0
#  固件加密的 key  (16 字节 ascii 码值) 
CONFIG_W800_CODE_ENCRYPT_KEY = "ffffffff62831853"

#########################
# Compile Configuration
#########################

CONFIG_W800_FIRMWARE_DEBUG = y

#####################
# Components Config
#####################

CONFIG_USER_MAIN_TASK_STACK_SIZE = 4096
0 条评论

发布
问题