Der Prüfling
- Projekt
- Oszilloskop auf STM32F429I-Discovery, STM32CubeIDE
- Chip
- STM32F429ZI, Cortex-M4
- Datei
- STM32F429I-Oscilloscope.elf, Debug-Build, GCC
- SHA-256
- 2dd3e8b51a97df591055ed0e5211ab977e1f0cf39e3874ff5423268f7901e419
Woraus ein STM32-Projekt besteht
Ein Projekt aus STM32CubeMX oder STM32CubeIDE übernimmt Code aus dem STM32Cube-Paket der Chipfamilie: den HAL-Treiber, die CMSIS-Dateien des Chips, Board-Treiber und Middlewares. Unter Middlewares/Third_Party liegen dort Bibliotheken anderer Hersteller, in STM32CubeF4 etwa FreeRTOS, mbedTLS und LwIP. Was davon im Gerät landet, entscheidet der Linker.
Für die SBOM brauchen Sie deshalb zwei Antworten: welche Version des Pakets das Projekt verwendet, und welche Bibliotheken daraus im Build stecken.
| Bestandteil | Wo die Version steht |
|---|---|
| Cube-Paket | Projektdatei .ioc, Zeile ProjectManager.FirmwarePackage |
| HAL-Treiber | stm32f4xx_hal.c, Makro __STM32F4xx_HAL_VERSION |
| FreeRTOS | task.h, Makro tskKERNEL_VERSION_NUMBER |
| mbedTLS | mbedtls/version.h, MBEDTLS_VERSION_STRING |
| LwIP | lwip/init.h, LWIP_VERSION_MAJOR bis _REVISION |
| Compiler | Abschnitt .comment im ELF |
Schritt 1: die Paketversion aus der .ioc
Die Projektdatei von STM32CubeMX nennt Chip und Paketversion. Mit der Paketversion wissen Sie, welche Middleware-Versionen ST mitgeliefert hat.
grep -E "FirmwarePackage=|DeviceId=" Discovery_Oscilloscope.iocProjectManager.CustomerFirmwarePackage= ProjectManager.DeviceId=STM32F429ZITx ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.26.2
Schritt 2: die Middleware-Versionen aus dem Paket
Die Versionen der mitgelieferten Bibliotheken stehen in ihren Headern. Hier am aktuellen Release STM32CubeF4 v1.28.3, im Verzeichnis des Pakets ausgeführt.
ls Middlewares/Third_PartyFatFs FreeRTOS LibJPEG LwIP mbedTLS
grep -h -m1 -E "tskKERNEL_VERSION_NUMBER|MBEDTLS_VERSION_STRING |FatFs - |JVERSION" Middlewares/Third_Party/FreeRTOS/Source/include/task.h Middlewares/Third_Party/mbedTLS/include/mbedtls/version.h Middlewares/Third_Party/FatFs/src/ff.h Middlewares/Third_Party/LibJPEG/include/jversion.h#define tskKERNEL_VERSION_NUMBER "V10.3.1" #define MBEDTLS_VERSION_STRING "2.16.2" / FatFs - Generic FAT file system module R0.12c / #define JVERSION "8d 15-Jan-2012"
jq -r ".components[].name" sbom_cdx.json | grep -ciE "freertos|lwip|mbedtls|fatfs|libjpeg"0
Schritt 3: was der Build wirklich enthält
Die Symboltabelle des ELF zeigt, welche Bibliotheken gelinkt sind. Im Prüfling stehen HAL, der CMSIS-RTOS2-Aufsatz und der FreeRTOS-Kernel. Eine Bibliothek aus dem Paket, die im ELF keine Funktion hinterlässt, gehört nicht in die SBOM dieses Geräts.
Die FreeRTOS-Version steht hier im ELF selbst, weil der Debug-Build von STM32CubeIDE die Makros des Quellcodes in den Abschnitt .debug_macro schreibt. Ein Release-Build ohne Debug-Informationen hat diese Zeile nicht mehr. Dann nehmen Sie die Version aus Schritt 2.
nm STM32F429I-Oscilloscope.elf | grep -E " T (HAL_Init|osKernelStart|vTaskStartScheduler|xTaskCreate)$"08004ee9 T HAL_Init 08007f31 T osKernelStart 0800964d T vTaskStartScheduler 080095f1 T xTaskCreate
strings -a STM32F429I-Oscilloscope.elf | grep "tskKERNEL_VERSION_NUMBER"RTOS_ID_s ("FreeRTOS " tskKERNEL_VERSION_NUMBER)
tskKERNEL_VERSION_NUMBER "V10.3.1"
KERNEL_ID ("FreeRTOS " tskKERNEL_VERSION_NUMBER)strings -a STM32F429I-Oscilloscope.elf | grep -m1 "GCC: "GCC: (GNU Tools for STM32 9-2020-q2-update.20201001-1621) 9.3.1 20200408 (release)
Was LegacyMind dabei automatisch macht
Builds für Mikrocontroller aus Keil MDK, IAR oder GNU Arm. Gefunden werden die eingebauten Bibliotheken mit Version, etwa CMSIS-Packs, RTX5, FreeRTOS, lwIP, mbedTLS und STM32Cube. Dazu Härtung (Stack-Canary, MPU, Privilegientrennung) und eingebettete Schlüssel.
Jede Komponente mit belegter Version wird gegen die Schwachstellenquellen abgeglichen. Belegt die Datei keine Version, bleibt das Feld leer. Die SBOM exportieren Sie als CycloneDX oder SPDX.
Die Konformitätsaussage treffen Sie. Diese Seite und unsere Berichte liefern technische Feststellungen als Grundlage dafür.
Häufige Fragen
01Reicht die SBOM, die ST dem Cube-Paket beilegt?
Für Ihr Gerät nicht. Sie beschreibt das Paket, und in STM32CubeF4 v1.28.3 fehlen darin die fünf Bibliotheken unter Middlewares/Third_Party. Ihre SBOM nennt, was Ihr Build gelinkt hat, mit Version.
02Welche Datei aus STM32CubeIDE nehme ich?
Das .elf aus dem Build-Ordner, etwa Debug oder Release. Dazu die .ioc des Projekts, sie nennt die Paketversion.
03Gilt das auch für Keil und IAR?
Ja. Keil schreibt ein .axf, IAR ein .out, beides sind ELF-Dateien. Die Middlewares kommen aus demselben Cube-Paket.
04Gehört der HAL-Treiber in die SBOM?
Ja. Er ist Code eines Dritten, der im Gerät läuft. Der CRA verlangt in Anhang I Teil II, die Komponenten zu erfassen, mindestens die direkten Abhängigkeiten.