Anwendungsmanifest

Das Anwendungsmanifest beschreibt die Ressourcen, die auch als Anwendungsfunktionen bezeichnet werden, die eine Anwendung benötigt. Jede Anwendung verfügt über ein Anwendungsmanifest.

Anwendungen müssen sich für die Verwendung von Funktionen entscheiden, indem sie jede erforderliche Ressource im Abschnitt Funktionen 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, schlägt das Querladen der Anwendung fehl. Das Manifest jeder Anwendung 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 einem Beispiel basieren, müssen Sie wahrscheinlich auch das Manifest bearbeiten.

Verschiedene Azure Sphere-Geräte können Features des Chips auf unterschiedliche Weise verfügbar machen. Daher kann der Wert, den Sie im Manifest verwenden, um ein bestimmtes Feature zu identifizieren, z. B. 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 Microsoft Azure Sphere SDK-Installationsverzeichnisses definiert sind. Der genaue Speicherort des Installationsverzeichnisses unterscheidet sich unter Windows und Linux. Verwenden Sie in einer Echtzeitanwendung (RTApp) die rohen Werte, die unter Inhalt des Anwendungsmanifests aufgeführt sind.

Wenn eine 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). Nur eine Anwendung auf dem Gerät kann eine Ressource verwenden. Wenn Sie eine Anwendung installieren, die eine ressource anfordert, die bereits verwendet wird, schlägt der Versuch fehl.

Inhalt des Anwendungsmanifests

Das Anwendungsmanifest enthält die folgenden Elemente:

Namen Beschreibung
SchemaVersion Version des verwendeten Anwendungsmanifestschemas. Derzeit muss 1 sein. Erforderlich.
Namen Name der Anwendung. Bei der Projekterstellung wird dieser Wert auf den Namen des Projekts festgelegt. Der Name kann eine beliebige Länge haben, aber nur die ersten 31 Zeichen werden im Imagepaket gespeichert. Daher wird der Name in Anfragen zum Imagepaket abgeschnitten angezeigt. Erforderlich.
Componentid ID der Komponente. Visual Studio erstellt diese ID beim Erstellen der Anwendung. Wenn Sie Visual Studio nicht verwenden, finden Sie informationen zum Erstellen der ID unter Generieren einer Komponenten-ID . Erforderlich.
Entrypoint Name der ausführbaren Datei zusammen mit dem relativen Pfad im Dateisystemimage der Anwendung, der beim Erstellen der Anwendung erstellt wird. Visual Studio verwendet derzeit /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 und separate Argumente mit einem Komma ein. Optional.
TargetBetaApis Gibt an, dass die Anwendung Beta-APIs erfordert, und identifiziert den Satz der verwendeten Beta-APIs. Dieses Feld wird während des Buildprozesses automatisch hinzugefügt, wenn die Anwendung mithilfe von Beta-APIs erstellt wird. Optional. Weitere Informationen finden Sie unter Verwenden von Betafeatures .
ApplicationType Anwendungstyp. Optional. Legen Sie nur dann auf Debugger fest, wenn Sie einen Ersatz für gdbserver erstellen.
Funktionen 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, ein erweitertes Malloc, das in MUSL-Versionen größer als 1.2.1 verfügbar ist. Version 2 wird für alle neuen Apps empfohlen.

Der Abschnitt Funktionen unterstützt Folgendes:

Hinweis

Allgemeine Anwendungen können Funktionswerte aus Hardwaredefinitionsdateien verwenden oder Rohwerte verwenden. Sie können jedoch nicht beide Werttypen in derselben Funktion kombinieren. RTApps kann nur Unformatierte Werte für Funktionen verwenden.

Namen Beschreibung
Adc Der ADC-Controller (Analog-Digital Conversion), der von der Anwendung verwendet wird. Diese Funktion reserviert den gesamten ADC-Controller (der einen 8-pin-Block umfasst), nicht nur Pin 0 im Block.
Geben Sie in einer allgemeinen Anwendung den Peripheriegerätenamen an, der in der Hardwaredefinitionsheaderdatei deklariert ist.
Geben Sie in einer RTApp den AppManifestValue an, der in der JSON-Datei mit der Hardwaredefinition deklariert ist.
Hardwaredefinitionsbeispiel:"Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
Beispiel für unformatierte Werte:"Adc": [ "ADC-CONTROLLER-0" ]
API-Referenz:Applibs adc.h
Konzept: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:Kommunizieren 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 eine Azure IoT Hub verwendet, muss die Liste die IP-Adresse oder den DNS-Hostnamen für den Hub enthalten, in der Regel hub-name.azure-devices.net. Portnummern und Wildcardzeichen in Namen und IP-Adressen werden nicht akzeptiert.
Beispiel:"AllowedConnections" : [ "my-hub.example.net", "global.azure-devices-provisioning.net" ]
AllowedTcpServerPorts Eine Liste der Ports, die eingehenden TCP-Datenverkehr zulassen. Sie können bis zu 10 Ports einschließen, und jeder Port muss einzeln aufgelistet werden. Die unterstützten Ports sind 1024 bis 65535. Sie können die gleichen Ports für TCP und UDP angeben. Wenn Sie jedoch denselben Port für mehr als eine App auf dem Gerät angeben, kann die zweite auszuführende App nicht geladen werden.
Beispiel:"AllowedTcpServerPorts": [ 1024, 65535 ]
AllowedUdpServerPorts Eine Liste der Ports, die eingehenden UDP-Datenverkehr zulassen. Sie können bis zu 10 Ports einschließen, und jeder Port muss einzeln aufgelistet werden. Die unterstützten Ports sind 1024 bis 65535. Sie können die gleichen Ports für TCP und UDP angeben. Wenn Sie jedoch denselben Port für mehr als eine App auf dem Gerät angeben, kann die zweite auszuführende App nicht geladen werden.
Beispiel:"AllowedUdpServerPorts": [ 1024, 50000 ]
CertStore Ein boolescher Wert, der angibt, ob eine allgemeine App ü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 angibt, der für die Geräteauthentifizierung verwendet werden soll.
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 Entsprechende Funktion verfügt; andernfalls false.
Beispiel:"DhcpService" : true
API-Referenz:Applibs networking.h
Konzept:Verwenden von Netzwerkdiensten
EnterpriseWifiConfig Ein boolescher Wert, der angibt, ob eine allgemeine Anwendung über die Berechtigung zum Erstellen eines EAP-TLS-Netzwerks und zum Zuordnen von Zertifikaten verfügt: true, wenn die Anwendung über die entsprechende Funktion verfügt; andernfalls false.
Beispiel:"EnterpriseWifiConfig" : true
ExternalInterrupt Eine Liste der externen Interrupts, die von einer RTApp verwendet werden. Diese Funktion ist für allgemeine Anwendungen nicht verfügbar.
Beispiel:"ExternalInterrupt": [ "EINT4", "EINT12" ]
Gpio Eine Liste der von der Anwendung verwendeten GPIOs.
Geben Sie in einer allgemeinen Anwendung den GPIO-Namen an, der in der Hardwaredefinitionsheaderdatei deklariert wird, z. B. $MT 3620_RDB_LED1_RED.
Geben Sie in einer RTApp die ganzen Zahlen an, die den GPIO-Zahlen in der JSON-Datei mit der Hardwaredefinition entsprechen. Beispielsweise gibt 8 GPIO 8 an.
Hardwaredefinitionsbeispiel:"Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]
Beispiel für unformatierte Werte:"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 entsprechende Funktion verfügt; andernfalls false.
Beispiel:"HardwareAddressConfig" : true
API-Referenz:Applibs networking.h
Konzept:Verwenden von Netzwerkdiensten
HeapMemStats Ein boolescher Wert, der angibt, ob die Nachverfolgung der Heapspeicherbelegung aktiviert ist: true, wenn die Anwendung über die Entsprechende Funktion verfügt; andernfalls false.
Beispiel:"HeapMemStats": true
Konzeptionell:Speichernutzung in allgemeinen Anwendungen
I2cMaster Eine Liste der I2C-master Schnittstellen, die von der Anwendung verwendet werden.
Geben Sie in einer allgemeinen Anwendung den Peripheriegerätenamen an, der in der Hardwaredefinitionsheaderdatei deklariert ist.
Geben Sie in einer RTApp den AppManifestValue an , der in der JSON-Datei mit der Hardwaredefinition deklariert ist.
Hardwaredefinitionsbeispiel:"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ]
Beispiel für unformatierte Werte:"I2cMaster": [ "ISU0", "ISU1" ]
API-Referenz:Applibs i2c.h
Konzept:Verwenden von I2C mit Azure Sphere
I2sSubordinate Die untergeordnete I2S-Schnittstelle (Inter-IC Sound), die von einer RTApp verwendet wird. Diese Funktion ist für allgemeine Anwendungen nicht verfügbar. Beispiel für unformatierte Werte: "I2sSubordinate": [ "I2S0", "I2S1" ]
MutableStorage Änderbare Speichereinstellungen, die es der Anwendung ermöglichen, beständigen Speicher zu verwenden.
Beispiel:"MutableStorage" : { "SizeKB": 64, }
API-Referenz:Applibs storage.h
Konzept: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 entsprechende Funktion verfügt; andernfalls false.
Beispiel:"NetworkConfig" : true
API-Referenz:Applibs networking.h
Konzept:Verwenden von Netzwerkdiensten
PowerControls Ein Array von Zeichenfolgen, die differenzierte Funktionen zum Steuern des Energiezustands des Geräts darstellen. 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 Herunterschaltens und Updates.
Beispiel:"PowerControls": ["ForcePowerDown", "ForceReboot"]
API-Referenz:Applibs powermanagement.h
Konzept:Verwalten des Herunterschaltzustands 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 Peripheriegerätenamen an, der in der Hardwaredefinitionsheaderdatei deklariert ist.
Geben Sie in einer RTApp den AppManifestValue an , der in der JSON-Datei mit der Hardwaredefinition deklariert ist.
Hardwaredefinitionsbeispiel:"Pwm": [ "$MT3620_RDB_LED_PWM_CONTROLLER2" ]
Beispiel für unformatierte Werte:"Pwm": [ "PWM-CONTROLLER-0" ]
API-Referenz:Applibs pwm.h
Konzept:Verwenden von PWMs in allgemeinen 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 entsprechende Funktion verfügt; andernfalls false.
Beispiel:"ReadNetworkProxyConfig": true
API-Referenz:Applibs networking.h
Konzept: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 Entsprechende Funktion verfügt; andernfalls false.
Beispiel:"SntpService" : true
API-Referenz:Applibs networking.h
Konzept: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 Entsprechende Funktion verfügt; andernfalls false.
Beispiel:"SoftwareUpdateDeferral" : true
API-Referenz:Applibs eventloop.H
Konzept:Geräteupdates zurückstellen
SpiMaster Eine Liste der SPI-master Schnittstellen, die von der Anwendung verwendet werden.
Geben Sie in einer allgemeinen Anwendung den Peripheriegerätenamen an, der in der Hardwaredefinitionsheaderdatei deklariert ist.
Geben Sie in einer RTApp den AppManifestValue an , der in der JSON-Datei mit der Hardwaredefinition deklariert ist.
Hardwaredefinitionsbeispiel:"SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ]
Beispiel für unformatierte Werte:"SpiMaster": [ "ISU0", "ISU1" ]
API-Referenz:Applibs spi.h
Konzeptionell: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 entsprechende Funktion verfügt; andernfalls false.
Beispiel:"SystemEventNotifications" : true
API-Referenz:Applibs sysevent.h
Konzept:Geräteupdates zurückstellen
Systemtime Ein boolescher Wert, der angibt, ob die Anwendung über die Berechtigung zum Konfigurieren der Systemzeit verfügt: true, wenn die Anwendung über die Entsprechende Funktion verfügt; andernfalls false.
Beispiel:"SystemTime" : true
API-Referenz:Applibs rtc.h
Konzept:Verwalten der Systemzeit und der 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 Entsprechende Funktion verfügt; andernfalls false.
Beispiel:"TimeSyncConfig" : true
Uart Eine Liste der von der Anwendung verwendeten UART-Peripheriegeräte. Diese Funktion aktiviert den dedizierten UART auf einem MT3620-Entwicklungsboard nicht. Informationen zum dedizierten UART finden Sie unter Erstellen einer echtzeitfähigen Anwendung.
Geben Sie in einer allgemeinen Anwendung den Peripheriegerätenamen an, der in der Hardwaredefinitionsheaderdatei deklariert ist.
Geben Sie in einer RTApp den AppManifestValue an , der in der JSON-Datei mit der Hardwaredefinition deklariert ist.
Hardwaredefinitionsbeispiel:"Uart": [ "$MT3620_RDB_HEADER2_ISU0_UART", "$MT3620_RDB_HEADER4_ISU1_UART" ]
Beispiel für unformatierte Werte:"Uart": [ "ISU0", "ISU1" ]
API-Referenz:Applibs uart.h
Konzept:Verwenden von UART in Azure Sphere
WifiConfig Ein boolescher Wert, der angibt, ob die Anwendung über die Berechtigung verfügt, die WifiConfig-API zum Ändern der Wi-Fi Konfiguration zu verwenden: true, wenn die Anwendung über die Entsprechende Funktion verfügt; andernfalls false.
Beispiel:"WifiConfig" : true
API-Referenz:Applibs wificonfig.h
Konzeptionell:Netzwerk konfigurieren

Der Abschnitt MutableStorage unterstützt Folgendes:

Namen Beschreibung
SizeKB Eine ganze Zahl, die die Größe des veränderlichen Speichers in Kibibyte angibt. Der Maximalwert ist 64. Der Wert 0 entspricht nicht der veränderlichen Speicherfunktion.

Beispiel

Im Folgenden sehen Sie ein Beispiel app_manifest.json-Datei für eine allgemeine Anwendung, die auf die MT3620 RDB-Hardware ausgerichtet ist:

{
    "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 Folgendes aus:

  • Übergibt vier Befehlszeilenargumente an die App.
  • Lässt nur Verbindungen mit den DNS-Hosts my-hub.example.net, contoso.azure-devices.net und global.azure-devices-provisioning.net zu.
  • Lässt eingehenden TCP-Datenverkehr an den Ports 1024 und 65535 zu.
  • Lässt eingehenden UDP-Datenverkehr an den Ports 1024 und 50000 zu.
  • Gibt einen Azure Sphere-Mandanten an, der für die Geräteauthentifizierung verwendet und Verbindungen mit dem Device Provisioning-Dienst zugelassen werden soll.
  • Gibt die Verwendung von drei GPIOs an.
  • Ermöglicht der Anwendung, die Hardwareadresse der Netzwerkschnittstelle zu konfigurieren.
  • Gibt die Verwendung eines UART-Peripheriegeräts an.
  • Ermöglicht änderbaren Speicher mit 64 Kibibyte Speicherplatz.
  • Ermöglicht es der App, die WifiConfig-API zum Ändern der Wi-Fi-Konfiguration zu verwenden.
  • Gibt die Verwendung einer SPI-master-Schnittstelle an.
  • Gibt die Verwendung einer I2C-master-Schnittstelle an.
  • Ermöglicht der App das Konfigurieren der Systemzeit mithilfe der RTC-API.
  • Aktiviert mallocng für die App-Entwicklung.