使用 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 条评论

发布
问题