接前一篇文章:ESP32-C3模组上跑通OTA升级(7)
本文内容参考:
杂项系统 API - ESP32 - — ESP-IDF 编程指南 latest 文档
《ESP32-C3 物联网工程开发实战》 乐鑫科技
特此致谢!
七、固件版本
将不同功能的固件标记为不同版本是方便后期维护的一个重要手段。ESP-IDF提供了一些标记字段,可用于标记版本信息,这些字段与回滚/放回滚功能搭配使用,可满足大部分版本管控的需求。
1. 固件标记
可供读者进行编辑的字段有4个,分别为:secure_version(安全版本号)、project_version(工程版本号)、project_name(工程名称)、App version(应用版本);不可编辑的字段有2个,分别是idf_ver(ESP-IDF版本)、Compile time and date(编译时间与日期)。
(1)secure_version
安全版本号,用于设定芯片的安全版本。安全版本号存储在eFuse中,最多能标记16个版本。启用方式如下:
启动ESP-IDF命令行,切换到工程目录下。执行命令idf.py menuconfig,之后在图形界面中关注如下图所示各项:
(2)project_version
工程版本号,用于设定工程的版本。启用方式如下:
启动ESP-IDF命令行,切换到工程目录下。执行命令idf.py menuconfig,之后在图形界面中关注如下图所示各项:
menuconfig中的“Get the project version from Kconfig”及其子选项“Project version”选项对应到工程源码(工程根目录下的sdkconfig文件)中的变量为:
CONFIG_APP_PROJECT_VER_FROM_CONFIG=y
CONFIG_APP_PROJECT_VER="1"
修改“Project version”的值为2,将使得CONFIG_APP_PROJECT_VER的值变为2,即:
CONFIG_APP_PROJECT_VER_FROM_CONFIG=y
CONFIG_APP_PROJECT_VER="2"
如果menuconfig中的“Get the project version from Kconfig”项,则sdkconfig中的相应变量变为:
# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set
这一部分具体说明也参见:杂项系统 API - ESP32 - — ESP-IDF 编程指南 latest 文档
(3)project_name
工程名称,在工程目录下的CMakeList.txt文件中进行设置。以simple_ota工程为例,启用方式如下:
C:\Users\ns\esp32\simple_ota\CMakeLists.txt
# The following lines of boilerplate have to be in your project's CMakeLists
# in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.16)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(simple_ota)
project(X)为标记的工程名称。
(4)Compile time and date
编译时间和日期。与idf_ver(ESP-IDF版本)将在编译时自动赋值,读者从Log中可看到相关内容。
安全版本号(secure_version)与工程版本号(project_version)都可以用于标记固件版本信息,但它们的侧重点与实现方式不同。
- 安全版本号
安全版本号写入芯片的eFuse中,一旦写入便不可被更改。该芯片之后只允许写入更高版本号的固件,这种特性可以安全有效地管控重要的更新。重要的更新一般与安全相关,所以称为安全版本号。
- 工程版本号
工程版本号跟随固件存放在Flash中,可以在每次编译时随意更改,设备更新时不主动检查该信息,使用方式完全由开发者决定。
在实际的开发应用中,因为安全版本号有使用次数限制,一般将提升安全版本号定义为包含了重要功能更新、修复了安全漏洞,将提升工程版本号作为业务层功能更新使用。
更多内容请看下回。