使用 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 條評論

發布
問題