Condividi tramite


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.