From 4fb24cc439f5a7b6763b59d6bbcf3edf0ec77670 Mon Sep 17 00:00:00 2001 From: Natsume1710 <162396185+Natsume1710@users.noreply.github.com> Date: Tue, 17 Jun 2025 14:47:45 +0800 Subject: [PATCH] Update README.md --- 08-Security_Upgrade/README.md | 115 ---------------------------------- 1 file changed, 115 deletions(-) diff --git a/08-Security_Upgrade/README.md b/08-Security_Upgrade/README.md index 843b181..d4f687e 100644 --- a/08-Security_Upgrade/README.md +++ b/08-Security_Upgrade/README.md @@ -169,121 +169,6 @@ uint32_t SecureService_Call(uint32_t service_id, uint32_t param1, uint32_t param --- -### 🔹 OTA(Over-the-Air)升级机制 - -> 支持远程更新嵌入式系统的固件版本 -1. 双分区升级架构 - -```plaintext -Flash布局: -+-------------------+ 0x08000000 -| Bootloader | -+-------------------+ 0x08010000 -| Application Slot A| -+-------------------+ 0x08040000 -| Application Slot B| -+-------------------+ 0x08070000 -| Configuration Area| -+-------------------+ -``` - -2. 升级状态机实现 - -```c -typedef enum { - OTA_IDLE, // 空闲状态 - OTA_CHECKING, // 检查更新 - OTA_DOWNLOADING, // 下载中 - OTA_VERIFYING, // 校验中 - OTA_READY, // 准备重启 - OTA_UPGRADING, // 升级中 - OTA_FAILED // 升级失败 -} OTA_State_t; - -// OTA状态机处理函数 -void OTA_Process(void) { - switch (ota_state) { - case OTA_IDLE: - if (check_update_flag) { - ota_state = OTA_CHECKING; - vCheckForUpdate(); - } - break; - - case OTA_DOWNLOADING: - if (download_complete) { - ota_state = OTA_VERIFYING; - vVerifyFirmware(); - } else if (download_error) { - ota_state = OTA_FAILED; - vHandleError(DOWNLOAD_ERROR); - } - break; - - // 其他状态处理... - } -} -``` - -3. 失败回滚机制 - -```c -// 启动时验证应用完整性 -bool ValidateApplication(uint32_t start_address) { - // 检查向量表签名 - uint32_t *vector_table = (uint32_t *)start_address; - if (vector_table[0] == 0xFFFFFFFF) { // 检查栈顶指针是否有效 - return false; - } - - // 计算应用哈希并验证 - uint8_t calculated_hash[32]; - SHA256((uint8_t *)start_address, APPLICATION_SIZE, calculated_hash); - - // 从配置区获取预期哈希 - uint8_t *expected_hash = GetExpectedHash(); - return (memcmp(calculated_hash, expected_hash, 32) == 0); -} - -// 主程序 -int main(void) { - // 初始化硬件 - HAL_Init(); - SystemClock_Config(); - - // 检查主应用是否有效 - if (ValidateApplication(APPLICATION_SLOT_A_ADDRESS)) { - // 跳转到主应用 - JumpToApplication(APPLICATION_SLOT_A_ADDRESS); - } else if (ValidateApplication(APPLICATION_SLOT_B_ADDRESS)) { - // 主应用无效,尝试从备份应用启动 - JumpToApplication(APPLICATION_SLOT_B_ADDRESS); - } else { - // 两个应用都无效,进入恢复模式 - EnterRecoveryMode(); - } -} -``` - - -#### ✅ OTA 流程核心步骤 - -1. 检查版本更新(HTTP/MQTT 下载 manifest) -2. 下载固件(二进制) -3. 存储到备份区(Backup Slot) -4. 校验 CRC/Hash / 签名 -5. 设置 Bootloader 标志位并重启 -6. Bootloader 引导进入新固件 -7. 若失败则回滚(Fail-safe 机制) - -#### ✅ 常用升级协议 - -- HTTP / HTTPS -- MQTT + Base64 二进制块传输 -- CoAP(轻量级) - ---- - ### 🔹 Bootloader 开发建议 - 通用功能:下载、校验、重启、回滚