Manifesto dell'applicazione

Il manifesto dell'applicazione descrive le risorse, dette anche funzionalità dell'applicazione, necessarie da un'applicazione. Ogni applicazione ha un manifesto dell'applicazione.

Le applicazioni devono acconsentire esplicitamente a usare le funzionalità elencando ogni risorsa richiesta nella sezione Funzionalità del manifesto dell'applicazione; nessuna funzionalità è abilitata per impostazione predefinita. Se un'applicazione richiede una funzionalità non elencata, la richiesta non riesce. Se il file manifesto dell'applicazione contiene errori, i tentativi di sideload 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 Azure Sphere crea 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 di Azure Sphere include anche un manifesto dell'applicazione. Se si basa l'applicazione su un esempio, probabilmente sarà necessario modificare anche il manifesto.

I diversi dispositivi Azure Sphere possono esporre le funzionalità del chip in modi diversi. Di conseguenza, il valore usato nel manifesto per identificare una determinata funzionalità, ad esempio un pin GPIO, può variare a seconda dell'hardware per cui si sta sviluppando. Gestire le dipendenze hardware di destinazione fornisce ulteriori informazioni sulle destinazioni hardware per un'applicazione di alto livello. Nel manifesto dell'applicazione per un'applicazione di alto livello, utilizzare le costanti definite nel file JSON nella cartella HardwareDefinitions della directory di installazione di Microsoft Azure Sphere SDK. La posizione esatta della directory di installazione sarà diversa su Windows e Linux. In un'applicazione che supporta il tempo reale (RTApp), utilizzare i valori non elaborati elencati in Contenuti del manifesto dell'applicazione.

Quando un'applicazione viene sideload o distribuita nel dispositivo, il runtime Azure Sphere legge il manifesto dell'applicazione per accertare quali funzionalità è consentita all'applicazione. I tentativi di accedere a risorse non elencate nel manifesto genereranno errori dell'API, ad esempio EPERM (autorizzazione negata). Solo un'applicazione nel dispositivo può usare una risorsa. 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 manifesto dell'applicazione in uso. Attualmente deve essere 1. Obbligatorio.
Nome Nome dell'applicazione. Al momento della creazione del progetto, questo valore è impostato sul nome del progetto. Il nome può essere di qualsiasi lunghezza, ma solo i primi 31 caratteri vengono archiviati nel pacchetto di immagini; quindi il nome appare troncato nelle indagini sul pacchetto di immagini. Obbligatorio.
Componentid ID del componente. Visual Studio crea questo ID quando si crea 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 insieme al percorso relativo nell'immagine del file system dell'applicazione, che viene creato quando viene creata l'applicazione. Visual Studio attualmente usa /bin/app per questo valore. Obbligatorio.
CmdArgs Argomenti da passare all'applicazione all'avvio. Racchiudere ogni argomento tra virgolette doppie e argomenti separati da una virgola. Opzionale.
TargetBetaApis Specifica che l'applicazione richiede API Beta e identifica il set di API Beta usate. Questo campo viene aggiunto automaticamente durante il processo di compilazione se l'applicazione viene creata usando API Beta. Opzionale. Per informazioni dettagliate, vedere Usare le caratteristiche beta .
ApplicationType Tipo di applicazione. Opzionale. Impostato su Debugger solo se si sta creando una sostituzione per gdbserver.
Funzionalità Elenco di coppie chiave/valore che specificano i requisiti delle risorse dell'applicazione. Obbligatorio.
MallocVersion Valore integer che specifica la versione di malloc, dove 1=standard e 2=mallocng, una malloc avanzata disponibile nelle versioni MUSL superiori a 1.2.1. La versione 2 è consigliata per tutte le nuove app di sviluppo.

La sezione Funzionalità supporta quanto segue:

Nota

Le applicazioni di alto livello possono usare i valori di funzionalità dei file di definizione hardware oppure i valori non elaborati. Tuttavia, non è possibile combinare entrambi i tipi di valore nella stessa funzionalità. LE RTApp possono usare solo valori non elaborati per le funzionalità.

Nome Descrizione
Adc Controller di conversione analogico-digitale (ADC) utilizzato dall'applicazione. Questa funzionalità riserva l'intero controller ADC (che comprende un blocco da 8 pin), non solo pin 0 nel blocco.
In un'applicazione di livello elevato, specificare il nome della periferica dichiarato nel file di intestazione delle definizioni hardware.
In un'RTApp specifica appManifestValue dichiarato nel file JSON di definizione hardware.
Esempio di definizione hardware:"Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
Esempio di valore non elaborato:"Adc": [ "ADC-CONTROLLER-0" ]
Riferimento API:Applibs adc.h
Concettuale:Uso di ADC su Azure Sphere
AllowedApplicationConnections Elenco di ID componente dell'applicazione a cui è consentita la connessione dell'applicazione.
Esempio:"AllowedApplicationConnections": [ "005180BC-402F-4CB3-A662-72937DBCDE47" ]
Riferimento 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 è autorizzata a connettersi. Se l'applicazione usa un hub IoT di Azure, 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 negli indirizzi IP non vengono 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 sono da 1024 a 65535. È possibile specificare le stesse porte sia per TCP che per UDP. Tuttavia, se si specifica la stessa porta per più app nel dispositivo, il caricamento della seconda app non riuscirà.
Esempio:"AllowedTcpServerPorts": [ 1024, 65535 ]
AllowedUdpServerPorts Un elenco di porte che consentono il traffico UDP in arrivo. È possibile includere fino a 10 porte e ogni porta deve essere elencata singolarmente. Le porte supportate sono da 1024 a 65535. È possibile specificare le stesse porte sia per TCP che per UDP. Tuttavia, se si specifica la stessa porta per più app nel dispositivo, il caricamento della seconda app non riuscirà.
Esempio:"AllowedUdpServerPorts": [ 1024, 50000 ]
CertStore Valore Boolean 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 Azure Sphere da usare per l'autenticazione del dispositivo.
Esempio:"DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0"
DhcpService Valore Boolean 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
Riferimento API:Applibs networking.h
Concettuale:Usare i servizi di rete
EnterpriseWifiConfig Valore Boolean che indica se un'applicazione di livello elevato dispone dell'autorizzazione per creare una rete EAP-TLS e associare certificati: true se l'applicazione dispone della funzionalità; in caso contrario, false.
Esempio:"EnterpriseWifiConfig" : true
ExternalInterrupt Elenco di interrupt esterni utilizzati da un'RTApp. Questa funzionalità non è disponibile per le applicazioni di alto livello.
Esempio:"ExternalInterrupt": [ "EINT4", "EINT12" ]
Gpio Elenco di oggetti Criteri di gruppo usati dall'applicazione.
In un'applicazione di livello elevato specificare il nome GPIO dichiarato nel file di intestazione delle definizioni hardware, ad esempio $MT 3620_RDB_LED1_RED.
In un'RTApp specificare i numeri interi che corrispondono ai numeri di GPIO nel file JSON delle definizioni hardware. Ad esempio, 8 specifica GPIO 8.
Esempio di definizione hardware:"Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]
Esempio di valore non elaborato:"Gpio": [ 8, 12 ]
Riferimento API:Applibs gpio.h
Concettuale:Uso di OGGETTI CRITERI di gruppo in Azure Sphere
HardwareAddressConfig Valore Boolean che indica se l'applicazione dispone dell'autorizzazione per configurare l'indirizzo hardware dell'interfaccia di rete: true se l'applicazione dispone della funzionalità; in caso contrario, false.
Esempio:"HardwareAddressConfig" : true
Riferimento API:Applibs networking.h
Concettuale:Usare i servizi di rete
HeapMemStats Valore Boolean che indica se il monitoraggio dell'allocazione della memoria heap è abilitato: true se l'applicazione dispone della funzionalità; in caso contrario, false.
Esempio:"HeapMemStats": true
Concettuale:Uso della memoria in applicazioni di alto livello
I2cMaster Elenco di interfacce master I2C utilizzate dall'applicazione.
In un'applicazione di livello elevato, specificare il nome della periferica dichiarato nel file di intestazione delle definizioni hardware.
In un'RTApp specifica appManifestValue dichiarato nel file JSON di definizione hardware.
Esempio di definizione hardware:"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ]
Esempio di valore non elaborato:"I2cMaster": [ "ISU0", "ISU1" ]
Riferimento API:Applibs i2c.h
Concettuale:Uso di I2C con Azure Sphere
I2sSubordinate Interfaccia subordinata I2S (Inter-IC Sound) utilizzata da una RTApp. Questa funzionalità non è disponibile per le applicazioni di alto livello. Esempio di valore non elaborato: "I2sSubordinate": [ "I2S0", "I2S1" ]
MutableStorage Impostazioni di archiviazione modificabili che consentono all'applicazione di usare l'archiviazione persistente.
Esempio:"MutableStorage" : { "SizeKB": 64, }
Riferimento API:Applibs storage.h
Concettuale:Uso dell'archiviazione in Azure Sphere
NetworkConfig Valore Boolean che indica se l'applicazione dispone dell'autorizzazione per configurare un'interfaccia di rete: true se l'applicazione dispone della funzionalità; in caso contrario, false.
Esempio:"NetworkConfig" : true
Riferimento 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 delle applicazioni. Per altre informazioni e indicazioni, vedi Forzare l'accensione e gli aggiornamenti.
Esempio:"PowerControls": ["ForcePowerDown", "ForceReboot"]
Riferimento API:Applibs powermanagement.h
Concettuale:Gestire lo stato di risparmio energia per i dispositivi Azure Sphere
Pwm Il modulare a larghezza d'impulso (PWM) utilizzato dall'applicazione.
In un'applicazione di livello elevato, specificare il nome della periferica dichiarato nel file di intestazione delle definizioni hardware.
In un'RTApp specifica appManifestValue dichiarato nel file JSON di definizione hardware.
Esempio di definizione hardware:"Pwm": [ "$MT3620_RDB_LED_PWM_CONTROLLER2" ]
Esempio di valore non elaborato:"Pwm": [ "PWM-CONTROLLER-0" ]
Riferimento API:Applibs pwm.h
Concettuale:Usare PWA nelle applicazioni di alto livello
ReadNetworkProxyConfig Valore Boolean che indica se l'applicazione dispone dell'autorizzazione per recuperare la configurazione proxy: true se l'applicazione dispone della funzionalità; in caso contrario, false.
Esempio:"ReadNetworkProxyConfig": true
Riferimento API:Applibs networking.h
Concettuale:Connettersi ai servizi Web
SntpService Valore Boolean 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
Riferimento API:Applibs networking.h
Concettuale:server SNTP
SoftwareUpdateDeferral Valore Boolean che indica se l'applicazione dispone dell'autorizzazione per rinviare gli aggiornamenti software per un periodo limitato: true se l'applicazione dispone della funzionalità; in caso contrario, false.
Esempio:"SoftwareUpdateDeferral" : true
Riferimento API:Applibs eventloop.H
Concettuale:Rinviare gli aggiornamenti dei dispositivi
SpiMaster Un elenco di interfacce master SPI utilizzate dall'applicazione.
In un'applicazione di livello elevato, specificare il nome della periferica dichiarato nel file di intestazione delle definizioni hardware.
In un'RTApp specifica appManifestValue dichiarato nel file JSON di definizione hardware.
Esempio di definizione hardware:"SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ]
Esempio di valore non elaborato:"SpiMaster": [ "ISU0", "ISU1" ]
Riferimento API:Applibs spi.h
Concettuale:Uso dell'SPI con Azure Sphere
SystemEventNotifications Valore Boolean che indica se l'applicazione dispone dell'autorizzazione per la ricezione delle notifiche degli eventi di sistema: true se l'applicazione dispone della funzionalità; in caso contrario, false.
Esempio:"SystemEventNotifications" : true
Riferimento API:Applibs sysevent.h
Concettuale:Rinviare gli aggiornamenti dei dispositivi
Systemtime Valore Boolean 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
Riferimento API:Applibs rtc.h
Concettuale:Gestire l'ora del sistema e RTC su Azure Sphere
TimeSyncConfig Valore Boolean che indica se l'applicazione dispone dell'autorizzazione per configurare il servizio di sincronizzazione dell'ora: true se l'applicazione dispone della funzionalità; in caso contrario, false.
Esempio:"TimeSyncConfig" : true
Uart Elenco delle periferiche UART utilizzate dall'applicazione. Questa funzionalità non abilita l'oggetto UART dedicato in una scheda di sviluppo MT3620. Per informazioni sulla UART dedicata, vedere Creare un'applicazione in tempo reale.
In un'applicazione di livello elevato, specificare il nome della periferica dichiarato nel file di intestazione delle definizioni hardware.
In un'RTApp specifica appManifestValue dichiarato nel file JSON di definizione hardware.
Esempio di definizione hardware:"Uart": [ "$MT3620_RDB_HEADER2_ISU0_UART", "$MT3620_RDB_HEADER4_ISU1_UART" ]
Esempio di valore non elaborato:"Uart": [ "ISU0", "ISU1" ]
Riferimento API:Applibs uart.h
Concettuale:Usare UART su Azure Sphere
WifiConfig Valore Boolean che indica se l'applicazione dispone dell'autorizzazione per utilizzare l'API WifiConfig per modificare la configurazione Wi-Fi: true se l'applicazione dispone della funzionalità; in caso contrario, false.
Esempio:"WifiConfig" : true
Riferimento API:Applibs wificonfig.h
Concettuale:Configurare la rete

La sezione MutableStorage supporta quanto segue:

Nome Descrizione
Dimensioni KB Valore integer che specifica le dimensioni dello spazio di archiviazione modificabile in kibibyte. Il valore massimo è 64. Il valore 0 equivale a non avere la funzionalità di archiviazione modificabile.

Esempio

Di seguito viene illustrato un file app_manifest.json di esempio per un'applicazione di alto livello destinata all'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
}

Il file app_manifest.json di esempio per MyTestApp esegue le operazioni seguenti:

  • Passa quattro argomenti della riga di comando all'app.
  • Consente solo 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 tenant Azure Sphere da usare per l'autenticazione del dispositivo e consentire le connessioni al servizio di provisioning dei dispositivi.
  • Specifica l'uso di tre oggetti Criteri di gruppo.
  • Consente all'applicazione di configurare l'indirizzo hardware dell'interfaccia di rete.
  • Specifica l'uso di una periferica UART.
  • Consente lo spazio di archiviazione mutabile con 64 kb di spazio di archiviazione.
  • Consente all'app di utilizzare l'API WifiConfig per modificare la configurazione 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 usando l'API RTC.
  • Abilita la mallocng per lo sviluppo di app.