Manifesto dell'applicazione
Il manifesto dell'applicazione descrive le risorse, chiamate anche funzionalità, richieste da un'applicazione. Tutte le applicazioni dispongono di un manifesto.
Le applicazioni devono fornire il consenso esplicito all'uso delle funzionalità elencando ogni risorsa necessaria nella sezione Capabilities del manifesto dell'applicazione. Nessuna funzionalità è abilitata per impostazione predefinita. Se un'applicazione richiede una funzionalità non elencata, la richiesta ha esito negativo. Se il file manifesto dell'applicazione contiene errori, i tentativi di eseguire il trasferimento locale dell'applicazione hanno esito negativo. Il manifesto di ogni applicazione deve essere archiviato come app_manifest.json nella directory radice della cartella dell'applicazione nel PC.
Il modello di Azure Sphere genera automaticamente un manifesto dell'applicazione predefinito quando si crea un'applicazione. È necessario modificare il manifesto predefinito per elencare le funzionalità richieste dall'applicazione. Ogni esempio per Azure Sphere include anche un manifesto dell'applicazione. Se si basa l'applicazione su un esempio, sarà probabilmente necessario modificare anche il manifesto.
Dispositivi Azure Sphere diversi possono esporre le funzionalità del chip in modi diversi. Il valore usato nel manifesto per identificare una determinata funzionalità, ad esempio un pin del GPIO, può pertanto variare a seconda dell'hardware per cui si stanno eseguendo le attività di sviluppo. In Gestire le dipendenze hardware di destinazione sono disponibili altre informazioni sulle destinazioni hardware per un'applicazione di alto livello. Nel manifesto dell'applicazione per un'applicazione di alto livello usare le costanti definite nel file JSON nella cartella HardwareDefinitions della directory di installazione di Microsoft Azure Sphere SDK. Il percorso esatto della directory di installazione sarà diverso in Windows e Linux. In un'applicazione con operazioni in tempo reale (RTApp) usare i valori non elaborati elencati in Contenuto del manifesto dell'applicazione.
Quando un'applicazione qualsiasi viene trasferita localmente o distribuita nel dispositivo, il runtime di Azure Sphere legge il manifesto dell'applicazione per verificare quali funzionalità può usare l'applicazione. I tentativi di accesso a risorse non elencate nel manifesto provocheranno errori di API, ad esempio EPERM (autorizzazione negata). Una risorsa può essere usata solo da un'applicazione nel dispositivo. Se si installa un'applicazione che richiede una risorsa già in uso, il tentativo avrà esito negativo.
Contenuto del manifesto dell'applicazione
Il manifesto dell'applicazione include gli elementi seguenti:
Nome | Descrizione |
---|---|
SchemaVersion | Versione dello schema del manifesto dell'applicazione in uso. Attualmente deve essere 1. Obbligatorio. |
Nome | Nome dell'applicazione. Al momento della creazione progetto, questo valore è impostato sul nome del progetto. Il nome può essere qualsiasi lunghezza, ma solo i primi 31 caratteri vengono archiviati nel pacchetto immagine; il nome viene quindi troncato nelle richieste sul pacchetto immagine. Obbligatorio. |
ComponentId | ID del componente. Visual Studio crea questo ID quando si compila l'applicazione. Se non si usa Visual Studio, vedere Generare un ID componente per informazioni sulla creazione dell'ID. Obbligatorio. |
EntryPoint | Nome del file eseguibile con il percorso relativo nell'immagine del file system dell'applicazione, creato quando viene compilata l'applicazione. Attualmente, Visual Studio usa /bin/app per questo valore. Obbligatorio. |
CmdArgs | Argomenti da passare all'applicazione. Racchiudere ogni argomento tra virgolette e separarlo dagli altri argomenti con una virgola. Facoltativo. |
TargetBetaApis | Specifica che l'applicazione richiede le API beta e identifica il set di API beta usato. Questo campo viene aggiunto automaticamente durante il processo di compilazione se l'applicazione viene compilata usando le API beta. Facoltativo. Vedere Usare le funzionalità beta per informazioni dettagliate. |
ApplicationType | Tipo di applicazione. Facoltativo. Impostare su Debugger solo se si sta compilando un sostituto per gdbserver. |
Capabilities | Elenco di coppie chiave/valore che specificano le risorse richieste dall'applicazione. Obbligatorio. |
MallocVersion | Intero che specifica la versione di malloc, dove 1=standard e 2=mallocng, un malloc avanzato disponibile nelle versioni MUSL superiori alla 1.2.1. La versione 2 è consigliata per tutte le nuove app di sviluppo. |
La sezione Capabilities supporta quanto segue:
Nota
Le applicazioni di livello più generale possono usare i valori delle funzionalità dei file di definizione hardware o valori non elaborati. Tuttavia, non è possibile combinare entrambi i tipi di valore nella stessa funzionalità. Le app RTApp possono usare solo valori non elaborati per le funzionalità.
Nome | Descrizione |
---|---|
Adc | Controller di conversione analogico-digitale (ADC) usato dall'applicazione. Questa funzionalità riserva l'intero controller ADC (che comprende un blocco di 8 pin), non solo il pin 0 nel blocco. In un'applicazione di alto livello specificare il nome di periferica dichiarato nel file di intestazione di definizione dell'hardware. In un'applicazione RTApp specificare il valore AppManifestValue dichiarato nel file JSON di definizione dell'hardware. Esempio di definizione dell'hardware: "Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ] Esempio di valore non elaborato: "Adc": [ "ADC-CONTROLLER-0" ] Informazioni di riferimento sulle API: Applibs adc.h Concettuale: uso di ADCs in Azure Sphere |
AllowedApplicationConnections | Elenco di ID dei componenti dell'applicazione a cui è consentita la connessione dell'applicazione. Esempio: "AllowedApplicationConnections": [ "005180BC-402F-4CB3-A662-72937DBCDE47" ] Informazioni di riferimento sulle API: Applibs application.h Concettuale: comunicare con un'applicazione di alto livello |
AllowedConnections | Elenco di nomi host DNS o indirizzi IP (IPv4) a cui l'applicazione può connettersi. Se l'applicazione usa un hub IoT, l'elenco deve includere l'indirizzo IP o il nome host DNS per l'hub, in genere hub-name.azure-devices.net. I numeri di porta e i caratteri jolly nei nomi e indirizzi IP non sono accettati. Esempio: "AllowedConnections" : [ "my-hub.example.net", "global.azure-devices-provisioning.net" ] |
AllowedTcpServerPorts | Elenco di porte che consentono il traffico TCP in ingresso. È possibile includere fino a 10 porte e ogni porta deve essere elencata singolarmente. Le porte supportate vanno da 1024 a 65535. È possibile specificare le stesse porte per TCP e UDP. Tuttavia, se si specifica la stessa porta per più app nel dispositivo, il caricamento della seconda app eseguita non riuscirà. Esempio: "AllowedTcpServerPorts": [ 1024, 65535 ] |
AllowedUdpServerPorts | Elenco di porte che consentono il traffico UDP in ingresso. È possibile includere fino a 10 porte e ogni porta deve essere elencata singolarmente. Le porte supportate vanno da 1024 a 65535. È possibile specificare le stesse porte per TCP e UDP. Tuttavia, se si specifica la stessa porta per più app nel dispositivo, il caricamento della seconda app eseguita non riuscirà. Esempio: "AllowedUdpServerPorts": [ 1024, 50000 ] |
CertStore | Valore booleano che indica se un'app di alto livello dispone dell'autorizzazione per gestire i certificati con l'API CertStore: true per abilitare l'API; in caso contrario, false. Esempio: "CertStore" : true |
DeviceAuthentication | Stringa che specifica l'UUID del tenant di Azure Sphere (legacy) da usare per l'autenticazione del dispositivo. Esempio: "DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0" |
DhcpService | Valore booleano che indica se l'applicazione dispone dell'autorizzazione per configurare il servizio DHCP: true se l'applicazione dispone della funzionalità; in caso contrario, false. Esempio: "DhcpService" : true Informazioni di riferimento sulle API: Applibs networking.h Concettuale: usare i servizi di rete |
EnterpriseWifiConfig | Valore booleano che indica se un'applicazione di alto livello dispone dell'autorizzazione per creare una rete EAP-TLS e associarvi i certificati: true se l'applicazione ha la funzionalità; in caso contrario, false. Esempio: "EnterpriseWifiConfig" : true |
ExternalInterrupt | Elenco di interrupt esterni usati da un'applicazione RTApp. Questa funzionalità non è disponibile per le applicazioni di alto livello. Esempio: "ExternalInterrupt": [ "EINT4", "EINT12" ] |
Gpio | Elenco di GPIO usati dall'applicazione. In un'applicazione di alto livello specificare il nome di GPIO dichiarato nel file di intestazione di definizione dell'hardware, ad esempio $MT3620_RDB_LED1_RED. In un'applicazione RTApp specificare i numeri interi che corrispondono ai numeri di GPIO nel file JSON di definizione dell'hardware. Ad esempio, 8 specifica il GPIO 8. Esempio di definizione dell'hardware: "Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ] Esempio di valore non elaborato: "Gpio": [ 8, 12 ] Informazioni di riferimento sulle API: Applibs gpio.h Concettuale: uso di oggetti Criteri di gruppo in Azure Sphere |
HardwareAddressConfig | Valore booleano che indica se l'applicazione dispone dell'autorizzazione per configurare l'indirizzo hardware dell'interfaccia di rete: true se l'applicazione ha la funzionalità; in caso contrario, false. Esempio: "HardwareAddressConfig" : true Informazioni di riferimento sulle API: Applibs networking.h Concettuale: usare i servizi di rete |
HeapMemStats | Valore booleano che indica se il rilevamento dell'allocazione di memoria heap è abilitato: true se l'applicazione ha la funzionalità; in caso contrario, false. Esempio: "HeapMemStats": true Conceptual:Memory use in high-level applications (Uso concettuale:Memoria nelle applicazioni di alto livello) |
I2cMaster | Elenco delle interfacce master I2C usate dall'applicazione. In un'applicazione di alto livello specificare il nome di periferica dichiarato nel file di intestazione di definizione dell'hardware. In un'applicazione RTApp specificare il valore AppManifestValue dichiarato nel file JSON di definizione dell'hardware. Esempio di definizione dell'hardware: "I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ] Esempio di valore non elaborato: "I2cMaster": [ "ISU0", "ISU1" ] Informazioni di riferimento sulle API: Applibs i2c.h Concettuale: uso di I2C con Azure Sphere |
I2sSubordinate | Interfaccia subordinata I2S (Inter-IC Sound) usata da un'applicazione RTApp. Questa funzionalità non è disponibile per le applicazioni di alto livello. Esempio di valore non elaborato: "I2sSubordinate": [ "I2S0", "I2S1" ] |
MutableStorage | Impostazioni di archiviazione modificabile che consentono all'applicazione di usare lo spazio di archiviazione permanente. Esempio: "MutableStorage" : { "SizeKB": 64, } Informazioni di riferimento sulle API: Applibs storage.h Concettuale: uso dell'archiviazione in Azure Sphere |
NetworkConfig | Valore booleano che indica se l'applicazione dispone dell'autorizzazione per configurare un'interfaccia di rete: true se l'applicazione ha la funzionalità; in caso contrario, false. Esempio: "NetworkConfig" : true Informazioni di riferimento sulle API: Applibs networking.h Concettuale: usare i servizi di rete |
PowerControls | Matrice di stringhe che rappresentano funzionalità granulari per controllare lo stato di alimentazione del dispositivo. ForcePowerDown e ForceReboot sono gli unici valori supportati. Avviso: poiché ForcePowerDown e ForceReboot consentono a un'applicazione di terminare immediatamente tutte le applicazioni, è necessario assicurarsi che il dispositivo sia ancora in grado di ricevere gli aggiornamenti del sistema operativo e dell'applicazione. Per altre informazioni e istruzioni, vedere Forzare lo spegnimento e gli aggiornamenti. Esempio: "PowerControls": ["ForcePowerDown", "ForceReboot"] Informazioni di riferimento sulle API: Applibs powermanagement.h Concettuale: Gestire lo stato di risparmio di energia per i dispositivi Azure Sphere |
Pwm | Modulatore di larghezza dell'impulso (PWM) usato dall'applicazione. In un'applicazione di alto livello specificare il nome di periferica dichiarato nel file di intestazione di definizione dell'hardware. In un'applicazione RTApp specificare il valore AppManifestValue dichiarato nel file JSON di definizione dell'hardware. Esempio di definizione dell'hardware: "Pwm": [ "$MT3620_RDB_LED_PWM_CONTROLLER2" ] Esempio di valore non elaborato: "Pwm": [ "PWM-CONTROLLER-0" ] Informazioni di riferimento sulle API: Applibs pwm.h Concettuale: usare PWM in applicazioni di alto livello |
ReadNetworkProxyConfig | Valore booleano che indica se l'applicazione dispone dell'autorizzazione per recuperare la configurazione del proxy: true se l'applicazione dispone della funzionalità; in caso contrario, false. Esempio: "ReadNetworkProxyConfig": true Informazioni di riferimento sulle API: Applibs networking.h Concettuale: connettersi ai servizi Web |
SntpService | Valore booleano che indica se l'applicazione dispone dell'autorizzazione per configurare il servizio SNTP: true se l'applicazione dispone della funzionalità; in caso contrario, false. Esempio: "SntpService" : true Informazioni di riferimento sulle API: Applibs networking.h Concettuale: server SNTP |
SoftwareUpdateDeferral | Valore booleano che indica se l'applicazione dispone dell'autorizzazione per rinviare gli aggiornamenti software per un periodo limitato: true se l'applicazione ha la funzionalità; in caso contrario, false. Esempio: "SoftwareUpdateDeferral" : true Informazioni di riferimento sulle API: Eventloop applibs.h Concettuale: Rinviare gli aggiornamenti dei dispositivi |
SpiMaster | Elenco delle interfacce master SPI usate dall'applicazione. In un'applicazione di alto livello specificare il nome di periferica dichiarato nel file di intestazione di definizione dell'hardware. In un'applicazione RTApp specificare il valore AppManifestValue dichiarato nel file JSON di definizione dell'hardware. Esempio di definizione dell'hardware: "SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ] Esempio di valore non elaborato: "SpiMaster": [ "ISU0", "ISU1" ] Informazioni di riferimento sulle API: Applibs spi.h Concettuale: uso di SPI con Azure Sphere |
SystemEventNotifications | Valore booleano che indica se l'applicazione dispone dell'autorizzazione per ricevere notifiche degli eventi di sistema: true se l'applicazione dispone della funzionalità; in caso contrario, false. Esempio: "SystemEventNotifications" : true Informazioni di riferimento sulle API: Applibs sysevent.h Concettuale: Rinviare gli aggiornamenti dei dispositivi |
SystemTime | Valore booleano che indica se l'applicazione dispone dell'autorizzazione per configurare l'ora di sistema: true se l'applicazione dispone della funzionalità; in caso contrario, false. Esempio: "SystemTime" : true Informazioni di riferimento sulle API: Applibs rtc.h Concettuale: gestire l'ora di sistema e l'rtc in Azure Sphere |
TimeSyncConfig | Valore booleano che indica se l'applicazione dispone dell'autorizzazione per configurare il servizio di sincronizzazione temporale: true se l'applicazione ha la funzionalità; in caso contrario, false. Esempio: "TimeSyncConfig" : true |
Uart | Elenco delle periferiche UART usate dall'applicazione. Questa funzionalità non abilita l'UART dedicato su una scheda di sviluppo MT3620. Per informazioni sull'UART dedicato, vedere Creare un'applicazione con funzionalità in tempo reale. In un'applicazione di alto livello specificare il nome di periferica dichiarato nel file di intestazione di definizione dell'hardware. In un'applicazione RTApp specificare il valore AppManifestValue dichiarato nel file JSON di definizione dell'hardware. Esempio di definizione dell'hardware: "Uart": [ "$MT3620_RDB_HEADER2_ISU0_UART", "$MT3620_RDB_HEADER4_ISU1_UART" ] Esempio di valore non elaborato: "Uart": [ "ISU0", "ISU1" ] Informazioni di riferimento sulle API: Applibs uart.h Concettuale: usare UART in Azure Sphere |
WifiConfig | Valore booleano che indica se l'applicazione dispone dell'autorizzazione per usare l'API WifiConfig per modificare la configurazione Wi-Fi: true se l'applicazione ha la funzionalità; in caso contrario, false. Esempio: "WifiConfig" : true Informazioni di riferimento sulle API: Applibs wificonfig.h Concettuale: Configurare la rete |
La sezione MutableStorage supporta quanto segue:
Nome | Descrizione |
---|---|
SizeKB | Numero intero che specifica le dimensioni dello spazio di archiviazione modificabile in kibibyte. Il valore massimo è 64. Il valore 0 equivale a nessuna funzionalità di archiviazione modificabile. |
Esempio
Di seguito è riportato un file app_manifest.json di esempio per un'applicazione di alto livello che ha come destinazione l'hardware della scheda di sviluppo di riferimento MT3620:
{
"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
}
Il file di esempio app_manifest.json per MyTestApp esegue le operazioni seguenti:
- Passa quattro argomenti della riga di comando all'app.
- Consente solo le connessioni agli host DNS my-hub.example.net, contoso.azure-devices.net e global.azure-devices-provisioning.net.
- Consente il traffico TCP in ingresso sulle porte 1024 e 65535.
- Consente il traffico UDP in ingresso sulle porte 1024 e 50000.
- Specifica un UUID tenant di Azure Sphere (legacy) da usare per l'autenticazione del dispositivo e consente le connessioni al servizio Device Provisioning.
- Specifica l'uso di tre GPIO.
- Consente all'applicazione di configurare l'indirizzo hardware dell'interfaccia di rete.
- Specifica l'uso di una periferica UART.
- Abilita l'archiviazione modificabile con 64 kibibyte di spazio di archiviazione.
- Consente all'app di usare l'API WifiConfig per modificare la configurazione del Wi-Fi.
- Specifica l'uso di un'interfaccia master SPI.
- Specifica l'uso di un'interfaccia master I2C.
- Consente all'app di configurare l'ora di sistema tramite l'API RTC.
- Abilita il mallocng per lo sviluppo di app.