Dela via


Programmanifest

Programmanifestet beskriver de resurser, även kallade programfunktioner, som ett program kräver. Varje program har ett programmanifest.

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

Azure Sphere-mallen skapar automatiskt ett standardprogrammanifest när du skapar ett program. Du måste redigera standardmanifestet för att visa de funktioner som krävs för ditt program. 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 funktioner i chipet på olika sätt. Därför kan det värde som 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 maskinvaruberoenden för mål innehåller mer information om maskinvarumål för ett högnivåprogram. I programmanifestet för ett högnivåprogram använder du konstanterna som definieras 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 realtidskompatibelt program (RTApp) använder du de råvärden som anges i Innehållet i programmanifestet.

När något program läses in eller distribueras separat till enheten läser Azure Sphere-körningen programmanifestet för att ta reda på vilka funktioner programmet får använda. Försök att komma åt resurser som inte visas i manifestet resulterar i API-fel som EPERM (nekad behörighet). 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:

Name beskrivning
SchemaVersion Version av programmets manifestschema som används. För närvarande måste vara 1. Obligatoriskt.
Namn Namnet på programmet. När projektet skapas anges det här värdet till namnet på projektet. Namnet kan vara valfritt, men endast de första 31 tecknen lagras i bildpaketet. namnet visas därför trunkerat i förfrågningar om avbildningspaketet. Obligatoriskt.
ComponentId Komponentens ID. Visual Studio skapar det här ID:t när du skapar programmet. Om du inte använder Visual Studio kan du läsa Generera ett komponent-ID för information om hur du skapar ID:t. Obligatoriskt.
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. Obligatoriskt.
CmdArgs Argument som ska skickas till programmet vid start. Omslut varje argument med dubbla citattecken och separata argument med kommatecken. Valfritt.
TargetBetaApis Anger att programmet kräver Beta-API:er och identifierar uppsättningen beta-API:er som används. Det här fältet läggs automatiskt till under byggprocessen om programmet skapas med beta-API:er. Valfritt. Mer information finns i Använda betafunktioner .
ApplicationType Typ av program. Valfritt. Ange endast till Felsökare om du skapar en ersättning för gdbserver.
Funktioner Lista över nyckel/värde-par som anger programresurskrav. Obligatoriskt.
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 stöder följande:

Kommentar

Högnivåprogram kan använda kapacitetsvärden från maskinvarudefinitionsfiler eller använda råvärden. Du kan dock inte blanda båda värdetyperna i samma funktion. RTApps kan endast använda råvärden för funktioner.

Name beskrivning
Adc ADC-kontrollanten (Analog-to-Digital Conversion) som används av programmet. Den här funktionen reserverar hela ADC-styrenheten (som består av ett 8-stiftsblock), inte bara stift 0 i blocket.
I ett högnivåprogram anger du det kringutrustningsnamn som deklareras i huvudfilen för maskinvarudefinitionen.
I en RTApp anger du den AppManifestValue som deklareras i JSON-filen för maskinvarudefinitionen.
Exempel på maskinvarudefinition: "Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
Exempel på råvärde: "Adc": [ "ADC-CONTROLLER-0" ]
API-referens: Applibs adc.h
Konceptuell: Använda ADC:er på Azure Sphere
AllowedApplicationConnections En lista över programkomponent-ID:t 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å
AllowedConnections 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 hubbnamn.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 inkludera 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 kommer den andra appen som ska köras inte att läsas in.
Exempel: "AllowedTcpServerPorts": [ 1024, 65535 ]
AllowedUdpServerPorts En lista över portar som tillåter inkommande UDP-trafik. Du kan inkludera 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 kommer den andra appen som ska köras inte att läsas in.
Exempel: "AllowedUdpServerPorts": [ 1024, 50000 ]
CertStore Ett booleskt värde som anger om en högnivåapp har behörighet att hantera certifikat med CertStore-API:et: sant för att aktivera API:et; 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 Ett booleskt värde 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
Konceptuell: Använda nätverkstjänster
EnterpriseWifiConfig Ett booleskt värde som anger om ett högnivåprogram 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 programmet använder.
I ett högnivåprogram anger du det GPIO-namn som deklareras i huvudfilen för maskinvarudefinitionen, till exempel $MT 3620_RDB_LED1_RED.
I en RTApp anger du de heltal som motsvarar GPIO-numren i JSON-filen för maskinvarudefinitionen. 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å råvärde: "Gpio": [ 8, 12 ]
API-referens: Applibs gpio.h
Konceptuell: Använda GPIOs på Azure Sphere
HardwareAddressConfig Ett booleskt värde 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
Konceptuell: Använda nätverkstjänster
HeapMemStats Ett booleskt värde som anger om spårning av heapminnesallokering är aktiverat: sant om programmet har funktionen; annars falskt.
Exempel: "HeapMemStats": true
Konceptuell:Minnesanvändning i program på hög nivå
I2cMaster En lista över I2C-huvudgränssnitt som används av programmet.
I ett högnivåprogram anger du det kringutrustningsnamn som deklareras i huvudfilen för maskinvarudefinitionen.
I en RTApp anger du den AppManifestValue som deklareras i JSON-filen för maskinvarudefinitionen.
Exempel på maskinvarudefinition: "I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ]
Exempel på råvärde: "I2cMaster": [ "ISU0", "ISU1" ]
API-referens: Applibs i2c.h
Konceptuell: 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å råvärde: "I2sSubordinate": [ "I2S0", "I2S1" ]
MutableStorage Föränderliga lagringsinställningar som gör att programmet kan använda beständig lagring.
Exempel: "MutableStorage" : { "SizeKB": 64, }
API-referens: Applibs storage.h
Konceptuell: Använda lagring på Azure Sphere
NetworkConfig Ett booleskt värde 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
Konceptuell: Använda nätverkstjänster
PowerControls En matris med strängar som representerar detaljerade funktioner för att styra enhetens energitillstånd. 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 Tvinga ned power down och uppdateringar.
Exempel: "PowerControls": ["ForcePowerDown", "ForceReboot"]
API-referens: Applibs powermanagement.h
Konceptuell: Hantera power down-tillstånd för Azure Sphere-enheter
Pwm Modulatorn för pulsbredd (PWM) som används av programmet.
I ett högnivåprogram anger du det kringutrustningsnamn som deklareras i huvudfilen för maskinvarudefinitionen.
I en RTApp anger du den AppManifestValue som deklareras i JSON-filen för maskinvarudefinitionen.
Exempel på maskinvarudefinition: "Pwm": [ "$MT3620_RDB_LED_PWM_CONTROLLER2" ]
Exempel på råvärde: "Pwm": [ "PWM-CONTROLLER-0" ]
API-referens: Applibs pwm.h
Konceptuell: Använda PWM:er i högnivåprogram
ReadNetworkProxyConfig Ett booleskt värde 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
Konceptuell: Ansluta till webbtjänster
SntpService Ett booleskt värde 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 Ett booleskt värde 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
Konceptuell: Skjuta upp enhetsuppdateringar
SpiMaster En lista över SPI-huvudgränssnitt som används av programmet.
I ett högnivåprogram anger du det kringutrustningsnamn som deklareras i huvudfilen för maskinvarudefinitionen.
I en RTApp anger du den AppManifestValue som deklareras i JSON-filen för maskinvarudefinitionen.
Exempel på maskinvarudefinition: "SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ]
Exempel på råvärde: "SpiMaster": [ "ISU0", "ISU1" ]
API-referens: Applibs spi.h
Konceptuell: Använda SPI med Azure Sphere
SystemEventNotifications Ett booleskt värde som anger om programmet har behörighet att ta emot meddelanden om systemhändelser: sant om programmet har funktionen; annars falskt.
Exempel: "SystemEventNotifications" : true
API-referens: Applibs sysevent.h
Konceptuell: Skjuta upp enhetsuppdateringar
SystemTime Ett booleskt värde 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 Ett booleskt värde 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 programmet använder. Den här funktionen aktiverar inte den dedikerade UART på en MT3620-utvecklingstavla. Information om den dedikerade UART finns i Skapa ett realtidskompatibelt program.
I ett högnivåprogram anger du det kringutrustningsnamn som deklareras i huvudfilen för maskinvarudefinitionen.
I en RTApp anger du den AppManifestValue som deklareras i JSON-filen för maskinvarudefinitionen.
Exempel på maskinvarudefinition: "Uart": [ "$MT3620_RDB_HEADER2_ISU0_UART", "$MT3620_RDB_HEADER4_ISU1_UART" ]
Exempel på råvärde: "Uart": [ "ISU0", "ISU1" ]
API-referens: Applibs uart.h
Konceptuell: Använda UART på Azure Sphere
WifiConfig Ett booleskt värde som anger om programmet har behörighet att använda WifiConfig-API:et för att ändra Wi-Fi-konfigurationen: sant om programmet har funktionen; annars falskt.
Exempel: "WifiConfig" : true
API-referens: Applibs wificonfig.h
Konceptuell: Konfigurera nätverk

Avsnittet MutableStorage stöder följande:

Name beskrivning
SizeKB Ett heltal som anger storleken på föränderlig lagring i kibibyte. Det maximala värdet är 64. Värdet 0 motsvarar att inte ha den föränderliga lagringsfunktionen.

Exempel

Följande visar ett exempel app_manifest.json fil för ett högnivåprogram som riktar sig mot MT3620 RDB-maskinvaran:

{
    "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.
  • Tillåter 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 på 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.
  • Tillåter att programmet konfigurerar maskinvaruadressen för nätverksgränssnittet.
  • Anger användningen av en UART-kringutrustning.
  • Möjliggör föränderlig lagring med 64 kibibyte lagringsutrymme.
  • Gör att appen kan använda WifiConfig-API:et för att ändra Wi-Fi-konfigurationen.
  • Anger användningen av ett SPI-huvudgränssnitt.
  • Anger användningen av ett I2C-huvudgränssnitt.
  • Gör att appen kan konfigurera systemtid med hjälp av RTC-API:et.
  • Aktiverar mallocng för apputveckling.