Manifest aplikace
Manifest aplikace popisuje prostředky, označované také jako schopnosti aplikace, které aplikace vyžaduje. Každá aplikace má manifest aplikace.
Aplikace se musí přihlásit k používání funkcí tak, že v manifestu aplikace v části Schopnosti vypisují všechny požadované prostředky. Ve výchozím nastavení nejsou povolené žádné možnosti. Pokud aplikace požádá o funkci, která není uvedená, požadavek selže. Pokud soubor manifestu aplikace obsahuje chyby, pokusy o zkušební načtení aplikace se nezdaří. Manifest každé aplikace musí být uložený jako app_manifest.json v kořenovém adresáři složky aplikace na vašem počítači.
Šablona Azure Sphere automaticky vytvoří výchozí manifest aplikace při vytváření aplikace. Musíte upravit výchozí manifest tak, aby vypisovat možnosti, které vaše aplikace vyžaduje. Každá ukázka Azure Sphere obsahuje také manifest aplikace. Pokud aplikaci založíte na ukázce, budete pravděpodobně muset také upravit manifest.
Různá zařízení Azure Sphere můžou zpřístupňovat funkce čipu různými způsoby. V důsledku toho se hodnota, kterou v manifestu použijete k identifikaci konkrétní funkce, například špendlík GPIO, může lišit v závislosti na hardwaru, pro který vyvíjíte. Správa cílových hardwarových závislostí poskytuje další informace o hardwarových cílech pro aplikaci vysoké úrovně. V manifestu aplikace pro aplikaci vysoké úrovně použijte konstanty, které jsou definované v souboru JSON ve složce HardwareDefinitions instalačního adresáře sady Microsoft Azure Sphere SDK. Přesné umístění instalačního adresáře se bude lišit ve Windows a Linuxu. V aplikaci podporující v reálném čase (RTApp) použijte nezpracované hodnoty, které jsou uvedeny v části Obsah manifestu aplikace.
Když se nějaká aplikace načte bokem nebo nasadí do zařízení, modul runtime Azure Sphere načte manifest aplikace, aby zjistil, které funkce může aplikace používat. Pokusy o přístup k prostředkům, které nejsou uvedené v manifestu, budou mít za následek chyby rozhraní API, jako je například EPERM (oprávnění odepřeno). Prostředek může používat jenom jedna aplikace na zařízení. Pokud nainstalujete aplikaci, která požaduje prostředek, který se už používá, pokus se nezdaří.
Obsah manifestu aplikace
Manifest aplikace obsahuje následující položky:
Jméno | Popis |
---|---|
SchemaVersion | Verze schématu manifestu aplikace se používá. V současné době musí být 1. Požadované. |
Jméno | Název aplikace Při vytváření projektu je tato hodnota nastavena na název projektu. Název může mít libovolnou délku, ale v balíčku obrázku je uloženo pouze prvních 31 znaků; v dotazech týkajících se balíčku image se tak název zobrazí zkráceně. Požadované. |
Id komponenty | ID komponenty. Visual Studio toto ID vytvoří při sestavování aplikace. Pokud sadu Visual Studio nepoužíváte, informace o vytvoření ID najdete v tématu Generování ID komponenty . Požadované. |
Entrypoint | Název spustitelného souboru společně s relativní cestou v imagi systému souborů aplikace, která se vytvoří při sestavení aplikace. Visual Studio pro tuto hodnotu aktuálně používá /bin/app. Požadované. |
CmdArgs | Argumenty, které se mají předat aplikaci při spuštění. Každý argument uzavřete do dvojitých uvozovek a oddělte argumenty čárkou. Volitelné. |
TargetBetaApis | Určuje, že aplikace vyžaduje beta rozhraní API a identifikuje sadu použitých beta rozhraní API. Toto pole se automaticky přidá během procesu sestavení, pokud je aplikace sestavená pomocí beta rozhraní API. Volitelné. Podrobnosti najdete v tématu Použití beta funkcí . |
Typ aplikace | Typ aplikace Volitelné. Nastavte ladicí program jenom v případě, že vytváříte náhradu za gdbserver. |
Schopnosti | Seznam párů klíč/hodnota, které určují požadavky na prostředky aplikace. Požadované. |
MallocVersion | Celé číslo, které určuje verzi malloc, kde 1=standard a 2=mallocng, což je rozšířené malloc dostupné ve verzích MUSL větších než 1.2.1. Pro všechny nové aplikace se doporučuje verze 2. |
Část Schopnosti podporuje následující možnosti:
Poznámka
Aplikace vysoké úrovně můžou používat hodnoty schopností ze souborů definic hardwaru nebo nezpracované hodnoty. Nemůžete ale kombinovat oba typy hodnot ve stejné funkci. RtApps můžou pro funkce používat jenom nezpracované hodnoty.
Jméno | Popis |
---|---|
Adc | Řadič analog-to-digital conversion (ADC), který používá aplikace. Tato funkce vyhrazuje celý kontroler ADC (který se skládá z bloku 8 pinů), ne jen pin 0 v bloku. V aplikaci vysoké úrovně zadejte název periferního zařízení, který je deklarován v souboru hlavičky definice hardwaru. V aplikaci RTApp zadejte hodnotu AppManifestValue, která je deklarována v souboru JSON definice hardwaru. Příklad definice hardwaru: "Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ] Příklad nezpracované hodnoty: "Adc": [ "ADC-CONTROLLER-0" ] Referenční informace k rozhraní API:Applibs adc.h Koncepční:Použití řadičů služby ACS v Azure Sphere |
AllowedApplicationConnections | Seznam ID komponent aplikace, ke kterým se aplikace může připojit. Příklad: "AllowedApplicationConnections": [ "005180BC-402F-4CB3-A662-72937DBCDE47" ] Referenční informace k rozhraní API:Applibs application.h Koncepční:Komunikace s aplikací vysoké úrovně |
AllowedConnections | Seznam názvů hostitelů DNS nebo IP adres (IPv4), ke kterým se aplikace může připojit. Pokud aplikace používá Azure IoT Hub, musí seznam obsahovat IP adresu nebo název hostitele DNS centra, obvykle hub-name.azure-devices.net. Čísla portů a zástupné znaky v názvech a IP adresách se nepřijímají. Příklad: "AllowedConnections" : [ "my-hub.example.net", "global.azure-devices-provisioning.net" ] |
AllowedTcpServerPorts | Seznam portů, které umožňují příchozí provoz TCP. Můžete zahrnout až 10 portů a každý port musí být uvedený samostatně. Podporované porty jsou 1024 až 65535. Můžete zadat stejné porty pro PROTOKOL TCP i UDP. Pokud ale zadáte stejný port pro více než jednu aplikaci v zařízení, nenačte se druhá aplikace, která se má spustit. Příklad: "AllowedTcpServerPorts": [ 1024, 65535 ] |
AllowedUdpServerPorts | Seznam portů, které umožňují příchozí provoz UDP. Můžete zahrnout až 10 portů a každý port musí být uvedený samostatně. Podporované porty jsou 1024 až 65535. Můžete zadat stejné porty pro PROTOKOL TCP i UDP. Pokud ale zadáte stejný port pro více než jednu aplikaci v zařízení, nenačte se druhá aplikace, která se má spustit. Příklad: "AllowedUdpServerPorts": [ 1024, 50000 ] |
CertStore | Logická hodnota označující, jestli má aplikace vysoké úrovně oprávnění ke správě certifikátů pomocí rozhraní API CertStore: true pro povolení rozhraní API; jinak nepravda. Příklad: "CertStore" : true |
DeviceAuthentication | Řetězec, který určuje UUID tenanta Azure Sphere (starší verze), který se má použít k ověřování zařízení. Příklad: "DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0" |
DhcpService | Logická hodnota označující, jestli má aplikace oprávnění ke konfiguraci služby DHCP: true, pokud má aplikace tuto funkci; jinak nepravda. Příklad: "DhcpService" : true Referenční informace k rozhraní API:Applibs networking.h Koncepční:Použití síťových služeb |
EnterpriseWifiConfig | Logická hodnota označující, jestli má aplikace vysoké úrovně oprávnění k vytvoření sítě EAP-TLS a přidružit k ní certifikáty: true, pokud aplikace tuto funkci má; jinak nepravda. Příklad: "EnterpriseWifiConfig" : true |
ExternalInterrupt | Seznam externích přerušení, která aplikace RTApp používá. Tato funkce není dostupná pro aplikace vysoké úrovně. Příklad: "ExternalInterrupt": [ "EINT4", "EINT12" ] |
Gpio | Seznam objektů zásad skupiny, které aplikace používá. V aplikaci vysoké úrovně zadejte název GPIO, který je deklarován v souboru hlavičky definice hardwaru, například $MT 3620_RDB_LED1_RED. V aplikaci RTApp zadejte celá čísla, která odpovídají číslům GPIO v souboru JSON definice hardwaru. Například 8 určuje GPIO 8. Příklad definice hardwaru: "Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ] Příklad nezpracované hodnoty: "Gpio": [ 8, 12 ] Referenční informace k rozhraní API:Applibs gpio.h Koncepční:Použití objektů zásad skupiny v Azure Sphere |
HardwareAddressConfig | Logická hodnota označující, jestli má aplikace oprávnění ke konfiguraci hardwarové adresy síťového rozhraní: true, pokud má aplikace tuto funkci; jinak nepravda. Příklad: "HardwareAddressConfig" : true Referenční informace k rozhraní API:Applibs networking.h Koncepční:Použití síťových služeb |
HeapMemStats | Logická hodnota označující, jestli je povolené sledování přidělení paměti haldy: true, pokud má aplikace tuto funkci; jinak nepravda. Příklad: "HeapMemStats": true Koncepční:Využití paměti v aplikacích vysoké úrovně |
I2cMaster | Seznam hlavních rozhraní I2C, které aplikace používá. V aplikaci vysoké úrovně zadejte název periferního zařízení, který je deklarován v souboru hlavičky definice hardwaru. V aplikaci RTApp zadejte hodnotu AppManifestValue , která je deklarována v souboru JSON definice hardwaru. Příklad definice hardwaru: "I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ] Příklad nezpracované hodnoty: "I2cMaster": [ "ISU0", "ISU1" ] Referenční informace k rozhraní API:Applibs i2c.h Koncepční:Použití I2C s Azure Sphere |
I2sSubordinate | Podřízené rozhraní I2S (Inter-IC Sound) používané aplikací RTApp Tato funkce není dostupná pro aplikace vysoké úrovně. Příklad nezpracované hodnoty: "I2sSubordinate": [ "I2S0", "I2S1" ] |
MutableStorage | Proměnlivá nastavení úložiště, která aplikaci umožňují používat trvalé úložiště. Příklad: "MutableStorage" : { "SizeKB": 64, } Referenční informace k rozhraní API:Applibs storage.h Koncepční:Použití úložiště v Azure Sphere |
Konfigurace sítě | Logická hodnota označující, jestli má aplikace oprávnění ke konfiguraci síťového rozhraní: true, pokud má aplikace tuto funkci; jinak nepravda. Příklad: "NetworkConfig" : true Referenční informace k rozhraní API:Applibs networking.h Koncepční:Použití síťových služeb |
PowerControls | Pole řetězců, které představují podrobné možnosti řízení stavu napájení zařízení. Jedinými podporovanými hodnotami jsou ForcePowerDown a ForceReboot. Upozornění: Vzhledem k tomu, že ForcePowerDown a ForceReboot umožňují aplikaci okamžitě ukončit všechny aplikace, musíte se ujistit, že vaše zařízení stále může přijímat aktualizace operačního systému a aplikací. Další informace a pokyny najdete v tématu Vynucení vypnutí a aktualizace. Příklad: "PowerControls": ["ForcePowerDown", "ForceReboot"] Referenční informace k rozhraní API:Applibs powermanagement.h Koncepční:Správa stavu vypnutí pro zařízení Azure Sphere |
Pwm | Modulátor šířky impulsů (PWM), který se používá v aplikaci. V aplikaci vysoké úrovně zadejte název periferního zařízení, který je deklarován v souboru hlavičky definice hardwaru. V aplikaci RTApp zadejte hodnotu AppManifestValue , která je deklarována v souboru JSON definice hardwaru. Příklad definice hardwaru: "Pwm": [ "$MT3620_RDB_LED_PWM_CONTROLLER2" ] Příklad nezpracované hodnoty: "Pwm": [ "PWM-CONTROLLER-0" ] Referenční informace k rozhraní API:Applibs pwm.h Koncepční:Použití PWM v aplikacích vysoké úrovně |
ReadNetworkProxyConfig | Logická hodnota označující, zda má aplikace oprávnění k načtení konfigurace proxy serveru: true, pokud má aplikace tuto funkci; jinak nepravda. Příklad: "ReadNetworkProxyConfig": true Referenční informace k rozhraní API:Applibs networking.h Koncepční:Připojení k webovým službám |
SntpService | Logická hodnota označující, jestli má aplikace oprávnění ke konfiguraci služby SNTP: true, pokud má aplikace tuto funkci; jinak nepravda. Příklad: "SntpService" : true Referenční informace k rozhraní API:Applibs networking.h Koncepční:Server SNTP |
SoftwareUpdateDeferral | Logická hodnota označující, zda má aplikace oprávnění odložit aktualizace softwaru o omezenou dobu: true, pokud má aplikace tuto funkci; jinak nepravda. Příklad: "SoftwareUpdateDeferral" : true Referenční informace k rozhraní API:Applibs eventloop.H Koncepční:Odložení aktualizací zařízení |
SpiMaster | Seznam hlavních rozhraní SPI, které aplikace používá. V aplikaci vysoké úrovně zadejte název periferního zařízení, který je deklarován v souboru hlavičky definice hardwaru. V aplikaci RTApp zadejte hodnotu AppManifestValue , která je deklarována v souboru JSON definice hardwaru. Příklad definice hardwaru: "SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ] Příklad nezpracované hodnoty: "SpiMaster": [ "ISU0", "ISU1" ] Referenční informace k rozhraní API:Applibs spi.h Koncepční:Použití SPI s Azure Sphere |
SystemEventNotifications | Logická hodnota označující, jestli má aplikace oprávnění přijímat oznámení o systémových událostech: true, pokud má aplikace tuto funkci; jinak nepravda. Příklad: "SystemEventNotifications" : true Referenční informace k rozhraní API:Applibs sysevent.h Koncepční:Odložení aktualizací zařízení |
SystemTime | Logická hodnota označující, jestli má aplikace oprávnění ke konfiguraci systémového času: true, pokud má aplikace tuto funkci; jinak nepravda. Příklad: "SystemTime" : true Referenční informace k rozhraní API:Applibs rtc.h Koncepční:Správa systémového času a RTC v Azure Sphere |
TimeSyncConfig | Logická hodnota označující, jestli má aplikace oprávnění ke konfiguraci služby synchronizace času: true, pokud má aplikace tuto funkci; jinak nepravda. Příklad: "TimeSyncConfig" : true |
Uart | Seznam periferních zařízení UART, která aplikace používá. Tato funkce nepovoluje vyhrazený objekt UART na vývojovém panelu MT3620. Informace o vyhrazeném objektu UART najdete v tématu Vytvoření aplikace podporující v reálném čase. V aplikaci vysoké úrovně zadejte název periferního zařízení, který je deklarován v souboru hlavičky definice hardwaru. V aplikaci RTApp zadejte hodnotu AppManifestValue , která je deklarována v souboru JSON definice hardwaru. Příklad definice hardwaru: "Uart": [ "$MT3620_RDB_HEADER2_ISU0_UART", "$MT3620_RDB_HEADER4_ISU1_UART" ] Příklad nezpracované hodnoty: "Uart": [ "ISU0", "ISU1" ] Referenční informace k rozhraní API:Applibs uart.h Koncepční:Použití UART v Azure Sphere |
Konfigurace wi-fi | Logická hodnota označující, jestli má aplikace oprávnění používat rozhraní API WifiConfig ke změně konfigurace Wi-Fi: true, pokud má aplikace tuto možnost; jinak nepravda. Příklad: "WifiConfig" : true Referenční informace k rozhraní API:Applibs wificonfig.h Koncepční:Konfigurace sítí |
Část MutableStorage podporuje následující:
Jméno | Popis |
---|---|
Velikost kB | Celé číslo, které určuje velikost proměnlivého úložiště v kibibajtech. Maximální hodnota je 64. Hodnota 0 odpovídá tomu, že nemáte možnost měnitelného úložiště. |
Příklad
Následující příklad ukazuje ukázkový soubor app_manifest.json pro aplikaci vysoké úrovně, která cílí na hardware MT3620 RDB:
{
"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
}
Ukázkový soubor app_manifest.json pro MyTestApp provede toto:
- Předá aplikaci čtyři argumenty příkazového řádku.
- Umožňuje pouze připojení k hostitelům DNS my-hub.example.net, contoso.azure-devices.net a global.azure-devices-provisioning.net.
- Umožňuje příchozí provoz TCP na portech 1024 a 65535.
- Umožňuje příchozí provoz UDP na portech 1024 a 50000.
- Určuje UUID tenanta Azure Sphere (starší verze), které se má použít k ověřování zařízení, a povolí připojení ke službě Device Provisioning.
- Určuje použití tří objektů zásad skupiny.
- Umožňuje aplikaci konfigurovat hardwarovou adresu síťového rozhraní.
- Určuje použití jednoho periferního zařízení UART.
- Umožňuje měnitelné úložiště s 64 kibibajtů úložného prostoru.
- Umožňuje aplikaci používat rozhraní API WifiConfig ke změně konfigurace Wi-Fi.
- Určuje použití jednoho hlavního rozhraní SPI.
- Určuje použití jednoho hlavního rozhraní I2C.
- Umožňuje aplikaci konfigurovat systémový čas pomocí rozhraní RTC API.
- Umožňuje mallocng pro vývoj aplikací.