Partager via


Manifeste d’application

Le manifeste d’application décrit les ressources, également appelées fonctionnalités d’application, exigées par une application. Chaque application dispose d’un manifeste d’application.

Les applications doivent accepter d’utiliser les fonctionnalités en listant chaque ressource exigée dans la section Capabilities du manifeste d’application. Aucune fonctionnalité n’est activée par défaut. Si une application nécessite une fonctionnalité qui n’est pas listée, la requête échoue. Si le fichier manifeste de l’application contient des erreurs, les tentatives de chargement indépendant (sideloading) de l’application échouent. Chaque manifeste de l’application doit être stocké sous forme de fichier app_manifest.json dans le répertoire racine du dossier d’application sur votre PC.

Le modèle Azure Sphere crée automatiquement un manifeste de l’application par défaut quand vous créez une application. Vous devez modifier le manifeste par défaut pour lister les fonctionnalités exigées par votre application. Chaque exemple Azure Sphere comprend également un manifeste de l’application. Si vous basez votre application sur un exemple, vous devrez probablement aussi modifier le manifeste.

Différents appareils Azure Sphere peuvent exposer des composants de la puce de différentes façons. Ainsi, la valeur que vous utilisez dans le manifeste pour identifier un composant particulier, comme une broche GPIO, peut varier en fonction du matériel pour lequel vous développez. Gérer les dépendances matérielles cibles fournit plus d’informations sur les cibles matérielles d’une application générale. Dans le manifeste de l’application pour une application de haut niveau, utilisez les constantes définies dans le fichier JSON dans le dossier HardwareDefinitions du répertoire d’installation du Kit de développement logiciel (SDK) Microsoft Azure Sphere. L’emplacement exact du répertoire d’installation diffère sur Windows et Linux. Dans une application en temps réel, utilisez les valeurs brutes listées dans Contenu du manifeste de l’application.

Quand une application est chargée de façon indépendante ou déployée sur l’appareil, le runtime Azure Sphere lit le manifeste de l’application afin d’identifier les fonctionnalités que l’application est autorisée à utiliser. Les tentatives d’accès aux ressources qui ne sont pas listées dans le manifeste provoquent des erreurs d’API comme EPERM (autorisation refusée). Une seule application sur l’appareil peut utiliser une ressource. Si vous installez une application qui demande une ressource déjà utilisée, la tentative échoue.

Contenu du manifeste de l’application

Le manifeste d’application inclut les éléments suivants :

Nom Description
SchemaVersion Version du schéma de manifeste d’application en cours d’utilisation. Actuellement, ce doit être 1. Obligatoire.
Nom Nom de l’application. Lors de la création du projet, cette valeur est définie sur le nom du projet. Le nom peut être n’importe quelle longueur, mais seuls les 31 premiers caractères sont stockés dans le package d’image ; ainsi, le nom apparaît tronqué dans les demandes sur le package d’image. Obligatoire.
ComponentId ID du composant. Visual Studio crée cet ID quand vous générez l’application. Si vous n’utilisez pas Visual Studio, consultez Générer un ID de composant pour plus d’informations sur la création de l’ID. Obligatoire.
EntryPoint Nom du fichier exécutable avec le chemin relatif dans l’image de système de fichiers de l’application, laquelle est créée quand l’application est générée. Visual Studio utilise actuellement /bin/app pour cette valeur. Obligatoire.
CmdArgs Arguments qui doivent être passés à l’application au démarrage. Mettez chaque argument entre guillemets doubles et séparez les différents arguments par une virgule. facultatif.
TargetBetaApis Spécifie que l’application doit utiliser des API bêta et identifie l’ensemble des API bêta utilisées. Ce champ est automatiquement ajouté pendant le processus de génération si l’application est générée avec des API bêta. facultatif. Pour plus d’informations, consultez Utiliser les fonctionnalités bêta.
ApplicationType Type d’application. facultatif. Définissez cette valeur sur Débogueur uniquement si vous générez un remplacement pour gdbserver.
Capabilities Liste des paires clé/valeur qui spécifient les besoins en ressources de l’application. Obligatoire.
MallocVersion Entier qui spécifie la version de malloc, où 1=standard et 2=mallocng, un malloc amélioré disponible dans les versions MUSL supérieures à 1.2.1. La version 2 est recommandée pour tout nouveau développement d’applications.

La section Capabilities prend en charge les éléments suivants :

Remarque

Les applications de haut niveau peuvent utiliser des valeurs de capacité de fichiers de définition de matériel ou des valeurs brutes. Toutefois, vous ne pouvez pas mélanger les deux types de valeur dans la même capacité. RTApps ne peut utiliser que des valeurs brutes pour les fonctionnalités.

Nom Description
Adc Contrôleur de conversion analogique à numérique (ADC) utilisé par l’application. Cette fonctionnalité réserve le contrôleur ADC entier (constitué d’un bloc de 8 broches), et pas seulement la broche 0 du bloc.
Dans une application générale, spécifiez le nom du périphérique qui est déclaré dans le fichier d’en-tête de définition matérielle.
Dans une application temps réel, spécifiez la valeur AppManifestValue qui est déclarée dans le fichier JSON de définition du matériel.
Exemple de définition de matériel : "Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
Exemple de valeur brute : "Adc": [ "ADC-CONTROLLER-0" ]
Informations de référence sur l’API : Applibs adc.h
Conceptuel : utilisation des ADC sur Azure Sphere
AllowedApplicationConnections Liste des ID de composant d’application auxquels l’application est autorisée à se connecter.
Exemple : "AllowedApplicationConnections": [ "005180BC-402F-4CB3-A662-72937DBCDE47" ]
Informations de référence sur l’API : Applicationbs application.h
Conceptuel : Communiquer avec une application de haut niveau
AllowedConnections Liste des noms d’hôtes DNS ou des adresses IP (IPv4) auxquels l’application est autorisée à se connecter. Si l’application utilise un hub Azure IoT, la liste doit inclure l’adresse IP ou le nom d’hôte DNS du hub, généralement nom_hub.azure-devices.net. Les numéros de port et les caractères génériques dans les noms et les adresses IP ne sont pas acceptés.
Exemple : "AllowedConnections" : [ "my-hub.example.net", "global.azure-devices-provisioning.net" ]
AllowedTcpServerPorts Liste des ports qui autorisent le trafic TCP entrant. Vous pouvez inclure jusqu’à 10 ports, listés individuellement. Les ports pris en charge sont compris entre 1 024 et 65 535. Vous pouvez spécifier les mêmes ports pour le trafic TCP et UDP. Toutefois, si vous spécifiez le même port pour plusieurs applications sur l’appareil, la deuxième application devant s’exécuter ne sera pas chargée.
Exemple : "AllowedTcpServerPorts": [ 1024, 65535 ]
AllowedUdpServerPorts Liste des ports qui autorisent le trafic UDP entrant. Vous pouvez inclure jusqu’à 10 ports, listés individuellement. Les ports pris en charge sont compris entre 1 024 et 65 535. Vous pouvez spécifier les mêmes ports pour le trafic TCP et UDP. Toutefois, si vous spécifiez le même port pour plusieurs applications sur l’appareil, la deuxième application devant s’exécuter ne sera pas chargée.
Exemple : "AllowedUdpServerPorts": [ 1024, 50000 ]
CertStore Valeur booléenne qui indique si une application de haut niveau a l’autorisation de gérer des certificats avec l’API CertStore : true pour activer l’API ; sinon, false.
Exemple : "CertStore" : true
DeviceAuthentication Chaîne qui spécifie l’UUID du locataire Azure Sphere (hérité) à utiliser pour l’authentification de l’appareil.
Exemple : "DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0"
DhcpService Valeur booléenne qui indique si l’application a l’autorisation de configurer le service DHCP : true si l’application a la fonctionnalité ; sinon, false.
Exemple : "DhcpService" : true
Informations de référence sur l’API : Applibs networking.h
Conceptual : Utiliser les services réseau
EnterpriseWifiConfig Boolean qui indique si une application de haut niveau a l’autorisation de créer un réseau EAP-TLS et d’associer des certificats à celui-ci : true si l’application a la capacité ; sinon, false.
Exemple : "EnterpriseWifiConfig" : true
ExternalInterrupt Liste des interruptions externes qu’utilise une application RTApp. Cette fonctionnalité n’est pas disponible pour les applications générales.
Exemple : "ExternalInterrupt": [ "EINT4", "EINT12" ]
Gpio Liste des GPIO utilisés par l’application.
Dans une application générale, spécifiez le nom GPIO qui est déclaré dans le fichier d’en-tête de définition matérielle, comme $MT3620_RDB_LED1_RED.
Dans une application en temps réel, spécifiez les entiers qui correspondent aux chiffres GPIO dans le fichier JSON de définition matérielle. Par exemple, 8 spécifie GPIO 8.
Exemple de définition de matériel : "Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]
Exemple de valeur brute : "Gpio": [ 8, 12 ]
Informations de référence sur l’API : Applibs gpio.h
Conceptual : utilisation de GPIOs sur Azure Sphere
HardwareAddressConfig Valeur booléenne qui indique si l’application a l’autorisation de configurer l’adresse matérielle de l’interface réseau : true si l’application a la capacité ; sinon, false.
Exemple :"HardwareAddressConfig" : true
Informations de référence sur l’API : Applibs networking.h
Conceptual : Utiliser les services réseau
HeapMemStats Valeur booléenne qui indique si le suivi de l’allocation de mémoire du tas est activé : true si l’application a la capacité ; sinon, false.
Exemple : "HeapMemStats": true
Conceptual :Memory use in high-level applications
I2cMaster Liste des interfaces maîtres I2C utilisées par l’application.
Dans une application générale, spécifiez le nom du périphérique qui est déclaré dans le fichier d’en-tête de définition matérielle.
Dans une application en temps réel, spécifiez la valeur AppManifestValue qui est déclarée dans le fichier JSON de définition matérielle.
Exemple de définition de matériel : "I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ]
Exemple de valeur brute : "I2cMaster": [ "ISU0", "ISU1" ]
Informations de référence sur l’API : Applibs i2c.h
Conceptual : Utilisation d’I2C avec Azure Sphere
I2sSubordinate Interface subordonnée I2S (Inter-IC Sound) utilisée par une application en temps réel. Cette fonctionnalité n’est pas disponible pour les applications générales. Exemple de valeur brute : « I2sSubordinate » : [ « I2S0 », « I2S1 » ]
MutableStorage Paramètres de stockage mutables autorisant l’application à utiliser un stockage persistant.
Exemple : "MutableStorage" : { "SizeKB": 64, }
Informations de référence sur l’API : Applibs storage.h
Conceptuel : Utilisation du stockage sur Azure Sphere
NetworkConfig Valeur booléenne qui indique si l’application a l’autorisation de configurer une interface réseau : true si l’application a la capacité ; sinon, false.
Exemple : "NetworkConfig" : true
Informations de référence sur l’API : Applibs networking.h
Conceptual : Utiliser les services réseau
PowerControls Tableau de chaînes qui représentent des fonctionnalités précises pour contrôler l’état de l’alimentation de l’appareil. ForcePowerDown et ForceReboot sont les seules valeurs prises en charge.
Avertissement : Étant donné que ForcePowerDown et ForceReboot permettent à une application d’arrêter immédiatement toutes les applications, vous devez vous assurer que votre appareil est toujours en mesure de recevoir les mises à jour du système d’exploitation et de l’application. Pour plus d’informations et de conseils, consultez Forcer la consommation minimale et les mises à jour.
Exemple : "PowerControls": ["ForcePowerDown", "ForceReboot"]
Informations de référence sur l’API : Applicationsbs powermanagement.h
Conceptual : Gérer l’état de mise hors tension pour les appareils Azure Sphere
Pwm Modulateur de largeur d’impulsion (PWM) utilisé par l’application.
Dans une application générale, spécifiez le nom du périphérique qui est déclaré dans le fichier d’en-tête de définition matérielle.
Dans une application en temps réel, spécifiez la valeur AppManifestValue qui est déclarée dans le fichier JSON de définition matérielle.
Exemple de définition de matériel : "Pwm": [ "$MT3620_RDB_LED_PWM_CONTROLLER2" ]
Exemple de valeur brute : "Pwm": [ "PWM-CONTROLLER-0" ]
Informations de référence sur l’API : Applicationsbs pwm.h
Conceptual : Utiliser des PWM dans des applications de haut niveau
ReadNetworkProxyConfig Valeur booléenne qui indique si l’application a l’autorisation de récupérer la configuration du proxy : true si l’application a la capacité ; sinon, false.
Exemple : "ReadNetworkProxyConfig": true
Informations de référence sur l’API : Applibs networking.h
Conceptual : Se connecter aux services web
SntpService Valeur booléenne qui indique si l’application a l’autorisation de configurer le service SNTP : true si l’application a la capacité ; sinon, false.
Exemple : "SntpService" : true
Informations de référence sur l’API : Applibs networking.h
Conceptual : serveur SNTP
SoftwareUpdateDeferral Valeur booléenne qui indique si l’application a l’autorisation de différer les mises à jour logicielles pendant une période limitée : true si l’application a la capacité ; sinon, false.
Exemple : "SoftwareUpdateDeferral" : true
Informations de référence sur l’API : Applibs eventloop.h
Conceptuel : différer les mises à jour des appareils
SpiMaster Liste des interfaces maîtres SPI utilisées par l’application.
Dans une application générale, spécifiez le nom du périphérique qui est déclaré dans le fichier d’en-tête de définition matérielle.
Dans une application en temps réel, spécifiez la valeur AppManifestValue qui est déclarée dans le fichier JSON de définition matérielle.
Exemple de définition de matériel : "SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ]
Exemple de valeur brute : "SpiMaster": [ "ISU0", "ISU1" ]
Informations de référence sur l’API : Applibs spi.h
Conceptual : Utilisation de SPI avec Azure Sphere
SystemEventNotifications Valeur booléenne qui indique si l’application a l’autorisation de recevoir des notifications d’événements système : true si l’application a la capacité ; sinon, false.
Exemple : "SystemEventNotifications" : true
Informations de référence sur l’API : Applibs sysevent.h
Conceptuel : différer les mises à jour des appareils
SystemTime Valeur booléenne qui indique si l’application a l’autorisation de configurer l’heure système : true si l’application a la capacité ; sinon, false.
Exemple : "SystemTime" : true
Informations de référence sur l’API : Applibs rtc.h
Conceptual : Gérer l’heure système et le RTC sur Azure Sphere
TimeSyncConfig Boolean qui indique si l’application a l’autorisation de configurer le service de synchronisation temporelle : true si l’application a la capacité ; sinon, false.
Exemple : "TimeSyncConfig" : true
Uart Liste de périphériques UART que l’application utilise. Cette fonctionnalité n’active pas le périphérique UART dédié sur une carte de développement MT3620. Pour plus d’informations sur l’UART dédié, consultez Générer une application compatible en temps réel.
Dans une application générale, spécifiez le nom du périphérique qui est déclaré dans le fichier d’en-tête de définition matérielle.
Dans une application en temps réel, spécifiez la valeur AppManifestValue qui est déclarée dans le fichier JSON de définition matérielle.
Exemple de définition de matériel : "Uart": [ "$MT3620_RDB_HEADER2_ISU0_UART", "$MT3620_RDB_HEADER4_ISU1_UART" ]
Exemple de valeur brute : "Uart": [ "ISU0", "ISU1" ]
Informations de référence sur l’API : Applibs uart.h
Conceptual : Utiliser UART sur Azure Sphere
WifiConfig Boolean qui indique si l’application a l’autorisation d’utiliser l’API WifiConfig pour modifier la configuration Wi-Fi : true si l’application a la fonctionnalité ; sinon, false.
Exemple : "WifiConfig" : true
Informations de référence sur l’API : Applibs wificonfig.h
Conceptual : Configurer la mise en réseau

La section MutableStorage prend en charge les éléments suivants :

Nom Description
SizeKB Entier qui spécifie la taille de stockage mutable en kibioctets. La valeur maximale est 64. La valeur 0 équivaut à ne pas avoir la capacité de stockage mutable.

Exemple

L’exemple suivant illustre un fichier app_manifest.json pour une application générale qui cible le matériel 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
}

L’exemple de fichier app_manifest.json pour MyTestApp :

  • Passe quatre arguments de ligne de commande à l’application.
  • Autorise uniquement les connexions aux hôtes DNS my-hub.example.net, contoso.azure-devices.net et global.azure-devices-provisioning.net.
  • Autorise le trafic TCP entrant sur les ports 1024 et 65535.
  • Autorise le trafic UDP entrant sur les ports 1024 et 50000.
  • Spécifie un UUID de locataire Azure Sphere (hérité) à utiliser pour l’authentification de l’appareil et autoriser les connexions au service Device Provisioning.
  • Spécifie l’utilisation de trois GPIO.
  • Permet à l’application de configurer l’adresse matérielle de l’interface réseau.
  • Spécifie l’utilisation d’un périphérique UART.
  • Active le stockage mutable avec 64 kibioctets d’espace de stockage.
  • Autorise l’application à utiliser l’API WifiConfig pour changer la configuration du Wi-Fi.
  • Spécifie l’utilisation d’une seule interface maître SPI.
  • Spécifie l’utilisation d’une seule interface maître I2C.
  • Autorise l’application à configurer l’heure système à l’aide de l’API RTC.
  • Active mallocng pour le développement d’applications.