esp32 开启加密固件后(开发模式) 刷入固件
1.正常刷入固件
2.使用命令将固件加密
idf.py encrypted-flashesp-idf导入 arduino
cd components
git clone https://github.com/espressif/arduino-esp32.git arduino
cd ..
CONFIG_FREERTOS_HZ=1000 # 需要修改为这个值
idf.py reconfigure # 刷新配置 一定要做
idf.py menuconfig
# Component config → Arduino Configuration → Enable Arduino
#include <Arduino.h>
void ArduinoTask(void *pv) {
initArduino(); // 关键:初始化 Arduino 核心
Serial.begin(115200);
Start();
while (true) {
Loop();
Serial.println("Arduino task running...");
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
extern "C" void app_main(void) {
xTaskCreatePinnedToCore(
ArduinoTask, "ArduinoTask",
8192, nullptr, 5, nullptr,
1 /* core */
);
}esp-idf添加库
idf.py add-dependency "h2zero/esp-nimble-cpp^2.3.4"esp-idf生成固件加密 密钥
# 生成一个加密密钥 记住要保存好,一旦遗失无法找回
espsecure.py generate_flash_encryption_key hmac_key.bin
# 将密钥烧录至eFuse中
espefuse.py --port comx burn_key hmac hmac_key.binesp-idf 生成安全启动证书
# 生成安全启动私钥 ECDSA 签名密钥(推荐)
espsecure.py generate_signing_key --version 2 --scheme ecdsa256 secure_boot_private_key.pem
# 使用私钥生成公钥
espsecure.py extract_public_key --keyfile secure_boot_private_key.pem --version 2 secure_boot_public_key.pem
# 使用公钥生成安全启动固件
espsecure.py digest_sbv2_public_key --keyfile secure_boot_public_key.pem --output secure_boot_public_key.bin
# 固件使用安全签名
Enable hardware Secure Boot in bootloader
Secure Boot private signing key # 设置私有签名证书绝对路径
# 对固件手动签名
espsecure.py sign_data --keyfile secure_boot_private_key.pem --version 2 --output bootloader_resigned.bin bootloader-unsigned.bin
# 验证签名 使用公钥验证
espsecure.py verify_signature --version 2 --keyfile secure_boot_public_key.pem bootloader.bin
espsecure.py verify_signature --version 2 --keyfile secure_boot_private_key.pem bootloader.bin
espsecure.py verify_signature --version 2 --keyfile secure_boot_public_key.pem bootloader_resigned.bin
# 注意烧录顺序
# 烧录安全启动密钥
espefuse.py --port comX secure_boot secure_boot_public_key.bin
# 启用安全启动 eFuse
espefuse.py --port comX burn_efuse SECURE_BOOT_EN