Programmanifest

Programmanifestet beskriver de resurser, även kallade programfunktioner, som krävs för ett program. Varje program har ett programmanifest.

Program måste välja att använda funktioner genom att lista varje obligatorisk resurs i avsnittet Funktioner i programmanifestet. inga funktioner är aktiverade som standard. Om ett program begär en funktion som inte finns med i listan misslyckas begäran. Om programmanifestfilen innehåller fel misslyckas försöken att läsa in programmet separat. Varje programs manifest måste lagras som app_manifest.json i rotkatalogen i programmappen på datorn.

Azure Sphere-mallen skapar automatiskt ett standardprogrammanifest när du skapar ett program. Du måste redigera standardmanifestet för att lista de funktioner som krävs i programmet. Varje Azure Sphere-exempel innehåller också ett programmanifest. Om du baserar programmet på ett exempel måste du förmodligen också redigera manifestet.

Olika Azure Sphere-enheter kan exponera kretsens funktioner på olika sätt. Därför kan värdet du använder i manifestet för att identifiera en viss funktion, till exempel en GPIO-pin, variera beroende på vilken maskinvara du utvecklar för. Hantera målmaskinvaruberoenden ger mer information om maskinvarumål för ett program på hög nivå. I programmanifestet för ett program på hög nivå använder du konstanterna som definierats i JSON-filen i mappen HardwareDefinitions i installationskatalogen för Microsoft Azure Sphere SDK. Den exakta platsen för installationskatalogen skiljer sig åt i Windows och Linux. I ett rtapp-kompatibelt program (real-time capable application) använder du de raw-värden som visas i Innehåll i programmanifestet.

När ett program läses in separat eller distribueras till enheten läser Azure Sphere runtime programmanifestet för att ta reda på vilka funktioner programmet tillåts använda. Försök att komma åt resurser som inte visas i manifestet resulterar i API-fel som EPERM (behörighet nekad). Endast ett program på enheten kan använda en resurs. Om du installerar ett program som begär en resurs som redan används misslyckas försöket.

Innehållet i programmanifestet

Programmanifestet innehåller följande:

Namn Beskrivning
SchemaVersion Version av programmanifestschemat som används. För närvarande måste vara 1. Krävs.
Namn Namnet på programmet. När projektet skapas anges det här värdet till namnet på projektet. Namnet kan vara hur långt som helst, men bara de första 31 tecknen lagras i avbildningspaketet. sålunda visas namnet trunkerat i förfrågningar om avbildningspaketet. Krävs.
ComponentId Komponentens ID. Visual Studio skapar detta ID när du skapar programmet. Om du inte använder Visual Studio finns information om hur du skapar ID:t i Generera ett komponent-ID . Krävs.
EntryPoint Namn på den körbara filen tillsammans med den relativa sökvägen i programmets filsystemsbild, som skapas när programmet skapas. Visual Studio använder för närvarande /bin/app för det här värdet. Krävs.
CmdArgs Argument som skickas till programmet vid start. Omge varje argument med dubbla citattecken och avgränsa argumenten med kommatecken. Valfri.
TargetBetaApis Anger att programmet kräver Beta-API:er och identifierar den uppsättning beta-API:er som används. Det här fältet läggs till automatiskt under byggprocessen om programmet skapas med beta-API:er. Valfri. Mer information finns i Använda betafunktioner .
ApplicationType Typ av program. Valfri. Ange endast felsökning om du skapar en ersättning för gdbserver.
Kapacitet Lista över nyckel-/värdepar som anger programresurskrav. Krävs.
MallocVersion Ett heltal som anger versionen av malloc, där 1=standard och 2=mallocng, en förbättrad malloc som är tillgänglig i MUSL-versioner som är större än 1.2.1. Version 2 rekommenderas för all ny apputveckling.

Avsnittet Funktioner har stöd för följande:

Observera

Högnivåprogram kan använda funktionsvärden från maskinvarudefinitionsfiler eller använda raw-värden. Du kan dock inte blanda båda värdetyperna med samma funktion. RTApps kan bara använda raw-värden för funktioner.

Namn Beskrivning
Adc Den analoga till digitala konverteringsstyrenheten (ADC) som används av programmet. Denna funktion reserverar hela ADC-styrenheten (som består av ett 8-stiftsblock), inte bara stift 0 i blocket.
Ange det kringutrustningsnamn som deklareras i maskinvarudefinitionshuvudfilen i ett program på hög nivå.
I en RTApp anger du den AppManifestValue som deklareras i maskinvarudefinitionen JSON-fil.
Exempel på maskinvarudefinition:"Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
Exempel på raw-värde:"Adc": [ "ADC-CONTROLLER-0" ]
API-referens:Applibs adc.h
Konceptuell:Använda ADC på Azure Sphere
AllowedApplicationConnections En lista över programkomponent-ID:na som programmet tillåts ansluta till.
Exempel:"AllowedApplicationConnections": [ "005180BC-402F-4CB3-A662-72937DBCDE47" ]
API-referens:Applibs application.h
Konceptuell:Kommunicera med ett program på hög nivå
Tillåtnaanslutningar En lista över DNS-värdnamn eller IP-adresser (IPv4) som programmet tillåts ansluta till. Om programmet använder en Azure IoT Hub måste listan innehålla IP-adressen eller DNS-värdnamnet för hubben, vanligtvis hubbens namn.azure-devices.net. Portnummer och jokertecken i namn och IP-adresser accepteras inte.
Exempel:"AllowedConnections" : [ "my-hub.example.net", "global.azure-devices-provisioning.net" ]
AllowedTcpServerPorts En lista över portar som tillåter inkommande TCP-trafik. Du kan ta med upp till 10 portar och varje port måste anges individuellt. Portarna som stöds är 1024 till 65535. Du kan ange samma portar för både TCP och UDP. Men om du anger samma port för mer än en app på enheten går det inte att läsa in den andra appen som ska köras.
Exempel:"AllowedTcpServerPorts": [ 1024, 65535 ]
AllowedUdpServerPorts En lista över portar som tillåter inkommande UDP-trafik. Du kan ta med upp till 10 portar och varje port måste anges individuellt. Portarna som stöds är 1024 till 65535. Du kan ange samma portar för både TCP och UDP. Men om du anger samma port för mer än en app på enheten går det inte att läsa in den andra appen som ska köras.
Exempel:"AllowedUdpServerPorts": [ 1024, 50000 ]
CertStore En boolesk som anger om en app på hög nivå har behörighet att hantera certifikat med CertStore API: true för att aktivera API: annars falskt.
Exempel:"CertStore" : true
DeviceAuthentication En sträng som anger UUID för den Azure Sphere-klientorganisation (äldre) som ska användas för enhetsautentisering.
Exempel:"DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0"
DhcpService En boolesk som anger om programmet har behörighet att konfigurera DHCP-tjänsten: sant om programmet har funktionen. annars falskt.
Exempel:"DhcpService" : true
API-referens:Applibs networking.h
Konceptuellt:Använda nätverkstjänster
EnterpriseWifiConfig En boolesk som anger om ett program på hög nivå har behörighet att skapa ett EAP-TLS-nätverk och associera certifikat med det: sant om programmet har funktionen. annars falskt.
Exempel:"EnterpriseWifiConfig" : true
ExternalInterrupt En lista över externa avbrott som en RTApp använder. Den här funktionen är inte tillgänglig för program på hög nivå.
Exempel:"ExternalInterrupt": [ "EINT4", "EINT12" ]
Gpio En lista över GPIOs som används i programmet.
I ett program på hög nivå anger du GPIO-namnet som deklareras i maskinvarudefinitionshuvudfilen, till exempel $MT 3620_RDB_LED1_RED.
I en RTApp anger du de heltal som motsvarar GPIO-numren i maskinvarudefinitionsfilen JSON. Till exempel anger 8 GPIO 8.
Exempel på maskinvarudefinition:"Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]
Exempel på raw-värde:"Gpio": [ 8, 12 ]
API-referens:Applibs gpio.h
Konceptuell:Använda GPIOs på Azure Sphere
HardwareAddressConfig En boolesk som anger om programmet har behörighet att konfigurera maskinvaruadressen för nätverksgränssnittet: sant om programmet har funktionen. annars falskt.
Exempel:"HardwareAddressConfig" : true
API-referens:Applibs networking.h
Konceptuellt:Använda nätverkstjänster
HeapMemStats En boolesk som anger om minnesallokeringsspårning för heap-minne är aktiverat: sant om programmet har funktionen; annars falskt.
Exempel:"HeapMemStats": true
Konceptuellt:Minnesanvändning i program på hög nivå
I2cMaster En lista över I2C-huvudgränssnitt som används av programmet.
Ange det kringutrustningsnamn som deklareras i maskinvarudefinitionshuvudfilen i ett program på hög nivå.
I en RTApp anger du den AppManifestValue som deklareras i maskinvarudefinitionen JSON-fil.
Exempel på maskinvarudefinition:"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ]
Exempel på raw-värde:"I2cMaster": [ "ISU0", "ISU1" ]
API-referens:Applibs i2c.h
Konceptuellt:Använda I2C med Azure Sphere
I2sSubordinate Det underordnade gränssnittet Inter-IC Sound (I2S) som används av en RTApp. Den här funktionen är inte tillgänglig för program på hög nivå. Exempel på raw-värde: "I2sSubordinate": [ "I2S0", "I2S1" ]
MutableStorage Mutable storage settings that allow the application to use persistent storage.
Exempel:"MutableStorage" : { "SizeKB": 64, }
API-referens:Applibs storage.h
Konceptuell:Använda lagring på Azure Sphere
NetworkConfig En boolesk som anger om programmet har behörighet att konfigurera ett nätverksgränssnitt: sant om programmet har funktionen. annars falskt.
Exempel:"NetworkConfig" : true
API-referens:Applibs networking.h
Konceptuellt:Använda nätverkstjänster
PowerControls En matris med strängar som representerar detaljerade funktioner för att styra enhetens energiläge. ForcePowerDown och ForceReboot är de enda värden som stöds.
Varning: Eftersom ForcePowerDown och ForceReboot tillåter att ett program omedelbart avslutar alla program måste du se till att enheten fortfarande kan ta emot operativsystem- och programuppdateringar. Mer information och vägledning finns i Framtvinga avstängning och uppdateringar.
Exempel:"PowerControls": ["ForcePowerDown", "ForceReboot"]
API-referens:Applibs powermanagement.h
Konceptuellt:Hantera energisparläge för Azure Sphere-enheter
Pwm Den pulsbreddsmodulator (PWM) som används av programmet.
Ange det kringutrustningsnamn som deklareras i maskinvarudefinitionshuvudfilen i ett program på hög nivå.
I en RTApp anger du den AppManifestValue som deklareras i maskinvarudefinitionen JSON-fil.
Exempel på maskinvarudefinition:"Pwm": [ "$MT3620_RDB_LED_PWM_CONTROLLER2" ]
Exempel på raw-värde:"Pwm": [ "PWM-CONTROLLER-0" ]
API-referens:Applibs pwm.h
Konceptuellt:Använda PWMs i program på hög nivå
ReadNetworkProxyConfig En boolesk som anger om programmet har behörighet att hämta proxykonfigurationen: sant om programmet har funktionen. annars falskt.
Exempel:"ReadNetworkProxyConfig": true
API-referens:Applibs networking.h
Konceptuellt:Ansluta till webbtjänster
SntpService En boolesk som anger om programmet har behörighet att konfigurera SNTP-tjänsten: sant om programmet har funktionen. annars falskt.
Exempel:"SntpService" : true
API-referens:Applibs networking.h
Konceptuell:SNTP-server
SoftwareUpdateDeferral En boolesk som anger om programmet har behörighet att skjuta upp programuppdateringar under en begränsad period: sant om programmet har funktionen; annars falskt.
Exempel:"SoftwareUpdateDeferral" : true
API-referens:Applibs eventloop.H
Konceptuellt:Skjuta upp enhetsuppdateringar
SpiMaster En lista över SPI-huvudgränssnitt som används av programmet.
Ange det kringutrustningsnamn som deklareras i maskinvarudefinitionshuvudfilen i ett program på hög nivå.
I en RTApp anger du den AppManifestValue som deklareras i maskinvarudefinitionen JSON-fil.
Exempel på maskinvarudefinition:"SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ]
Exempel på raw-värde:"SpiMaster": [ "ISU0", "ISU1" ]
API-referens:Applibs spi.h
Konceptuell:Använda SPI med Azure Sphere
SystemEventNotifications En boolesk som anger om programmet har behörighet att ta emot aviseringar om systemhändelser: sant om programmet har funktionen. annars falskt.
Exempel:"SystemEventNotifications" : true
API-referens:Applibs sysevent.h
Konceptuellt:Skjuta upp enhetsuppdateringar
SystemTime En boolesk som anger om programmet har behörighet att konfigurera systemtiden: sant om programmet har funktionen. annars falskt.
Exempel:"SystemTime" : true
API-referens:Applibs rtc.h
Konceptuell:Hantera systemtid och RTC på Azure Sphere
TimeSyncConfig En boolesk som anger om programmet har behörighet att konfigurera tidssynkroniseringstjänsten: sant om programmet har funktionen. annars falskt.
Exempel:"TimeSyncConfig" : true
Uart En lista över UART-kringutrustning som används i programmet. Den här funktionen aktiverar inte dedikerad UART på en MT3620-utvecklingstavla. Mer information om den dedikerade UART-grafiken finns i Skapa ett program som kan användas i realtid.
Ange det kringutrustningsnamn som deklareras i maskinvarudefinitionshuvudfilen i ett program på hög nivå.
I en RTApp anger du den AppManifestValue som deklareras i maskinvarudefinitionen JSON-fil.
Exempel på maskinvarudefinition:"Uart": [ "$MT3620_RDB_HEADER2_ISU0_UART", "$MT3620_RDB_HEADER4_ISU1_UART" ]
Exempel på raw-värde:"Uart": [ "ISU0", "ISU1" ]
API-referens:Applibs uart.h
Konceptuellt:Använda UART på Azure Sphere
WifiConfig En boolesk som anger om programmet har behörighet att använda WifiConfig-API:t för att ändra konfigurationen för Wi-Fi: sant om programmet har funktionen; annars falskt.
Exempel:"WifiConfig" : true
API-referens:Applibs wificonfig.h
Konceptuell:Konfigurera nätverk

Avsnittet MutableStorage har stöd för följande:

Namn Beskrivning
StorlekKB Ett heltal som anger storleken på mutable storage i kibibyte. Maxvärdet är 64. Värdet 0 motsvarar att du inte har den mutbara lagringsfunktionen.

Exempel

Följande visar en exempelfil app_manifest.json för ett program på hög nivå som riktar in sig på RDB-maskinvaran för 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
}

Exempelfilen app_manifest.json för MyTestApp gör följande:

  • Skickar fyra kommandoradsargument till appen.
  • Endast anslutningar till DNS-värdarna my-hub.example.net, contoso.azure-devices.net och global.azure-devices-provisioning.net.
  • Tillåter inkommande TCP-trafik på portarna 1024 och 65535.
  • Tillåter inkommande UDP-trafik i portarna 1024 och 50000.
  • Anger en Azure Sphere-klientorganisation (äldre) UUID som ska användas för enhetsautentisering och tillåter anslutningar till Enhetsetableringstjänsten.
  • Anger användningen av tre GPIOs.
  • Gör att programmet kan konfigurera maskinvaruadressen för nätverksgränssnittet.
  • Anger användningen av en UART-kringutrustning.
  • Aktiverar mutable storage med 64 kibibyte lagringsutrymme.
  • Gör att appen kan använda WifiConfig-API:et för att ändra konfigurationen för Wi-Fi.
  • Anger användningen av ett SPI-huvudgränssnitt.
  • Anger användningen av ett I2C-huvudgränssnitt.
  • Aktiverar appen för att konfigurera systemtid med RTC API.
  • Aktiverar mallocng för apputveckling.