Freigeben über


Anwendungsmanifest

Das Anwendungsmanifest beschreibt die Ressourcen (auch Anwendungsfunktionen genannt), die eine Anwendung benötigt. Jede Anwendung verfügt über ein Anwendungsmanifest.

Anwendungen müssen die Verwendung von Funktionen abonnieren, indem sie jede erforderliche Ressource im Abschnitt Capabilities des Anwendungsmanifests auflisten. Standardmäßig sind keine Funktionen aktiviert. Wenn eine Anwendung eine Funktion anfordert, die nicht aufgeführt ist, schlägt die Anforderung fehl. Wenn die Anwendungsmanifestdatei Fehler enthält, schlagen Versuche des Querladens der Anwendung fehl. Jedes Anwendungsmanifest muss als „app_manifest.json“ im Stammverzeichnis des Anwendungsordners auf Ihrem PC gespeichert werden.

Die Azure Sphere-Vorlage erstellt automatisch ein Standardanwendungsmanifest, wenn Sie eine Anwendung erstellen. Sie müssen das Standardmanifest bearbeiten, um die Funktionen aufzulisten, die Ihre Anwendung benötigt. Jedes Azure Sphere-Beispiel enthält auch ein Anwendungsmanifest. Wenn Sie Ihre Anwendung auf der Grundlage eines Beispiels erstellen, müssen Sie wahrscheinlich auch das Manifest bearbeiten.

Verschiedene Azure Sphere-Geräte können Features des Chips auf unterschiedliche Weise bereitstellen. Folglich kann der Wert, den Sie im Manifest zum Identifizieren eines bestimmten Features verwenden (z.B. für einen GPIO-Pin), abhängig von der Hardware variieren, für die Sie entwickeln. Verwalten von Zielhardwareabhängigkeiten bietet weitere Informationen zu Hardwarezielen für eine allgemeine Anwendung. Verwenden Sie im Anwendungsmanifest für eine allgemeine Anwendung die Konstanten, die in der JSON-Datei im Ordner "HardwareDefinitions" des Installationsverzeichnisses des Microsoft Azure Sphere SDK definiert sind. Der genaue Speicherort des Installationsverzeichnisses unterscheidet sich unter Windows und Linux. Verwenden Sie in einer echtzeitfähigen Anwendung (RTApp) die Rohwerte, die unter Inhalt des Anwendungsmanifests aufgeführt werden.

Wenn eine beliebige Anwendung quergeladen oder auf dem Gerät bereitgestellt wird, liest die Azure Sphere Runtime das Anwendungsmanifest, um festzustellen, welche Funktionen die Anwendung verwenden darf. Versuche, auf Ressourcen zuzugreifen, die nicht im Manifest aufgeführt sind, führen zu API-Fehlern wie EPERM (Berechtigung verweigert). Eine Ressource kann nur von einer Anwendung auf dem Gerät verwendet werden. Wenn Sie eine Anwendung installieren, die eine Ressource anfordert, die bereits verwendet wird, tritt beim Versuch ein Fehler auf.

Inhalt des Anwendungsmanifests

Das Anwendungsmanifest umfasst die folgenden Elemente:

Name Beschreibung
SchemaVersion Die Version des Anwendungsmanifestschemas, die verwendet wird. Muss zurzeit 1 sein. Erforderlich.
Name Der Name der Anwendung Bei der Projekterstellung wird dieser Wert auf den Namen des Projekts festgelegt. Der Name kann eine beliebige Länge sein, aber nur die ersten 31 Zeichen werden im Bildpaket gespeichert. damit wird der Name in Anfragen zum Bildpaket abgeschnitten. Erforderlich.
ComponentId Die ID der Komponente. Visual Studio erstellt diese ID, wenn Sie die Anwendung erstellen. Wenn Sie Visual Studio nicht verwenden, finden Sie informationen zum Erstellen der ID unter Generieren einer Komponenten-ID . Erforderlich.
EntryPoint Der Name der ausführbaren Datei zusammen mit dem relativen Pfad im Dateisystemimage der Anwendung, der beim Erstellen der Anwendung erstellt wird. Visual Studio verwendet zurzeit „/bin/app“ für diesen Wert. Erforderlich.
CmdArgs Argumente, die beim Start an die Anwendung übergeben werden sollen. Schließen Sie jedes Argument in doppelte Anführungszeichen ein, und trennen Sie Argumente durch ein Komma. Optional.
TargetBetaApis Gibt an, dass die Anwendung Beta-APIs erfordert, und identifiziert die verwendeten Beta-APIs. Dieses Feld wird während des Buildprozesses automatisch hinzugefügt, sofern die Anwendung mit Beta-APIs erstellt wird. Optional. Ausführliche Informationen finden Sie unter Use beta features (Verwenden von Funktionen der Betaversion).
ApplicationType Der Typ der Anwendung. Optional. Legen Sie diese Angabe nur dann auf „Debugger“ fest, wenn Sie einen Ersatz für gdbserver erstellen.
Capabilities Eine Liste der Schlüssel-Wert-Paare, die Anwendungsressourcenanforderungen angeben. Erforderlich.
MallocVersion Eine ganze Zahl, die die Version von malloc angibt, wobei 1=Standard und 2=mallocng, eine verbesserte Malloc verfügbar in MUSL-Versionen größer als 1.2.1. Version 2 wird für alle neuen App-Entwicklung empfohlen.

Der Abschnitt Capabilities unterstützt Folgendes:

Hinweis

Anwendungen auf hoher Ebene können Funktionswerte aus Hardware-Definitionsdateien verwenden, oder sie können Rohwerte verwenden. Sie können jedoch nicht beide Werttypen in derselben Funktion kombinieren. RTApps können nur Rohwerte für Funktionen verwenden.

Name Beschreibung
Adc Der analog-zu-digitale Konvertierungscontroller (ADC), der von der Anwendung verwendet wird. Diese Funktion reserviert den gesamten ADC-Controller (enthält einen Block mit 8 Pins), nicht nur Pin 0 im Block.
Geben Sie in einer allgemeinen Anwendung den Peripherienamen an, der in der Hardwaredefinitions-Headerdatei deklariert ist.
Geben Sie für eine RTApp den AppManifestValue an, der in der JSON-Hardwaredefinitionsdatei deklariert ist.
Beispiel für Hardwaredefinition: "Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
Beispiel für Rohwert: "Adc": [ "ADC-CONTROLLER-0" ]
API-Referenz: Applibs adc.h
Konzeptual: Verwenden von ADCs in Azure Sphere
AllowedApplicationConnections Eine Liste der Anwendungskomponenten-IDs, mit denen die Anwendung eine Verbindung herstellen darf.
Beispiel: "AllowedApplicationConnections": [ "005180BC-402F-4CB3-A662-72937DBCDE47" ]
API-Referenz: Applibs application.h
Konzeptionell: Kommunikation mit einer allgemeinen Anwendung
AllowedConnections Eine Liste der DNS-Hostnamen oder IP-Adressen (IPv4), mit denen die Anwendung eine Verbindung herstellen darf. Wenn die Anwendung einen Azure IoT Hub verwendet, muss die Liste die IP-Adresse oder den DNS-Hostnamen für den Hub enthalten. In der Regel ist dies hub-name.azure-devices.net. Portnummern und Platzhalterzeichen in Namen und IP-Adressen sind nicht zulässig.
Beispiel: "AllowedConnections" : [ "my-hub.example.net", "global.azure-devices-provisioning.net" ]
AllowedTcpServerPorts Eine Liste mit den Ports, die eingehenden TCP-Datenverkehr zulassen. Sie können bis zu zehn Ports angeben, und jeder Port muss einzeln aufgeführt sein. Die unterstützten Ports sind 1024 bis 65535. Sie können die gleichen Ports für TCP und UDP angeben. Wenn Sie jedoch den gleichen Port für mehrere Apps auf dem Gerät angeben, tritt beim Laden der zweiten auszuführenden App ein Fehler auf.
Beispiel: "AllowedTcpServerPorts": [ 1024, 65535 ]
AllowedUdpServerPorts Eine Liste mit den Ports, die eingehenden UDP-Datenverkehr zulassen. Sie können bis zu zehn Ports angeben, und jeder Port muss einzeln aufgeführt sein. Die unterstützten Ports sind 1024 bis 65535. Sie können die gleichen Ports für TCP und UDP angeben. Wenn Sie jedoch den gleichen Port für mehrere Apps auf dem Gerät angeben, tritt beim Laden der zweiten auszuführenden App ein Fehler auf.
Beispiel: "AllowedUdpServerPorts": [ 1024, 50000 ]
CertStore Ein boolescher Wert, der angibt, ob eine app auf hoher Ebene über die Berechtigung zum Verwalten von Zertifikaten mit der CertStore-API verfügt: true, um die API zu aktivieren; andernfalls "false".
Beispiel: "CertStore" : true
DeviceAuthentication Eine Zeichenfolge, die die UUID des Azure Sphere-Mandanten für die Geräteauthentifizierung angibt.
Beispiel: "DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0"
DhcpService Ein Boolescher Wert, der angibt, ob die Anwendung über die Berechtigung zum Konfigurieren des DHCP-Diensts verfügt: true, wenn die Anwendung über die Funktion verfügt; andernfalls "false".
Beispiel: "DhcpService" : true
API-Referenz: Applibs networking.h
Konzeptuell: Verwenden von Netzwerkdiensten
EnterpriseWifiConfig Ein boolescher Wert, der angibt, ob eine anwendung auf hoher Ebene über die Berechtigung zum Erstellen eines EAP-TLS-Netzwerks verfügt und zertifikate damit verknüpft: "true", wenn die Anwendung über die Funktion verfügt; andernfalls "false".
Beispiel: "EnterpriseWifiConfig" : true
ExternalInterrupt Eine Liste der externen Unterbrechungen, die von einer RTApp verwendet werden. Diese Funktion ist für allgemeine Anwendungen nicht verfügbar.
Beispiel: "ExternalInterrupt": [ "EINT4", "EINT12" ]
Gpio Eine Liste der GPIOs, die von der Anwendung verwendet werden.
Geben Sie in einer allgemeinen Anwendung den GPIO-Namen an, der in der Hardwaredefinitions-Headerdatei deklariert ist, z.B. $MT3620_RDB_LED1_RED.
Geben Sie in einet RTApp die Integerwerte an, die den GPIO-Nummern in der Hardwaredefinitions-JSON-Datei entsprechen. Beispielsweise gibt 8 GPIO 8 an.
Beispiel für Hardwaredefinition: "Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]
Beispiel für Rohwert: "Gpio": [ 8, 12 ]
API-Referenz: Applibs gpio.h
Konzept: Verwenden von GPIOs in Azure Sphere
HardwareAddressConfig Ein Boolescher Wert, der angibt, ob die Anwendung über die Berechtigung zum Konfigurieren der Hardwareadresse der Netzwerkschnittstelle verfügt: true, wenn die Anwendung über die Funktion verfügt; andernfalls "false".
Beispiel:"HardwareAddressConfig" : true
API-Referenz: Applibs networking.h
Konzeptuell: Verwenden von Netzwerkdiensten
HeapMemStats Ein boolescher Wert, der angibt, ob die Speicherzuweisungsnachverfolgung im Heap aktiviert ist: true, wenn die Anwendung über die Funktion verfügt; andernfalls "false".
Beispiel: "HeapMemStats": true
Konzept:Speicherverwendung in anwendungen auf hoher Ebene
I2cMaster Eine Liste mit I2C-Masterschnittstellen, die von der Anwendung verwendet werden.
Geben Sie in einer allgemeinen Anwendung den Peripherienamen an, der in der Hardwaredefinitions-Headerdatei deklariert ist.
Geben Sie für eine RTApp den AppManifestValue an, der in der Hardwaredefinitions-JSON-Datei deklariert ist.
Beispiel für Hardwaredefinition: "I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ]
Beispiel für Rohwert: "I2cMaster": [ "ISU0", "ISU1" ]
API-Referenz: Applibs i2c.h
Konzeptuell: Verwenden von I2C mit Azure Sphere
I2sSubordinate Die von einer RTApp verwendete untergeordnete I2S-Schnittstelle (Inter-IC Sound). Diese Funktion ist für allgemeine Anwendungen nicht verfügbar. Rohwertbeispiel: "I2sSubordinate": [ "I2S0", "I2S1" ]
MutableStorage Veränderbare Speichereinstellungen, die der Anwendung die Verwendung von beständigem Speicher ermöglichen.
Beispiel: "MutableStorage" : { "SizeKB": 64, }
API-Referenz: Applibs storage.h
Konzeptuell: Verwenden von Speicher in Azure Sphere
NetworkConfig Ein boolescher Wert, der angibt, ob die Anwendung über die Berechtigung zum Konfigurieren einer Netzwerkschnittstelle verfügt: true, wenn die Anwendung über die Funktion verfügt; andernfalls "false".
Beispiel: "NetworkConfig" : true
API-Referenz: Applibs networking.h
Konzeptuell: Verwenden von Netzwerkdiensten
PowerControls Ein Array mit Zeichenfolgen, die für Funktionen stehen, mit denen der Betriebszustand des Geräts gesteuert werden kann. „ForcePowerDown“ und „ForceReboot“ sind die einzigen unterstützten Werte.
Warnung: Da ForcePowerDown und ForceReboot es einer Anwendung ermöglichen, alle Anwendungen sofort zu beenden, müssen Sie sicherstellen, dass Ihr Gerät weiterhin Betriebssystem- und Anwendungsupdates empfangen kann. Weitere Informationen und Anleitungen finden Sie unter Erzwingen des Energiesparzustands und von Updates.
Beispiel: "PowerControls": ["ForcePowerDown", "ForceReboot"]
API-Referenz: Applibs powermanagement.h
Konzept: Verwalten des Energiesparzustands für Azure Sphere-Geräte
Pwm Der Pulse-Width-Modulator (PWM), der von der Anwendung verwendet wird.
Geben Sie in einer allgemeinen Anwendung den Peripherienamen an, der in der Hardwaredefinitions-Headerdatei deklariert ist.
Geben Sie für eine RTApp den AppManifestValue an, der in der Hardwaredefinitions-JSON-Datei deklariert ist.
Beispiel für Hardwaredefinition: "Pwm": [ "$MT3620_RDB_LED_PWM_CONTROLLER2" ]
Beispiel für Rohwert: "Pwm": [ "PWM-CONTROLLER-0" ]
API-Referenz: Applibs pwm.h
Konzept: Verwenden von PWMs in high-level-Anwendungen
ReadNetworkProxyConfig Ein boolescher Wert, der angibt, ob die Anwendung über die Berechtigung zum Abrufen der Proxykonfiguration verfügt: true, wenn die Anwendung über die Funktion verfügt; andernfalls "false".
Beispiel: "ReadNetworkProxyConfig": true
API-Referenz: Applibs networking.h
Konzeptionell: Herstellen einer Verbindung mit Webdiensten
SntpService Ein Boolescher Wert, der angibt, ob die Anwendung über die Berechtigung zum Konfigurieren des SNTP-Diensts verfügt: true, wenn die Anwendung über die Funktion verfügt; andernfalls "false".
Beispiel: "SntpService" : true
API-Referenz: Applibs networking.h
Konzeptuell: SNTP-Server
SoftwareUpdateDeferral Ein Boolescher Wert, der angibt, ob die Anwendung über die Berechtigung zum Zurückstellen von Softwareupdates für einen begrenzten Zeitraum verfügt: "true", wenn die Anwendung über die Funktion verfügt; andernfalls "false".
Beispiel: "SoftwareUpdateDeferral" : true
API-Referenz: Applibs eventloop.h
Konzept: Zurückstellen von Geräteupdates
SpiMaster Eine Liste mit SPI-Masterschnittstellen, die von der Anwendung verwendet werden.
Geben Sie in einer allgemeinen Anwendung den Peripherienamen an, der in der Hardwaredefinitions-Headerdatei deklariert ist.
Geben Sie für eine RTApp den AppManifestValue an, der in der Hardwaredefinitions-JSON-Datei deklariert ist.
Beispiel für Hardwaredefinition: "SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ]
Beispiel für Rohwert: "SpiMaster": [ "ISU0", "ISU1" ]
API-Referenz: Applibs spi.h
Konzept: Verwenden von SPI mit Azure Sphere
SystemEventNotifications Ein boolescher Wert, der angibt, ob die Anwendung über die Berechtigung zum Empfangen von Systemereignisbenachrichtigungen verfügt: true, wenn die Anwendung über die Funktion verfügt; andernfalls "false".
Beispiel: "SystemEventNotifications" : true
API-Referenz: Applibs sysevent.h
Konzept: Zurückstellen von Geräteupdates
SystemTime Ein Boolescher Wert, der angibt, ob die Anwendung über die Berechtigung zum Konfigurieren der Systemzeit verfügt: true, wenn die Anwendung über die Funktion verfügt; andernfalls "false".
Beispiel: "SystemTime" : true
API-Referenz: Applibs rtc.h
Konzept: Verwalten der Systemzeit und des RTC in Azure Sphere
TimeSyncConfig Ein boolescher Wert, der angibt, ob die Anwendung über die Berechtigung zum Konfigurieren des Zeitsynchronisierungsdiensts verfügt: true, wenn die Anwendung über die Funktion verfügt; andernfalls "false".
Beispiel: "TimeSyncConfig" : true
Uart Eine Liste der UART-Peripheriegeräte, die die Anwendung verwendet. Diese Funktion aktiviert den dedizierten UART nicht auf einem MT3620-Entwicklungsboard. Informationen zum dedizierten UART finden Sie unter Erstellen einer Echtzeit-fähigen Anwendung.
Geben Sie in einer allgemeinen Anwendung den Peripherienamen an, der in der Hardwaredefinitions-Headerdatei deklariert ist.
Geben Sie für eine RTApp den AppManifestValue an, der in der Hardwaredefinitions-JSON-Datei deklariert ist.
Beispiel für Hardwaredefinition: "Uart": [ "$MT3620_RDB_HEADER2_ISU0_UART", "$MT3620_RDB_HEADER4_ISU1_UART" ]
Beispiel für Rohwert: "Uart": [ "ISU0", "ISU1" ]
API-Referenz: Applibs uart.h
Konzeptuell: Verwenden von UART in Azure Sphere
WifiConfig Ein Boolescher Wert, der angibt, ob die Anwendung über die Berechtigung zum Verwenden der WifiConfig-API verfügt, um die WLAN-Konfiguration zu ändern: true, wenn die Anwendung über die Funktion verfügt; andernfalls "false".
Beispiel: "WifiConfig" : true
API-Referenz: Applibs wificonfig.h
Konzept: Konfigurieren von Netzwerken

Der Abschnitt MutableStorage unterstützt Folgendes:

Name Beschreibung
SizeKB Ein Integerwert, mit dem die Größe des veränderlichen Speichers in Kibibyte (KiB) angegeben wird. Der Maximalwert ist 64. Ein Wert von 0 entspricht der Nichtverwendung der veränderlichen Speicherfunktion.

Beispiel

Das folgende Beispiel zeigt eine app_manifest.json-Beispieldatei für eine allgemeine Anwendung, die die MT3620 RDB-Hardware als Ziel verwendet:

{
    "SchemaVersion": 1,
    "Name": "MyTestApp",
    "ComponentId": "072c9364-61d4-4303-86e0-b0f883c7ada2",
    "EntryPoint": "/bin/app",
    "CmdArgs": ["-m", "262144", "-t", "1"],
    "Capabilities": {
        "AllowedConnections" : [
            "my-hub.example.net",
            "contoso.azure-devices.net",
            "global.azure-devices-provisioning.net" ],
        "AllowedTcpServerPorts": [ 1024, 65535 ],
        "AllowedUdpServerPorts": [ 1024, 50000 ],
        "DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0",
        "Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ],
        "HardwareAddressConfig": true,
        "I2cMaster": [ "ISU2" ],
        "MutableStorage" : {
            "SizeKB": 64,
        },
        "SpiMaster": [ "ISU1" ],
        "SystemTime" : true,
        "Uart": [ "ISU0" ],
        "WifiConfig" : true
    },
    "ApplicationType": "Default",
    "MallocVersion": 2
}

Die Beispieldatei „app_manifest.json“ für „MyTestApp“ führt folgende Aktionen aus:

  • Sie übergibt vier Befehlszeilenargumente an die App.
  • Sie lässt nur Verbindungen mit den DNS-Hosts „my-hub.example.net“, „contoso.azure-devices.net“ und „global.azure-devices-provisioning.net“ zu.
  • Ermöglicht eingehenden TCP-Datenverkehr an den Ports 1024 und 65535.
  • Ermöglicht eingehenden UDP-Datenverkehr an den Ports 1024 und 50000.
  • Sie gibt einen Azure Sphere-Mandanten für die Geräteauthentifizierung und zum Zulassen von Verbindungen mit dem Gerätebereitstellungsdienst an.
  • Gibt die Verwendung von drei GPIOs an.
  • Ermöglicht der Anwendung, die Hardwareadresse der Netzwerkschnittstelle zu konfigurieren.
  • Gibt die Verwendung von einem UART-Peripheriegerät an.
  • Ermöglicht die veränderbare Speicherung mit 64 Kibibyte Speicherplatz.
  • Sie ermöglicht es der App, die WifiConfig-API zum Ändern der WLAN-Konfiguration zu verwenden.
  • Gibt die Verwendung von einer SPI-Masterschnittstelle an.
  • Gibt die Verwendung von einer I2C-Masterschnittstelle an.
  • Ermöglicht der App, die Systemzeit mithilfe der RTC-API zu konfigurieren.
  • Ermöglicht mallocng für die App-Entwicklung.