Toepassingsmanifest

Het toepassingsmanifest beschrijft de resources, ook wel toepassingsmogelijkheden genoemd, die een toepassing vereist. Elke toepassing heeft een toepassingsmanifest.

Toepassingen moeten ervoor kiezen om mogelijkheden te gebruiken door elke vereiste resource te vermelden in de sectie Mogelijkheden van het toepassingsmanifest; er zijn standaard geen mogelijkheden ingeschakeld. Als een toepassing een mogelijkheid aanvraagt die niet wordt vermeld, mislukt de aanvraag. Als het manifestbestand van de toepassing fouten bevat, mislukt het sideloaden van de toepassing. Het manifest van elke toepassing moet worden opgeslagen als app_manifest.json in de hoofdmap van de toepassingsmap op uw pc.

De Azure Sphere-sjabloon maakt automatisch een standaardtoepassingsmanifest wanneer u een toepassing maakt. U moet het standaardmanifest bewerken om de mogelijkheden weer te geven die uw toepassing vereist. Elk Azure Sphere-voorbeeld bevat ook een toepassingsmanifest. Als u uw toepassing baseert op een voorbeeld, moet u waarschijnlijk ook het manifest bewerken.

Verschillende Azure Sphere-apparaten kunnen functies van de chip op verschillende manieren beschikbaar maken. Als gevolg hiervan kan de waarde die u in het manifest gebruikt om een bepaalde functie te identificeren, zoals een GPIO-pincode, variëren, afhankelijk van de hardware waarvoor u ontwikkelt. Doelhardwareafhankelijkheden beheren biedt meer informatie over hardwaredoelen voor een toepassing op hoog niveau. Gebruik in het toepassingsmanifest voor een toepassing op hoog niveau de constanten die zijn gedefinieerd in het JSON-bestand in de map HardwareDefinitions van de Microsoft Azure Sphere SDK-installatiemap. De exacte locatie van de installatiemap verschilt op Windows en Linux. Gebruik in een realtime geschikte toepassing (RTApp) de onbewerkte waarden die worden vermeld in Inhoud van het toepassingsmanifest.

Wanneer een toepassing wordt ge sideloadd of geïmplementeerd op het apparaat, leest de Azure Sphere-runtime het toepassingsmanifest om na te gaan welke mogelijkheden de toepassing mag gebruiken. Pogingen om toegang te krijgen tot resources die niet worden vermeld in het manifest, leiden tot API-fouten, zoals EPERM (machtiging geweigerd). Slechts één toepassing op het apparaat kan een resource gebruiken. Als u een toepassing installeert die een resource aanvraagt die al in gebruik is, mislukt de poging.

Inhoud van het toepassingsmanifest

Het toepassingsmanifest bevat de volgende items:

Naam Beschrijving
SchemaVersion Versie van het manifestschema van de toepassing dat wordt gebruikt. Momenteel moet 1 zijn. Vereist.
Naam Naam van de toepassing. Bij het maken van het project wordt deze waarde ingesteld op de naam van het project. De naam kan elke lengte hebben, maar alleen de eerste 31 tekens worden opgeslagen in het afbeeldingspakket; de naam wordt dus afgekapt weergegeven in vragen over het installatiekopieënpakket. Vereist.
ComponentId Id van het onderdeel. Visual Studio maakt deze id wanneer u de toepassing bouwt. Als u Visual Studio niet gebruikt, raadpleegt u Een onderdeel-id genereren voor informatie over het maken van de id. Vereist.
EntryPoint Naam van het uitvoerbare bestand, samen met het relatieve pad in de installatiekopie van het bestandssysteem van de toepassing, die wordt gemaakt wanneer de toepassing wordt gebouwd. Visual Studio gebruikt momenteel /bin/app voor deze waarde. Vereist.
CmdArgs Argumenten die moeten worden doorgegeven aan de toepassing bij het opstarten. Plaats elk argument tussen dubbele aanhalingstekens en scheid argumenten met een komma. Optionele.
TargetBetaApis Hiermee geeft u op dat de toepassing beta-API's vereist en identificeert de gebruikte set bèta-API's. Dit veld wordt automatisch toegevoegd tijdens het buildproces als de toepassing is gebouwd met behulp van bèta-API's. Optionele. Zie Bètafuncties gebruiken voor meer informatie.
ApplicationType Type toepassing. Optionele. Stel alleen in op Foutopsporingsprogramma als u een vervanging voor gdbserver bouwt.
Mogelijkheden Lijst met sleutel-waardeparen die vereisten voor toepassingsresources opgeven. Vereist.
MallocVersion Een geheel getal dat de versie van malloc aangeeft, waarbij 1=standaard en 2=mallocng, een verbeterde malloc beschikbaar is in MUSL-versies groter dan 1.2.1. Versie 2 wordt aanbevolen voor alle nieuwe app-ontwikkeling.

De sectie Mogelijkheden ondersteunt het volgende:

Opmerking

Toepassingen op hoog niveau kunnen capaciteitswaarden uit hardwaredefinitiebestanden of onbewerkte waarden gebruiken. U kunt beide waardetypen echter niet combineren in dezelfde mogelijkheid. RTApps kan alleen onbewerkte waarden gebruiken voor mogelijkheden.

Naam Beschrijving
Adc De ADC-controller (analog-to-digital conversie) die door de toepassing wordt gebruikt. Deze mogelijkheid reserveert de volledige ADC-controller (die een 8-pins blok bevat), niet alleen pin 0 in het blok.
Geef in een toepassing op hoog niveau de randapparatuurnaam op die is gedeclareerd in het headerbestand van de hardwaredefinitie.
Geef in een RTApp de AppManifestValue op die is gedeclareerd in het JSON-bestand met de hardwaredefinitie.
Voorbeeld van hardwaredefinitie:"Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
Voorbeeld van onbewerkte waarde:"Adc": [ "ADC-CONTROLLER-0" ]
API-verwijzing:Applibs adc.h
Conceptueel:APC's gebruiken in Azure Sphere
AllowedApplicationConnections Een lijst met toepassingsonderdeel-id's waarmee de toepassing verbinding mag maken.
Voorbeeld:"AllowedApplicationConnections": [ "005180BC-402F-4CB3-A662-72937DBCDE47" ]
API-verwijzing:Applibs application.h
Conceptueel:communiceren met een toepassing op hoog niveau
AllowedConnections Een lijst met DNS-hostnamen of IP-adressen (IPv4) waarmee de toepassing verbinding mag maken. Als de toepassing een Azure IoT Hub gebruikt, moet de lijst het IP-adres of de DNS-hostnaam voor de hub bevatten, meestal hub-name.azure-devices.net. Poortnummers en jokertekens in namen en IP-adressen worden niet geaccepteerd.
Voorbeeld:"AllowedConnections" : [ "my-hub.example.net", "global.azure-devices-provisioning.net" ]
AllowedTcpServerPorts Een lijst met poorten die binnenkomend TCP-verkeer toestaan. U kunt maximaal 10 poorten opnemen en elke poort moet afzonderlijk worden vermeld. De ondersteunde poorten zijn 1024 tot en met 65535. U kunt dezelfde poorten opgeven voor zowel TCP als UDP. Als u echter dezelfde poort opgeeft voor meer dan één app op het apparaat, wordt de tweede app die moet worden uitgevoerd, niet geladen.
Voorbeeld:"AllowedTcpServerPorts": [ 1024, 65535 ]
AllowedUdpServerPorts Een lijst met poorten die binnenkomend UDP-verkeer toestaan. U kunt maximaal 10 poorten opnemen en elke poort moet afzonderlijk worden vermeld. De ondersteunde poorten zijn 1024 tot en met 65535. U kunt dezelfde poorten opgeven voor zowel TCP als UDP. Als u echter dezelfde poort opgeeft voor meer dan één app op het apparaat, wordt de tweede app die moet worden uitgevoerd, niet geladen.
Voorbeeld:"AllowedUdpServerPorts": [ 1024, 50000 ]
CertStore Een Booleaanse waarde die aangeeft of een app op hoog niveau gemachtigd is om certificaten te beheren met de CertStore-API: true om de API in te schakelen; anders onwaar.
Voorbeeld:"CertStore" : true
DeviceAuthentication Een tekenreeks die de UUID van de Azure Sphere-tenant (verouderd) aangeeft die moet worden gebruikt voor apparaatverificatie.
Voorbeeld:"DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0"
DhcpService Een Booleaanse waarde die aangeeft of de toepassing gemachtigd is om de DHCP-service te configureren: waar als de toepassing over de mogelijkheid beschikt; anders onwaar.
Voorbeeld:"DhcpService" : true
API-verwijzing:Applibs networking.h
Conceptueel:Netwerkservices gebruiken
EnterpriseWifiConfig Een Booleaanse waarde die aangeeft of een toepassing op hoog niveau gemachtigd is om een EAP-TLS-netwerk te maken en er certificaten aan te koppelen: waar als de toepassing de mogelijkheid heeft; anders onwaar.
Voorbeeld:"EnterpriseWifiConfig" : true
ExternalInterrupt Een lijst met externe interrupts die een RTApp gebruikt. Deze mogelijkheid is niet beschikbaar voor toepassingen op hoog niveau.
Voorbeeld:"ExternalInterrupt": [ "EINT4", "EINT12" ]
Gpio Een lijst met GPIO's die door de toepassing worden gebruikt.
Geef in een toepassing op hoog niveau de GPIO-naam op die is gedeclareerd in het headerbestand van de hardwaredefinitie, zoals $MT 3620_RDB_LED1_RED.
Geef in een RTApp de gehele getallen op die overeenkomen met de GPIO-getallen in het JSON-bestand met de hardwaredefinitie. Met 8 wordt bijvoorbeeld GPIO 8 opgegeven.
Voorbeeld van hardwaredefinitie:"Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]
Voorbeeld van onbewerkte waarde:"Gpio": [ 8, 12 ]
API-verwijzing:Applibs gpio.h
Conceptueel:GPIO's gebruiken in Azure Sphere
HardwareAddressConfig Een Booleaanse waarde die aangeeft of de toepassing gemachtigd is om het hardwareadres van de netwerkinterface te configureren: waar als de toepassing over de mogelijkheid beschikt; anders onwaar.
Voorbeeld:"HardwareAddressConfig" : true
API-verwijzing:Applibs networking.h
Conceptueel:Netwerkservices gebruiken
HeapMemStats Een Booleaanse waarde die aangeeft of het bijhouden van heap-geheugentoewijzing is ingeschakeld: waar als de toepassing over de mogelijkheid beschikt; anders onwaar.
Voorbeeld:"HeapMemStats": true
Conceptueel:Geheugengebruik in toepassingen op hoog niveau
I2cMaster Een lijst met I2C-hoofdinterfaces die door de toepassing worden gebruikt.
Geef in een toepassing op hoog niveau de randapparatuurnaam op die is gedeclareerd in het headerbestand van de hardwaredefinitie.
Geef in een RTApp de AppManifestValue op die is gedeclareerd in het JSON-bestand met de hardwaredefinitie.
Voorbeeld van hardwaredefinitie:"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ]
Voorbeeld van onbewerkte waarde:"I2cMaster": [ "ISU0", "ISU1" ]
API-verwijzing:Applibs i2c.h
Conceptueel:I2C gebruiken met Azure Sphere
I2sSubordinate De onderliggende interface inter-IC Sound (I2S) die wordt gebruikt door een RTApp. Deze mogelijkheid is niet beschikbaar voor toepassingen op hoog niveau. Voorbeeld van onbewerkte waarde: "I2sSubordinate": [ "I2S0", "I2S1" ]
MutableStorage Instellingen voor verwisselbare opslag waarmee de toepassing permanente opslag kan gebruiken.
Voorbeeld:"MutableStorage" : { "SizeKB": 64, }
API-verwijzing:Applibs storage.h
Conceptueel:Opslag gebruiken in Azure Sphere
NetworkConfig Een Booleaanse waarde die aangeeft of de toepassing gemachtigd is om een netwerkinterface te configureren: waar als de toepassing over de mogelijkheid beschikt; anders onwaar.
Voorbeeld:"NetworkConfig" : true
API-verwijzing:Applibs networking.h
Conceptueel:Netwerkservices gebruiken
PowerControls Een matrix van tekenreeksen die gedetailleerde mogelijkheden vertegenwoordigen om de energiestatus van het apparaat te beheren. ForcePowerDown en ForceReboot zijn de enige ondersteunde waarden.
Waarschuwing: Omdat ForcePowerDown en ForceReboot toestaan dat een toepassing alle toepassingen onmiddellijk beëindigt, moet u ervoor zorgen dat uw apparaat nog steeds besturingssysteem- en toepassingsupdates kan ontvangen. Zie Power Down forceren en updates voor meer informatie en richtlijnen.
Voorbeeld:"PowerControls": ["ForcePowerDown", "ForceReboot"]
API-verwijzing:Applibs powermanagement.h
Conceptueel:Power-downstatus beheren voor Azure Sphere-apparaten
Pwm De pulse-width modulator (PWM) die door de toepassing wordt gebruikt.
Geef in een toepassing op hoog niveau de randapparatuurnaam op die is gedeclareerd in het headerbestand van de hardwaredefinitie.
Geef in een RTApp de AppManifestValue op die is gedeclareerd in het JSON-bestand met de hardwaredefinitie.
Voorbeeld van hardwaredefinitie:"Pwm": [ "$MT3620_RDB_LED_PWM_CONTROLLER2" ]
Voorbeeld van onbewerkte waarde:"Pwm": [ "PWM-CONTROLLER-0" ]
API-verwijzing:Applibs pwm.h
Conceptueel:PWM's gebruiken in toepassingen op hoog niveau
ReadNetworkProxyConfig Een Booleaanse waarde die aangeeft of de toepassing gemachtigd is om de proxyconfiguratie op te halen: waar als de toepassing de mogelijkheid heeft; anders onwaar.
Voorbeeld:"ReadNetworkProxyConfig": true
API-verwijzing:Applibs networking.h
Conceptueel:Verbinding maken met webservices
SntpService Een Booleaanse waarde die aangeeft of de toepassing gemachtigd is om de SNTP-service te configureren: waar als de toepassing over de mogelijkheid beschikt; anders onwaar.
Voorbeeld:"SntpService" : true
API-verwijzing:Applibs networking.h
Conceptueel:SNTP-server
SoftwareUpdateDeferral Een Booleaanse waarde die aangeeft of de toepassing toestemming heeft om software-updates voor een beperkte periode uit te stellen: waar als de toepassing de mogelijkheid heeft; anders onwaar.
Voorbeeld:"SoftwareUpdateDeferral" : true
API-verwijzing:Applibs eventloop.H
Conceptueel:Apparaatupdates uitstellen
SpiMaster Een lijst met SPI-masterinterfaces die door de toepassing worden gebruikt.
Geef in een toepassing op hoog niveau de randapparatuurnaam op die is gedeclareerd in het headerbestand van de hardwaredefinitie.
Geef in een RTApp de AppManifestValue op die is gedeclareerd in het JSON-bestand met de hardwaredefinitie.
Voorbeeld van hardwaredefinitie:"SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ]
Voorbeeld van onbewerkte waarde:"SpiMaster": [ "ISU0", "ISU1" ]
API-verwijzing:Applibs spi.h
Conceptueel:SPI gebruiken met Azure Sphere
SystemEventNotifications Een Booleaanse waarde die aangeeft of de toepassing gemachtigd is om systeemgebeurtenismeldingen te ontvangen: waar als de toepassing over de mogelijkheid beschikt; anders onwaar.
Voorbeeld:"SystemEventNotifications" : true
API-verwijzing:Applibs sysevent.h
Conceptueel:Apparaatupdates uitstellen
SystemTime Een Booleaanse waarde die aangeeft of de toepassing gemachtigd is om de systeemtijd te configureren: waar als de toepassing over de mogelijkheid beschikt; anders onwaar.
Voorbeeld:"SystemTime" : true
API-verwijzing:Applibs rtc.h
Conceptueel:Systeemtijd en RTC beheren op Azure Sphere
TimeSyncConfig Een Booleaanse waarde die aangeeft of de toepassing gemachtigd is om de tijdsynchronisatieservice te configureren: waar als de toepassing over de mogelijkheid beschikt; anders onwaar.
Voorbeeld:"TimeSyncConfig" : true
Uart Een lijst met UART-randapparatuur die door de toepassing wordt gebruikt. Met deze mogelijkheid wordt de toegewezen UART niet ingeschakeld op een MT3620-ontwikkelbord. Zie Een realtime toepassing bouwen voor meer informatie over de toegewezen UART.
Geef in een toepassing op hoog niveau de randapparatuurnaam op die is gedeclareerd in het headerbestand van de hardwaredefinitie.
Geef in een RTApp de AppManifestValue op die is gedeclareerd in het JSON-bestand met de hardwaredefinitie.
Voorbeeld van hardwaredefinitie:"Uart": [ "$MT3620_RDB_HEADER2_ISU0_UART", "$MT3620_RDB_HEADER4_ISU1_UART" ]
Voorbeeld van onbewerkte waarde:"Uart": [ "ISU0", "ISU1" ]
API-verwijzing:Applibs uart.h
Conceptueel:UART gebruiken in Azure Sphere
WifiConfig Een Booleaanse waarde die aangeeft of de toepassing gemachtigd is om de WifiConfig-API te gebruiken om de Wi-Fi configuratie te wijzigen: waar als de toepassing de mogelijkheid heeft; anders onwaar.
Voorbeeld:"WifiConfig" : true
API-verwijzing:Applibs wificonfig.h
Conceptueel:Netwerken configureren

De sectie MutableStorage ondersteunt het volgende:

Naam Beschrijving
GrootteKB Een geheel getal dat de grootte van veranderlijke opslag in kibibytes aangeeft. De maximumwaarde is 64. Een waarde van 0 komt overeen met het niet hebben van de verwisselbare opslagcapaciteit.

Voorbeeld

Hieronder ziet u een voorbeeld van een app_manifest.json-bestand voor een toepassing op hoog niveau die is gericht op de MT3620 RDB-hardware:

{
    "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
}

Het voorbeeldbestand app_manifest.json voor MyTestApp doet het volgende:

  • Geeft vier opdrachtregelargumenten door aan de app.
  • Alleen verbindingen met de DNS-hosts my-hub.example.net, contoso.azure-devices.net en global.azure-devices-provisioning.net toestaan.
  • Hiermee staat u binnenkomend TCP-verkeer toe op poorten 1024 en 65535.
  • Hiermee staat u binnenkomend UDP-verkeer toe op poorten 1024 en 50000.
  • Hiermee geeft u een UUID voor azure Sphere (verouderde) tenant op die moet worden gebruikt voor apparaatverificatie en verbindingen met de Device Provisioning Service toestaan.
  • Hiermee geeft u het gebruik van drie GPIO's op.
  • Hiermee kan de toepassing het hardwareadres van de netwerkinterface configureren.
  • Hiermee geeft u het gebruik van één UART-randapparaat op.
  • Hiermee maakt u veranderlijke opslag mogelijk met 64 kibibytes aan opslagruimte.
  • Hiermee kan de app de WifiConfig-API gebruiken om de configuratie van de Wi-Fi te wijzigen.
  • Hiermee geeft u het gebruik van één SPI-hoofdinterface op.
  • Hiermee geeft u het gebruik van één I2C-hoofdinterface op.
  • Hiermee kan de app systeemtijd configureren met behulp van de RTC-API.
  • Hiermee schakelt u mallocng in voor app-ontwikkeling.