Guide to CMSIS-Packs in Arm-Keil-MDK

Teil 2: Grundlagen zur Erstellung eigener CMSIS-Packs

17. Februar 2026, 12:53 Uhr | Colin Funnell, Senior Development Engineer bei Hitex / ak
© 02/stock.adobe.com

CMSIS-Packs sind ein zentraler Bestandteil der Arm Keil MDK Toolchain. Doch wie lassen sie sich erstellen, und welche Arbeitsschritte sind dafür notwendig?

Diesen Artikel anhören

CMSIS-Packs ermöglichen es Entwicklern, standardisierte Codebausteine und Ressourcen strukturiert und effizient in Projekte einzubinden. Die Anwendungsmöglichkeiten reichen von Low-Level Startcode in Device Family Packs über Board Support Packages bis hin zu komplexen Protokollen und Services.

Die CMSIS-Landschaft kann wegen der Vielzahl an Details, der rasanten Weiterentwicklung und der Automatisierungsoptionen innerhalb der Toolsets verwirrend erscheinen. Dieser Leitfaden soll Anwendern helfen, sich auf das Wesentliche zu konzentrieren, und ihnen einen möglichst einfachen Einstieg in CMSIS-Packs zu ermöglichen – für eine effizientere und produktivere Entwicklung.

Der Beitrag beschreibt die grundlegenden Schritte zur Erstellung eines eigenen CMSIS-Packs. Obwohl hier nur die wichtigsten Grundlagen vorgestellt werden, bieten diese Informationen eine solide Basis, um ein erstes CMSIS-Pack zu erstellen. Alles, was darauf folgt, ist Verfeinerung.

Dies ist der zweite Teil der dreiteiligen Artikelreihe. Teil 1 (in Elektronik 1/2026) enthält die Hintergrundinformationen zu CMSIS-Packs, und Teil 3 wird praktische Hinweise zum Erstellen eines eigenen CMSIS-Workflows umfassen.

Was wird benötigt, um ein CMSIS-Pack zu erstellen?

Die Erstellung eines CMSIS-Packs erfordert spezifische Tools, die im gen-pack-Repository des Open-CMSIS-Pack-Projekts verfügbar sind. Das Repository lässt sich wie andere GitHub-Projekte entweder über die Kommandozeile oder über Tools wie »Git GUI« klonen [1]. Es wird empfohlen, ein Tagged Release herunterzuladen, weil Versionsangaben später von Bedeutung sind.

Zusammen mit dem Quellcode finden Anwender im Repository auch eine README.md-Datei, die alle wichtigen Informationen zu den notwendigen Voraussetzungen für die Nutzung von gen-pack enthält. Die gen-pack-Skripte beruhen auf Linux-Shell-Skripten. Für Windows-Nutzer könnte dies eine kleine Umstellung bedeuten, weil Plattformkonfigurationen wie Umgebungsvariablen und Dateiberechtigungen häufig die größten Hürden für Einsteiger sind.

Erstellung der Pack-Beschreibungsdatei

Bild 1: Anbieter- und Versions-Informationen sind ein wichtiger Teil der .pdsc-Datei.
Bild 1: Anbieter- und Versions-Informationen sind ein wichtiger Teil der .pdsc-Datei.
© Hitex GmbH

Die Pack-Beschreibungsdatei (.pdsc) ist das Herzstück des CMSIS-Pack-Systems. Sie wird sowohl von Pack-Generierungswerkzeugen als auch von Entwicklungsumgebungen genutzt, um die Bereitstellung und Nutzung der enthaltenen Ressourcen zu steuern.

Es ist fast unmöglich, alle Optionen und Möglichkeiten einer .pdsc-Datei in einem kurzen Artikel abzudecken. Ein guter Einstieg ist jedoch, sich mit den .pdsc-Dateien bekannter CMSIS-Packs zu beschäftigen. Diese lassen sich unter dem Speicherort finden, der in der Umgebungsvariable CMSIS_PACK_ROOT angegeben ist. Dort sind die entpackten Packs einsehbar, einschließlich ihrer .pdsc-Dateien.

Alternativ können Anwender Beispiele aus dem Open-CMSIS-Pack-Projekt untersuchen, wie beispielsweise: ACME.ACME_Middleware.pdsc im GSP-Pack-HandsOn-Repository [2].

Bild 2: Die Komponentenbeschreibung als Teil der .pdsc-Datei.
Bild 2: Die Komponentenbeschreibung als Teil der .pdsc-Datei.
© Hitex GmbH

Die .pdsc-Datei (Bild 1 und Bild 2) lässt sich in folgende Hauptbereiche unterteilen [3]:

• Lieferant/Dienstanbieter
• Versionsinformationen
• Komponentenbeschreibung innerhalb eines <components>-Blocks

Ein einfaches <components>-Beispiel könnte wie folgt aussehen:

<component     Cclass="Utility" Cgroup="ThingReuse"
            Csub="MyUsefulCode"
            Cversion="0.1.0">
  <description>Brief descr. shown in RTE manager</description>
  <files>
    <file category="doc"    name="./Docs/MyHelpDoc.pdf"/>

    <file category="header" name="./Source/myProj_config.h" attr="config" version="0.1.0"/>
    
    <file category="source" name="./Source/myProj.c"/>
    <file category="header" name="./Source/myProj.h"/>
  </files>
</component>

In diesem Beispiel beschreibt der <component>-Block, wo der neue Code innerhalb der CMSIS-Pack-Struktur einzuordnen ist. Die Cclass-Gruppen, die für alle Entwickler verbindlich definiert sind, sorgen dafür, dass sich Packs nicht gegenseitig überlagern oder in der CMSIS-Pack-Ecosystem-Hierarchie verloren gehen.

Nützlich ist die Möglichkeit, Dokumentationen direkt zu integrieren. Dateien mit der Kategorie »doc« können von der IDE erkannt und als Hilfe für Entwickler verlinkt werden. Dies verbessert die Benutzerfreundlichkeit und erleichtert die Arbeit mit dem Pack.

Letztlich werden die Source-Dateien referenziert. Von einer einfachen Auflistung - diese Dateien verbleiben im Pack, bis hin zur Nutzung des »config«-Attibuts - diese Dateien werden dann ins Projekt kopiert, um lokale Einstellungen zu ermöglichen, lassen sich individuelle Versionen verwalten.

Weitere Erweiterungen wie Projektvorlagen, Code-Beispiele und Bedingungen für Abhängigkeiten können in der .pdsc-Datei definiert werden. Diese Features fördern die Wiederverwendung von Code und verbessern die Entwicklererfahrung weit über das einfache Bereitstellen von Quellcode hinaus.

Prüfen der Pack-Beschreibungsdatei

Das Erstellen der .pdsc-Datei ist einer der anspruchsvollsten Schritte bei der Erstellung eines CMSIS-Packs. Es gilt sicherzustellen, dass die Datei korrekt und ohne XML-Fehler formatiert ist. Hierfür steht das Tool »packchk« zur Verfügung.

Das »packchk«-Tool war früher Bestandteil von CMSIS Core (<Version 6.0.0), gehört inzwischen jedoch zur CMSIS Toolbox. Es wird empfohlen, diese neuere Version zu nutzen, weil sie die Zukunft darstellt.

Wenn Sie die älteren MDK-5/µVision-Tools verwenden, können Sie dennoch die neueste Version von »packchk« aus dem Arm Tools Artifactory beziehen. Die einfachste Methode besteht darin, die pre-built-Dateien direkt von der folgenden Adresse herunterzuladen:

https://artifacts.tools.arm.com/cmsis-toolbox/

Bitte beachten Sie, dass es einen feinen Unterschied zwischen den Dateinamen arm64 und amd64 für Plattformen gibt. Die Dateien im Ordner /bin müssen in Ihrer Umgebungsvariable PATH hinzugefügt werden.

Für MDK-6-Benutzer ist die Nutzung von »packchk« besonders einfach, weil CMSIS Toolbox und andere Subtools automatisch in die Entwicklungsumgebung integriert sind. Die Syntax für den Befehl lautet:

packchk  <filename.pdsc>

Hierbei ist es wichtig, dass der Dateiname dem Format <Vendor>.<Package name>.pdsc entspricht. »Packchk« hilft dabei, grundlegende Fehler frühzeitig zu erkennen. Sobald die .pdsc-Datei brauchbar ist, können Anwender einen Pack Manager (wie in Keil µVision) oder den Befehl cpackget (CMSIS Toolbox Befehl) verwenden, um ein Pack in die IDE zu bringen, bevor das endgültige Pack erstellt wird.

Anpassung des gen-pack-Skripts

Innerhalb des gen-pack-Quellcode-Repositories befinden sich zwei ähnlich benannte Skripte: gen-pack und gen_pack. Letzteres befindet sich im Ordner »template« und ist zur Anpassung gedacht. Anwender können das Skript in ihr Projektverzeichnis kopieren und dort entsprechend modifizieren.

Der zentrale Bereich, der angepasst werden muss, ist:

REQUIRED_GEN_PACK_LIB="<pin lib version here>"

Die hier angegebene Bibliotheksversion sollte mit der Version von GEN_PACK_LIB_VERSION übereinstimmen. Weitere Anpassungen sind möglich, aber dies ist das absolute Minimum.

Erstellung des finalen CMSIS-Packs

Sobald alle Quell- und Beschreibungsdateien fertiggestellt sind, lässt sich das CMSIS-Pack generieren. Dies erfolgt durch Aufruf des Skripts gen_pack.sh, wobei Umgebungsvariablen auf die heruntergeladenen gen-pack-Komponenten zeigen müssen.

Ein Beispiel für ein einfaches Startskript:

export GEN_PACK_LIB_PATH="../lib0_11_1"
export LANG=$(locale -s -U)
source ./gen_pack.sh

Tipp: Ein GitBash-Shell-Fenster wird möglicherweise geschlossen, wenn bei der Ausführung von gen_pack.sh ein schwerwiegender Fehler auftritt. Wenn Sie es ohne den Befehl »source« starten, können Sie das aufgetretene Problem vor dem Schließen sehen.

gen_pack zeigt, ähnlich wie packchk, alle Warnungen und Fehler während des Prozesses an. Wenn es erlaubt ist, erzeugt es die .pack-Datei im Unterordner \output. Die Packdateien haben das bekannte Format <Vendor><Component Name><Pack version>.pack.

Und nun ist das eigene CMSIS-Pack fertig.

Zusammenfassung

Die Tools zur Erstellung eigener CMSIS-Packs sind heutzutage einfacher zugänglich als je zuvor. Zwar erfordern die Einrichtung und Anpassung initial etwas Aufwand, aber die langfristigen Vorteile sind klar: Eine strukturierte Wiederverwendbarkeit und bessere Skalierbarkeit der Software. Nachdem Anwender ihr erstes CMSIS-Pack erstellt haben, steht ihnen nichts mehr im Weg, größere und komplexere Packs zu entwickeln.

Der Autor

Colin Funnell, Senior Development Engineer bei Hitex
Colin Funnell, Senior Development Engineer bei Hitex
© Colin Funnell

Colin Funnell, Absolvent der Coventry University, begann seine Karriere in der Telekommunikationsbranche und war an der Entwicklung von Hochgeschwindigkeitsprodukten mit elektrischen, optischen und photonischen Technologien beteiligt. Für seine Leistungen erhielt er den Preis »Outstanding Contribution to Optical Networks«. Seit 15 Jahren arbeitet er bei Hitex, wo er Schaltungen entwickelt und Software schreibt, mit einem Fokus auf Arm-Systeme und deren praktische Anwendungen. Hitex ist offizieller Distributor von Arm in Deutschland und den Niederlanden und seit über 35 Jahren Partner für Arm/Keil-Technologie, Beratung, Schulungen und Arm-Entwicklungswerkzeuge sowie bewährte, einsatzbereite Software-Komponenten.

Übersetzt aus dem Englischen von Anna Brotzer, Senior Marketing Manager bei Hitex.

Hitex auf der embedded world 2026: Halle 4, Stand 205

Nützliche Links:
https://open-cmsis-pack.github.io/landing/
https://github.com/Open-CMSIS-Pack/gen-pack
https://open-cmsis-pack.github.io/Open-CMSIS-Pack-Spec/main/html/index.html
https://open-cmsis-pack.github.io/cmsis-toolbox/
https://github.com/Open-CMSIS-Pack/GSP-Pack-HandsOn

Anmerkungen:
[1] gen-pack-Repository: https://github.com/Open-CMSIS-Pack/gen-pack
[2] Beispiel aus dem Open-CMSIS-Pack-Projekt: https://github.com/Open-CMSIS-Pack/GSP-Pack-HandsOn/blob/main/ACME.ACME_Middleware.pdsc
[3] Weitere Informationen sind in den Open-CMSIS-Pack-Beschreibungsdateien zu finden: https://open-cmsis-pack.github.io/Open-CMSIS-Pack-Spec/main/html/packFormat.html. Hier werden die XML-Elemente noch ausführlicher beschrieben. Dieser Leitfaden ist für jede komplexe Pack-Produktion unerlässlich.
 


Lesen Sie mehr zum Thema


Jetzt kostenfreie Newsletter bestellen!

Weitere Artikel zu Hitex GmbH

Weitere Artikel zu Software/Entwicklung

Weitere Artikel zu Entwicklungswerkzeuge

Weitere Artikel zu Embedded