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 (Legacy) 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 eine Azure Sphere-Mandanten-UUID (Legacy) an, die 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.