手动加密 ESP 设备量产固件并烧录的流程
需求如下:
想对量产固件进行加密,加密后可用工具擦除旧固件固件,支持重复烧录固件。
所需工具:
- esptool , 可参考 “esptool.py 介绍和使用”
- Flash 下载工具
参考文档:
- Flash 加密
- ESP32-Secure Boot 安全方案
解决方案:
指定 Flash 加密密钥(
key.bin
),即每个模块使用相同的 Flash 加密密钥(key.bin
)。先把工程编译出的单独的二进制明文固件 使用 Flash 加密密钥(key.bin
)进行加密;然后可以直接使用Flash 下载工具烧录加密后的密文固件。密文固件烧录后,需要使用 esptool 把 Flash 加密密钥(key.bin
)烧录到 Efuse 中以及开启 Efuse 中的 Flash 加密的控制位来使加密后的固件正常运行启动。步骤如下:*
1 使用 esptool 工具,为量产固件生成 Flash 加密密钥(key.bin
) ,例如生成的加密秘钥为 key.bin
:
espsecure.py generate_flash_encryption_key key.bin
2 对每个待量产烧录的固件( bin 文件)进行加密, 以 hello-world 例程为例
- 需要在 menuconfig 中开启 Flash 加密选项,如下:
menuconfig -> Security features -> Enable flash encryption on boot
- 由于 Flash 加密会增加 bootloader.bin 固件的大小,所以需要调整默认分区表的偏移量,默认是 0x8000 , 可调整至 0xa000 。可在 menuconfig 中修改 partition_table 的设置。如下:
menuconfig -> Partition Table -> Offset of partition table
- 然后对工程进行编译,查看编译后的固件对应的固件下载地址。可以看到 hello-world.bin 的下载地址变成了 0x20000
Project build complete. To flash, run this command:
E:\.espressif\python_env\idf4.3_py3.8_env\Scripts\python.exe ..\..\..\components\esptool_py\esptool\esptool.py -p (PORT) -b 460800 --before default_reset --after no_reset --chip esp32c3 write_flash --flash_mode dio --flash_size detect --flash_freq 80m 0x0 build\bootloader\bootloader.bin 0xa000 build\partition_table\partition-table.bin 0x20000 build\hello-world.bin
or run 'idf.py -p (PORT) flash'
3 然后,使用生成的 Flash 加密密钥( key.bin
文件)对工程编译后的每个独立的固件( bin 文件)进行加密。如下:
- 使用生成的 Flash 加密密钥(
key.bin
)对 bootloader.bin 进行加密,加密后的 bootloader.bin 为 key_bootloader.bin
espsecure.py encrypt_flash_data --keyfile key.bin --address 0x1000 -o key_bootloader.bin build/bootloader/bootloader.bin
- 使用生成的 Flash 加密密钥(
key.bin
)对 partition-table.bin 进行加密,加密后的 partition-table.bin 为 key_partition-table.bin
espsecure.py encrypt_flash_data --keyfile key.bin --address 0xa000 -o key_partition-table.bin build/partition_table/partition-table.bin
- 使用生成的 Flash 加密密钥(
key.bin
)对 hello_world.bin 进行加密,加密后的 hello-world.bin 为 key_hello-world.bin
espsecure.py encrypt_flash_data --keyfile key.bin --address 0x20000 -o key_hello-world.bin build/hello_world.bin
4 按照工程编译生成后的固件的对应的下载地址,烧录加密后的固件( 加密的 bin 文件),如下使用 esptool 工具来下载加密后的固件 :
esptool.py -b 460800 --before default_reset --after no_reset --chip esp32 write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x1000 key_bootloader.bin 0xa000 key_partition-table.bin 0x20000 key_hello-world.bin
注意:
此下载加密固件的步骤也可以直接使用 Flash 下载工具 来下载,如下:
5 将 Flash 加密密钥(key.bin
) 烧录到 Efuse 中:
espefuse.py burn_key flash_encryption key.bin
6 使用 esptool 工具开启 Efuse 中的 Flash 加密的控制位:
espefuse.py burn_efuse FLASH_CRYPT_CONFIG 0xF FLASH_CRYPT_CNT 1
说明:
- 若 Efuse 中没有写入 Flash 加密秘钥(
key.bin
)和开启 Efuse 中的 Flash 加密的控制位,则无法正常运行加密后的 “固件”( bin 文件)。 - 模组开启 Flash 加密后,无法使用 Flash 下载工具 来进行重烧固件和擦除固件的操作,但支持使用 esptool 工具来重烧固件和擦除固件。
- 对 Flash 加密后的模组重烧固件,重烧的固件要求在 menuconfig 中开启
”Flash 加密“
的配置选项并使用与旧固件相同的加密密钥(key.bin
)来进行加密后进行烧录,这样重烧后的固件才能正常运行。 - Efuse 中烧录加密密钥不可擦除,因此无法重烧新的密钥。
- 此解决方案满足对模组量产固件加密后还能使用 esptool 工具来对模组进行
重烧固件、擦除、读 Flash
的操作,但读出的固件为加密固件。若新的模组没有烧录加密固件对应的密钥(key.bin
)的话,仅把读出的加密固件烧录到新的模组上也是无法正常运行启动的。
手动加密 ESP 设备量产固件并烧录的流程相关推荐
- 唐诗三百首加密软件如何使用_使用RT809H编程器跳过高安加密制作液晶电视量产软件的方法...
普通的主板用RT809H编程器读取的数据可以直接用到其它同机芯主板上,非常方便快捷.高安加密的主板因为绑定了芯片ID使得有些读取的数据不通用,我们使用RT809H编程器跳过高安加密功能,可以方便的制作 ...
- USB设备量产导致通用串行总线控制器显示感叹号解决办法
昨天量产U盘的时候死机了,刚开始还没出现什么问题,在随后的使用中突然所有的USB设备居不能使用了,打开Windows 7设备管理器里面一看,通用串行总线控制器显示一大片感叹号,所有的USB设备均不能使 ...
- ubuntu 串口调试工具推荐_升级版全系列视频第一个项目电子产品量产测试与烧录工具...
第一章 前言 温馨提示:本文共10111字,预计阅读时间26分钟. 之前说过要开源100ASK_IMX6ULL批量测试GUI: 100ask_imx6ull批量测试神器即将开源 ,今天说到做到免费开源 ...
- 智微JMS901量产工具软件+固件,JMS901双接口U盘成功量产教程分享
众所周知,智微的JMS901主控很早就出来了.依稀记得发布时间是2018年11月左右,JMS901为USB3.1 Gen1转UFS2.1的高速桥接芯片,是智微科技针对新兴UFS界面存储装置提出的全新解 ...
- 智微JMS901成功量产,附JMS901量产工具软件+固件+教程分享
所周知,智微的JMS901主控很早就出来了.依稀记得发布时间是2018年11月左右,JMS901为USB3.1 Gen1转UFS2.1的高速桥接芯片,是智微科技针对新兴UFS界面存储装置提出的全新解决 ...
- 痞子衡嵌入式:RT-MFB - 一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案. 对于以 i.MXRT 这类没有内部 NVM (Non-Volati ...
- 天龙固件U盘更新_硅格T18D量产工具下载_硅格T18D量产工具官方版下载[u盘格式化]...
硅格T18D量产工具官方版是比较实用的u盘修复工具,硅格T18D量产工具官方版可以让使用者很轻松便捷的对硅格T18D进行量产操作,并支持修复和格式化的功能,提高U盘的性能,释放空间.硅格T ...
- 成功把变砖的RTL9210b硬盘盒救了回来,附量产工具和固件
2021年国庆时买的一个RTL9210b主控板硬盘盒,一直插着固态给电视扩容用.昨晚看电视的时候狗子在家里乱窜绊掉了电源线,导致电视机掉电关机,再次开机发现电视无法读取固态,换电脑上也一样.猜测多半是 ...
- banq修复_SM3271AB_慧荣SM3271AB U盘量产加密及修复教程 - 系统部
一个某宝买的便宜的BANQ U盘,由于想把U盘分成两个分区,一个做正常的U盘分区,一个做加密分区,但U盘跟硬盘是不一样的,直接用分区软件分出的U盘,电脑只识别一个分区,所以U盘必须要用量产工具才能分区 ...
最新文章
- 用Python如何查快递?
- 小余学调度:学习记录2021年9月
- java学习(29):大神指导(巩固练习)
- 2020中国数字营销人才发展报告
- mysql代码提示_聊一聊 php 代码提示
- 现代C++模板元编程基础
- designer pyqt5 界面切换_PyQT5堆叠布局:切换界面(QStackedLayout)
- 29. Element ownerDocument 属性
- POJ 2135Farm Tour--MCMF
- 点餐系统数据库设计--SQL Server
- 使用 Apache FOP 2.3 + docbook-xsl-ns-1.79.1 转换 Docbook 5.1 格式的 XML 文档成 PDF/RTF 文件
- 雷达干扰技术(二)数字干扰合成及相关技术
- 【Docker】No defult Boot2Docer ISO异常
- 网卡和网卡的驱动程序
- 2022年终总结——工作第五年
- 迪士尼超级计算机多少钱,上海迪士尼乐园公布票务调整方案,明年1月9日起实行新票价...
- NBUT1225-NEW RDSP MODE I
- 机器学习(MATLAB实现)——SVM支持向量机(一)
- 测试你的身份证号码最后一位,校验码的生成方式
- 极客日报:阿里再度调整组织架构:天猫淘宝大融合,新设三大中心;苹果M1首席芯片设计师跳槽至英特尔
热门文章
- 中国石油大学北京计算机专业保研,2020年中国石油大学(北京)保研率是多少...
- 如何从数据库中筛选出达成指定里程碑节点的项目_房地产企业如何搭建运营管理体系...
- 阿里云ECS服务器购买记录
- shell怎么使用制表符_shell中vi替换特殊字符(制表符\t等)的方法
- 看到一篇好的文章计算机专业的学习心得
- emoji mysql存储
- MySQL : Access denied for user ''@'localhost' to database 'mysql'问题看点。
- maps-api-v3_链接Google Maps和Flickr API
- 超分重建数据集 DIV2K Flickr2K 下载地址【有效分享】
- DailyTopic_4/27: 当当当当~ ~ 吃瓜!