Anwendungsmanifest
Wichtig
Dies ist die Dokumentation zu Azure Sphere (Legacy). Azure Sphere (Legacy) wird am 27. September 2027 eingestellt, und Benutzer müssen bis zu diesem Zeitpunkt zu Azure Sphere (integriert) migrieren. Verwenden Sie die Versionsauswahl oberhalb des Inhaltsverzeichniss, um die Dokumentation zu Azure Sphere (Integriert) anzuzeigen.
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.