如何查询 ESP-IDF 中使用的第三方组件的版本?

引言

随着开源的日益普及,开源包的漏洞数量也在增加。这会给公司带来多种风险和挑战,比如:

  • 库版本更新导致的兼容性问题
  • 库许可证违反引发潜在法律纠纷
  • 库漏洞被利用导致被攻击(含供应链攻击)

越来越多的用户希望使用 SCA (software composition analysis) 工具,比如
BlackDuck 通过分析源码提取项目依赖的第三方组件及其版本、许可证等信息,生成软件物料清单(SBOM,Software Bill-of-Materials),根据 SBOM 分析项目是否使用了存在已知漏洞的组件,后期其它组件爆出漏洞时也可根据 SBOM 快速排查受影响项目。

ESP-IDF 下使用到多个第三方组件,对于不同的组件,查找版本的策略有所不同,SCA 工具可能无法获取到所有组件的版本,本篇文档介绍如何获取 IDF 使用的第三方组件的版本。

不同 ESP-IDF 版本依赖的组件有所不同,本文以 ESP-IDF v5.1.1 为例进行介绍。

获取第三方组件版本

Firmware Components 列举了 ESP-IDF v5.1.1 使用的所有第三方组件以及对应的版权和许可证信息,后面表格中列出的组件均来源于此。

总结下来,大致有如下几种方法获取版本:

  • 切到本地下载的相应版本的 ESP-IDF 目录下,执行 git submodule
  • 从组件的头文件获取;
  • 部分组件是从第三方代码中衍生出来的,目前作为 ESP-IDF 的一部分进行开发和维护,可使用 ESP-IDF 版本;
  • 部分组件版本无法直接获取,需向乐鑫确认。

ESP-IDF v5.1.1 下执行 git submodule 的返回结果如下,可以看到一些第三方组件的版本信息。

 $ git submodule      d037ec89546fad14b5c4d5456c2e23a71e554966 components/bootloader/subproject/components/micro-ecc/micro-ecc (v1.0)e1b3a29c58a452a6c017113686262094afd87042 components/bt/controller/lib_esp32 (e1b3a29)5fcfd0e457a76ebb234086ccd6dc391690d69e90 components/bt/controller/lib_esp32c2/esp32c2-bt-lib (5fcfd0e)b438f60a295183e7c67eb42ae05f4580f4b1ced0 components/bt/controller/lib_esp32c3_family (b438f60)d785de0a7c46d9badcd73bc83c2e5cb78f7054b2 components/bt/controller/lib_esp32c6/esp32c6-bt-lib (d785de0)35bd3cd7352014d303a96c46d8ea8446ea0a9a54 components/bt/controller/lib_esp32h2/esp32h2-bt-lib (35bd3cd)9478bc510fa9fc792d98efbc80dc547b97a13b99 components/bt/host/nimble/nimble (remotes/origin/master-1499-g9478bc51)eeecc49ce8af123cf8ad40efdb9673e37b56230f components/cmock/CMock (v2.5.2-2-geeecc49)37698e17a4c7fd2e0872317fc8befaac3bb10cb4 components/esp_coex/lib (heads/main)998e05636344949ba219e8ac56feb733e27bf5d2 components/esp_phy/lib (998e056)0a89d5ffd2c452407940c2e617434e54f3c34576 components/esp_wifi/lib (remotes/origin/feature/ftm_support_stage2-184-g0a89d5ff)8c9cd0517adf99e363812e9a295dfe3898fdd345 components/heap/tlsf (heads/idf)102b03c8095de8a337c293f79dce189be63186f3 components/ieee802154/lib (heads/master)d348621ca93571343a56862df7de4ff3bc9b5667 components/json/cJSON (v1.7.15)269a58f18597aedec31c439e34cdaea47229dda3 components/lwip/lwip (remotes/origin/master-264-g269a58f1)65b3c0857c9f207dcb0b646f2b4ebd8e5edf83c1 components/mbedtls/mbedtls (mbedtls-3.4.0-7-g65b3c0857)dffabb067fb3c39f486033d2e47eb4b1416f0c82 components/mqtt/esp-mqtt (ESP-MQTT_FOR_IDF_4.x-149-gdffabb0)c9c17a0b6634af016111c9817f0be1fe0e7112f6 components/openthread/lib (heads/master)5beae143700db54c6e9bd4b15a568abe2f305723 components/openthread/openthread (thread-reference-20230706-12-g5beae1437)abc67a11c6db271bedbb9f58be85d6f4e2ea8389 components/protobuf-c/protobuf-c (v1.4.1)0dbb3f71c5f6fae3747a9d935372773762baf852 components/spiffs/spiffs (0.2-255-g0dbb3f7)7d2bf62b7e6afaf38153041a9d53c21aeeca9a25 components/unity/unity (v2.4.3-51-g7d2bf62)

下表列出了获取不同组件的版本的方法,对于其他的 ESP-IDF 版本,方法是类似的,切到对应的 commit 或者 tag 版本即可。

第三方组件版本如何获取版本(如没有,请说明原因)
Newlib4.1.01. 从 _newlib_version.h 获取版本,该文件位于工具链中。
例如,可在 IDF 环境中运行下面指令:
xtensa-esp32-elf-gcc -dM -E -x c - <<< "#include <_newlib_version.h>" | grep NEWLIB_VERSION
对于 ESP-IDF v5.1.1,将打印如下内容:
#define _NEWLIB_VERSION "4.1.0"
2. 在工具链版本中查找
a. 查找 IDF 使用的工具链版本
例如,对于 ESP-IDF v5.1.1,可找到 xtensa-esp32-elf 工具链版本为 esp-12.2.0_20230208
b. 在工具链版本的 release note 页面获取 newlib 版本
这里列出了自 esp-2022r1 以来的更改,newlib 版本与 esp-2022r1 相同,为 4.1.0
Xtensa header files12.0.9从头文件 esp-idf/components/xtensa/include/xtensa/hal.h 中获取版本
FreeRTOSV10.4.31. 参见 ESP-IDF 编程指南的 FreeRTOS 官方文档
2. 从头文件 esp-idf/components/freertos/FreeRTOS-Kernel/include/freertos/FreeRTOS.h 中获取版本
LWIPmaster-264-g269a58f11. git submodule
2. esp-idf/components/lwip
(可将 v5.1.1 改为任意所需要的版本或者 commit,请注意 lwip @ 269a58f 是可点击的,将跳转到当前 ESP-IDF 所使用的 lwip 的一个具体的版本,对于 v5.1.1 而言,所使用的 LWIP 的 commit id 为 269a58f18597aedec31c439e34cdaea47229dda3)
wpa_supplicantv2.10对于该组件,乐鑫没有维护与上游代码相对应的版本。这是因为乐鑫对 wpa_supplicant 进行了大量修改,以适应 ESP 目标,并且仅支持物联网特定功能。但会定期升级与安全相关的补丁。从安全角度讲,所有 v5.X ESP-IDF 版本都是 2.10 版。
FreeBSD net80211NA乐鑫没有维护 net80211 的版本。有一个经过大量修改的 net80211 版本,它是从较早的 FreeBSD 代码分叉而来,针对 ESP 目标进行了修改,并升级了物联网特定功能。由于上游 net80211 没有得到积极维护,因此乐鑫不对其进行跟踪,而是独立维护自己的堆栈。
argtable3v3.2.2在提交信息中提及。例如,请查看 ESP-IDF v5.1.1 的历史记录
linenoisev5.1.1由乐鑫维护,可使用 IDF 版本。
FatFSR0.15从头文件 esp-idf/components/fatfs/src/ff.h 获取版本
cJSONv1.7.151. git submodule
2. esp-idf/components/json
micro-eccv1.01. git submodule
Mbed TLSmbedtls-3.4.0-7-g65b3c08571. git submodule
2. esp-idf/components/mbedtls
SPIFFS0.2-255-g0dbb3f71. git submodule
2. esp-idf/components/spiffs
SD/MMC driverv5.1.1由乐鑫维护,可使用 IDF 版本。
(SD/MMC 是从第三方代码中衍生出来的,目前作为 IDF 的一部分进行开发和维护,因此可使用 ESP-IDF 版本,这也适用于其他的组件,比如 UBSAN runtime)
ESP-MQTTESP-MQTT_FOR_IDF_4.x-149-gdffabb01. git submodule
2. esp-idf/components/mqtt
BLE Meshv5.1.1由乐鑫维护,可使用 IDF 版本。
mynewt-nimblenimble-1.5.0ESP-IDF Master/v5.2/v5.1 - nimble-1.5.0
ESP-IDF 5.0 - nimble-1.4.0
ESP-IDF 4.4/ 4.3 - nimble-1.3.0

对于其他的 IDF 版本,需向乐鑫确认
TLSF allocator8c9cd0517adf99e363812e9a295dfe3898fdd3451. 对于 IDF v5.x:
a. git submodule
b. esp-idf/components/heap

2. v5.0 之前的版本:
deff9ab509341f264addbd3c8ada533678591905
openthreadthread-reference-20230706-12-g5beae14371. git submodule
2. esp-idf/components/openthread
UBSAN runtimev5.1.1由乐鑫维护,可使用 IDF 版本。
HTTP Parser2.7.0从 esp-idf/components/http_parser/http_parser.h 头文件中获取版本
SEGGER SystemView3.42从 esp-idf/components/app_trace/sys_view/SEGGER/SEGGER.h 头文件获取版本
protobuf-c1.4.11. git submodule
2. esp-idf/components/protobuf-c
CMockv2.5.2-2-geeecc491. git submodule
2. esp-idf/components/cmock
unityv2.4.3-51-g7d2bf621. git submodule
2. esp-idf/components/unity

补充说明

  1. 前面有提到,不同 ESP-IDF 版本依赖的组件有所不同,比如用于 XML 解析的 expat 组件,在 ESP-IDF v5.0 之前,该组件是一个内置的组件,可通过 git submodule 查询版本,而在 ESP-IDF v5.0 之后,该组件位于 IDF 组件管理器,用户可根据需要下载相应的版本。

  2. 乐鑫有开发自己的漏洞扫描工具 ESP-IDF-SDOM,ESP-IDF-SDOM 是一个 SBOM 生成工具。 它为基于 ESP-IDF 的应用程序生成 SPDX 格式 SBOM。 该工具还允许根据国家漏洞数据库 (NVD) 检查生成的 SBOM 是否存在已知安全漏洞。
    如果有兴趣了解 ESP-IDF-SDOM,可以看下 Software Bill of Materials。

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

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

相关文章

八大算法排序@快速排序、递归版本一(C语言版本)

目录 快速排序版本一概念算法思想一二三 快排步骤代码实现时间复杂度空间复杂度特性总结 快速排序版本一 概念 快速排序&#xff08;Quicksort&#xff09;是一种高效的排序算法&#xff0c;它是由英国计算机科学家 Tony Hoare 在1960年提出的。快速排序是基于分治&#xff08…

C++中string的库函数

山再高&#xff0c;往上攀&#xff0c;总能登顶&#xff01; 路再长&#xff0c;走下去&#xff0c;定能到达&#xff01; &#x1f3a5;烟雨长虹&#xff0c;孤鹜齐飞的个人主页 &#x1f525;个人专栏c 期待小伙伴们的支持与关注&#xff01;&#xff01;&#xff01; 目录 前…

Pandas DataFrame中将True/False映射到1/0

在本文中&#xff0c;我们将看到如何在Pandas DataFrame中将True/False映射到1/0。True/False到1/0的转换在执行计算时至关重要&#xff0c;并且可以轻松分析数据。 1. replace方法 在这个例子中&#xff0c;我们使用Pandas replace()方法将True/False映射到1/0。在这里&…

【Spark精讲】记一个SparkSQL引擎层面的优化:SortMergeJoinExec

SparkSQL的Join执行流程 如下图所示&#xff0c;在分析不同类型的Join具体执行之前&#xff0c;先介绍Join执行的基本框架&#xff0c;框架中的一些概念和定义是在不同的SQL场景中使用的。 在Spark SQL中Join的实现都基于一个基本的流程&#xff0c;根据角色的不同&#xff0…

信息论与编码期末复习——计算题+基础汇总(二)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

centos安装tesseract

1.安装相关依赖 sudo yum install autoconf automake sudo yum install libjpeg-devel libpng-devel libtiff-devel zlib-devel 2.安装leptonica 下载 wget http://www.leptonica.org/source/leptonica-1.78.0.tar.gz 解压 tar -zxvf leptonica-1.78.0.tar.gz 安装 cd le…

【计算机毕业设计】SSM网上外卖订餐管理系统

项目介绍 该项目为前后台项目&#xff0c;分为普通用户与管理员两种角色&#xff0c;前台普通用户登录&#xff0c;后台管理员登录&#xff1b; 普通用户主要功能包括&#xff1a; 登录注册&#xff0c;查看商品&#xff0c;提交订单&#xff0c;然后留言&#xff0c;查看购物…

DS|静态查找

题目一&#xff1a;DS静态查找 -- 顺序查找 题目描述&#xff1a; 给出一个队列和要查找的数值&#xff0c;找出数值在队列中的位置&#xff0c;队列位置从1开始 要求使用带哨兵的顺序查找算法 输入要求&#xff1a; 第一行输入n&#xff0c;表示队列有n个数据 第二行输入…

GO 配置国内镜像代理 Go Module代理仓库服务

用法 Go 1.13 及以上&#xff08;推荐&#xff09; 打开你的终端并执行 $ go env -w GO111MODULEon $ go env -w GOPROXYhttps://goproxy.cn,directmacOS 或 Linux 打开你的终端并执行 $ export GO111MODULEon $ export GOPROXYhttps://goproxy.cn或者 $ echo "expo…

java常见面试题:什么是线程(Thread)?Java中的线程有哪些状态?

线程&#xff08;Thread&#xff09;是操作系统能够进行运算调度的最小单位&#xff0c;被包含在进程之中&#xff0c;是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流&#xff0c;一个进程中可以并发多个线程&#xff0c;每条线程并行执行不同的任务。线程…

CAN通信的基本原理与实现方法

一. CAN协议概念 1.1 CAN 协议简介 CAN 是控制器局域网络 (Controller Area Network) 的简称&#xff0c;它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的&#xff0c;并最终成为国际标准(ISO11519以及ISO11898),是国际上应用最广泛的现场总线之一。差异点如下&…

手拉手springboot3整合mybatis-plus多数据源

环境介绍 技术栈 springbootmybatis-plusmysql 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 17 Spring Boot 3.1.7 dynamic-datasource 3.6.1 mybatis-plus 3.5.3.2 加入依赖 <dependency><groupId>com.baomidou</groupId><arti…

苹果macOS 14.3开发者预览版Beta 2发布 修复API会意外失败的问题

1 月 4 日消息&#xff0c;苹果向 Mac 电脑用户推送了 macOS 14.3 开发者预览版 Beta 2 更新&#xff08;内部版本号&#xff1a;23D5043d&#xff09;&#xff0c;本次更新距离上次发布隔了 22 天。 macOS Sonoma 14.3 Beta 2 主要以修复 BUG、提高安全性为主。根据苹果官方更…

如何做一个炫酷的Github个人简介(3DContribution)

文章目录 前言3D-Contrib第一步第二步第三步第四步第五步第六步 前言 最近放假了&#xff0c;毕设目前也不太想做&#xff0c;先搞一点小玩意玩玩&#xff0c;让自己的github看起来好看点。也顺便学学这个action是怎么个事。 3D-Contrib 先给大家看一下效果 我的个人主页&am…

面试算法96:字符串交织

题目 输入3个字符串s1、s2和s3&#xff0c;请判断字符串s3能不能由字符串s1和s2交织而成&#xff0c;即字符串s3的所有字符都是字符串s1或s2中的字符&#xff0c;字符串s1和s2中的字符都将出现在字符串s3中且相对位置不变。例如&#xff0c;字符串"aadbbcbcac"可以由…

Hive自定义函数支持国密SM4解密

当前项目背景需要使用到国密SM4对加密后的数据进行解密&#xff0c;Hive是不支持的&#xff0c;尝试了华为DWS数仓&#xff0c;华为只支持在DWS中的SM4加密解密&#xff0c;不支持外部加密数据DWS解密 新建Maven工程 只需要将引用的第三方依赖打到jar包中&#xff0c;hadoop和…

Vuex与Vuex-Class的底层原理简单实现

vuex-class是在class-component中使用vuex的辅助工具。 学习任何技术栈的使用&#xff0c;最透彻的掌握方法就是去简单实现一下&#xff0c;下面先简单实现一下vuex&#xff0c;然后基于我们自己实现的vuex再去实现一个vuex-class&#xff0c;彻底搞定vuex-class的使用。 首先…

更改数据库名称时 存储过程的数据库名称如何改变

在 SQL Server 中&#xff0c;当你更改数据库名称时&#xff0c;存储过程中的 USE [big_data] 语句不会自动更改。你需要手动更新所有引用旧数据库名称的存储过程。 若要修改存储过程中的数据库引用&#xff0c;可以按照以下步骤操作&#xff1a; 首先&#xff0c;使用 ALTER…

trino-435:dynamic catalog数据库存储代码实现

一、dynamic catalog数据库存储源码分析 dynamic catalog的实现主要涉及到两个类&#xff1a;CoordinatorDynamicCatalogManager、WorkerDynamicCatalogManager&#xff0c;这两个类的详细信息如下&#xff1a; 这两个类主要提供了对catalog的增删改查的方法。trino-435源码中…

​三子棋(c语言)

前言&#xff1a; 三子棋是一种民间传统游戏&#xff0c;又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏规则是双方对战&#xff0c;双方依次在9宫格棋盘上摆放棋子&#xff0c;率先将自己的三个棋子走成一条线就视为胜利。但因棋盘太小&#xff0c;三子棋在很多时候会出现和…