ESP32-S3 使用指定 key 来进行 secure boot 签名并进行 OTA 测试

news2024/12/24 21:18:22

文档说明

  • Secure Boot V2

测试准备:

  • 硬件准备:ESP32-S3 开发板或模组
  • 软件准备:esp-idf v5.0 版本 SDK

测试步骤:

  • 生成指定 secure boot 签名 key
  • 软件开启 secure boot 配置
  • 烧录被签名的固件
  • 对新的 app.bin 使用指定 key 进行签名
  • 对已经签名的 app.bin 进行 OTA 测试

1、生成指定 secure boot 签名 key

  • 可使用 esptool 工具,运行如下指令生成指定secure boot 签名 key
espsecure.py generate_signing_key secure_boot_signing_key.pem --version 2
  • secure_boot_signing_key.pem 为生成的(自定义名称)的 key file 文件
  • --version 2 为选择 secure boot V2 版本

在这里插入图片描述


2、软件开启 secure boot 配置

  • 使能 secure boot 功能的软件配置
  • 将 key 文件放到当前工程目录下,并使用指定 key 进行签名
  • 同时,注意 UART ROM download mode 配置选项的设置,若需要运行重烧固件,可按照如下进行设置

idf.py menuconfig —> Security features —> UART ROM download mode


在这里插入图片描述


3、 烧录被签名的固件

  • 由于 Secure boot 是对二级 bootloader 进行签名,因此编译生成的被签名的 bootloader.bin 将增大,需要调整默认 partition table 偏移地址

idf.py menuconfig —> Partition Table
在这里插入图片描述

  • 使用 idf.py build 指令编译当前工程,编译完成后会生成已经签名的 bootloader.bin 和 app.bin ,以及未被签名的 bootloader-unsigned.bin 和 app-unsigned.bin ,如下:

在这里插入图片描述

在这里插入图片描述

  • 注意编译完成后,直接使用 idf.py flash 指令烧录固件不会烧录被签名的 bootloader.bin,只会烧录 partition-table.binota_data_initial.bin 以及 被签名的 blink.bin ,需要自行对 被签名的 bootloader.bin 进行烧录

在这里插入图片描述

  • 烧录 被签名的 bootloader.bin固件,可在当前工程目录下,使用 idf.py bootloader-flash 指令来烧录 被签名的 bootloader.bin 固件。如下:

在这里插入图片描述

  • 固件烧录后会在第一次启动运行时完成 secure boot 签名,对 eFuse 写入 secure boot 签名 key 以及 secure boot 控制位,参见如下启动日志:

在这里插入图片描述

  • 未设置安全下载模式可使用 espefuse.py summary 指令查看 eFuse 信息,可以发现,Secure Boot 被使能,且 eFuse 中写入了 secure boot 签名 key ,如下:
    在这里插入图片描述

  • 设置了安全下载模式可使用 esptool.py --no-stub get_security_info 指令查看 eFuse 中的安全 信息,如下:

在这里插入图片描述

  • 对照 《ESP32-S3 技术参考手册》中的 “表 5­2. 密钥用途数值对应的含义” 说明,我们来看 EFUSE_KEY_PURPOSE 对应的数值含义。

在这里插入图片描述

  • Key_Purposes:(9,0,0,0,0,0,12) 第一个 eFsue block 为 9 ,说明这里已经有一个 secure boot 的 digest 烧录到 eFuse 了

4、对新的 app.bin 使用指定 key 进行签名

  • OTA 更新时固件时,需要对新的 app.bin 使用 secure boot 签名 key (secure_boot_signing_key.pem)进行签名,使用 hello_world.bin 进行测试,使用如下指令:
espsecure.py sign_data --version 2 --keyfile secure_boot_signing_key.pem --output SIGNED_hello_world.bin hello_world.bin

在这里插入图片描述

  • secure_boot_signing_key.pem 为 key 文件
  • SIGNED_hello_world.bin 为自定义名称的 被签名的后生成的 app.bin
  • hello_world.bin 为原始未被签名的 app.bin

5 、对已经签名的 SIGNED_hello_world.bin 进行 OTA 测试

  • 可基于 simple_ota_example 例程进行 OTA 测试,参见 “ESP32 HTTP OTA test” 说明。例如
    在这里插入图片描述
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/623259.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【006 Linux内核】应用程序中open()在linux中执行过程中是如何从用户空间到内核空间?

一、前言 应用程序运行在用户空间,而 Linux 驱动运行于内核空间。当我们在用户空间想要实现对内核的操作,比如使用 open 函数打开/dev/led 这个驱动,由于用户空间不能直接对内核进行操作,因此必须使用一个叫做 “系统调用” 的方…

论文阅读 (90):Proposal-based Multiple Instance Learning (P-MIL, 2023CVPR)

文章目录 1 要点1.1 概述1.2 一些概念1.3 主要步骤 2 方法2.1 候选提案生成2.2 提案特征提取和分类2.2.1 周围对比特征提取2.2.2 分类头 2.3 提案微调2.3.1 提案完备性评估2.3.2 实例级秩一致性 2.4 网络训练和推理2.4.1 网络训练2.4.2推理 3 实验3.1 数据集即评估标准3.1.1 数…

一线大厂Java 面试题大全1100+ 面试题附答案详解(2023最新整理)

写在前面 今年的面试比往年要难得多,各个互联网企业对于 Java 岗位的要求越来越多,也越来越高,主要是初级岗位已经趋近饱和,但高级岗位又相对来说缺乏,这类的人才偏少,因此作为 Java 开发人员,…

【新星计划回顾】第四篇学习计划-自定义函数、存储过程、随机值知识点

🏆🏆时间过的真快,这是导师回顾新星计划学习的第四篇文章! 最近这段时间非常忙,虽然导师首次参与新星计划活动已经在4月16日圆满结束,早想腾出时间来好好整理活动期间分享的知识点。 🏆&#x1…

【TiDB Future App Hackathon 2023 】TiDB 首届全球黑客马拉松,开发者的狂欢夏日盛会!快来一起 Coding 吧!...

作者: Billmay表妹 原文来源: https://tidb.net/blog/cf364859 2023 TiDB Future App Hackathon 来啦!本届 Hackathon 的主题为:Code, Innovate & Build Amazing Data Applications —— 释放你的创造力、构建突破性的应用…

JS逆向之大众点评mtgsig

本教程仅限于学术探讨,也没有专门针对某个网站而编写,禁止用于非法用途、商业活动、恶意滥用技术等,否则后果自负。观看则同意此约定。如有侵权,请告知删除,谢谢! 目录 前言 一、先分析下接口参数 二、开导…

不懂这个118358-80-8甘露糖丝氨酸?看看Fmoc-Ser(Ac4Manα)-OH的全面解析吧!

Fmoc-Ser(Ac4Manα)-OH,甘露糖丝氨酸Product structure: Product specifications: 1.CAS No:118358-80-8 2.Molecular formula:C32H35NO14 3.Molecular weight:657.63 4.Packaging specification&#xff1…

浅谈响应式网页设计 —— 测试该知道的二三事

😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…

【LeetCode】每日一题 -- 1240. 铺瓷砖 -- Java Version

题目链接:https://leetcode.cn/problems/tiling-a-rectangle-with-the-fewest-squares/ 1. 题解(1240. 铺瓷砖) 23.05.31 华为机试第二题 1.1 暴力深搜 – DFS NP-Complete 问题 题解参考:Java DFS暴力递归(详细注释&…

LeetCode 2352. Equal Row and Column Pairs【模拟,哈希表,前缀树】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

100G QSFP28光模块类型和使用场景

100G QSFP28光模块是当前数据中心和通信网络中广泛应用的高速光模块之一。本文将详细介绍100G QSFP28光模块的类型、应用场景以及市场发展前景,并引用相关产品参数和行业统计数据,为读者提供全面的了解。 一、100G QSFP28光模块类型 100G QSFP28光模块…

开源 API 网关的访问策略(一)

许多企业和组织面临着网关访问控制的挑战,因为传统的访问控制方法往往过于笨重和繁琐。这些方法可能涉及复杂的规则集、繁琐的手动配置过程、缺乏灵活性和可扩展性等问题。此外,随着云计算和移动设备的广泛应用,访问控制的复杂性和挑战程度也…

stable-diffusion-webui 安装采坑日记

这里写自定义目录标题 安装容易采坑的点效果测试 安装容易采坑的点 1、不愿安装大佬的整合包。在自己时间足够多的情况下,可以尝试自己搭环境。但是自己安装的时间成本真的非常高,环境配置报错会让人陷入崩溃,如果没有代码排错能力&#xff…

sw2urdf导出的urdf文件中的惯性参数(inertial)错误的问题

现象描述 有时候,当我们使用solidworks建好我们的模型,然后利用【sw2urdf】导出后,发现其中的惯性参数,似乎不正确,ixx、izz这些参数都是很接近0的: 资料查找 其实这个不是我们设置的问题,而…

蓝牙耳机什么牌子好?无线蓝牙耳机品牌推荐

相信很多人都有过这样的经历,早晚高峰像沙丁鱼般被挤在公交或地铁上,嘈杂的环境、工作的劳累让你只想听听音乐追追剧,给自己一些放松的时光。可拿出有线耳机却常常被挤掉,更有被扯到耳朵的时候。想换一款蓝牙耳机,但面…

做连接中国企业出海的全球技术桥梁,亚马逊云科技出海日盛夏盛启

出海路漫漫,企业开拓全球市场而孤军奋战,常常会感到力不从心。好的产品有了,渠道有了,供应链有了,还要自己从0-1搭建存储、网络和架构?营销季来了想趁机冲一波销量,还要自己运维本地IDC、大促来…

docker-compose 部署zookeeper集群 —— 筑梦之路

1. zookeeper介绍 Zookeeper是一个开源的分布式协调服务中间件,它提供了一种分布式数据管理服务,能够实现分布式锁、命名服务、配置管理、集群管理等功能,从而帮助用户构建高可用、高性能的分布式系统。以下是Zookeeper的一些主要特点和功能&…

Java注解的入门学习

一、概念 Java注解是一种元数据形式,可以被添加到Java代码中的各种元素(类、方法、字段等)上,以提供关于这些元素的额外信息。注解是在Java 5中引入的一项特性,它们不直接影响代码的执行,而是提供了一种机…

顺序表算法练习

一.顺序表基础算法 1.说明 博主这里是算法练习,帅气的读者来这里默认已经知道了它,这里主要是针对408考研真题中关于线性表的算法题进行编写。第一部分是根据课本编写线性表的基本函数,剩下四个部分是针对考研真题的算法练习。 2.C语言代码…

ChatGLM的模型架构

ChatGLM的部署微调等,很多资料,不再赘述。 P-tuning V2 以P-Turing V2为例,介绍ChatGLM的网络结构。P-tuning V2方法训练时冻结模型的全部参数,只激活prefix_encoder的参数。 1、prefix encoder 初始化pre_len,代表…