Manifest aplikacji

W manifeście aplikacji opisano zasoby, nazywane również możliwościami aplikacji, których wymaga aplikacja. Każda aplikacja ma manifest aplikacji.

Aplikacje muszą zdecydować się na korzystanie z funkcji, umieszczając każdy wymagany zasób w sekcji Możliwości w manifeście aplikacji. żadne funkcje nie są domyślnie włączone. Jeśli aplikacja zażąda funkcji, która nie jest wymieniona, żądanie kończy się niepowodzeniem. Jeśli plik manifestu aplikacji zawiera błędy, próby załadowania lokalnego aplikacji kończą się niepowodzeniem. Manifest każdej aplikacji musi być przechowywany jako app_manifest.json w katalogu głównym folderu aplikacji na komputerze.

Szablon Azure Sphere automatycznie tworzy domyślny manifest aplikacji podczas tworzenia aplikacji. Aby wyświetlić listę funkcji wymaganych przez aplikację, należy edytować manifest domyślny. Każda próbka usługi Azure Sphere zawiera również manifest aplikacji. Jeśli aplikacja jest twoją aplikacją na podstawie przykładu, prawdopodobnie konieczne będzie również edytowanie manifestu.

Różne urządzenia Azure Sphere mogą udostępniać funkcje mikroukładu na różne sposoby. W związku z tym wartość użyta w manifeście do identyfikowania określonej funkcji, takiej jak numer PIN gpIO, może się różnić w zależności od sprzętu, dla którego pracujesz. Zarządzanie docelowymi zależnościami sprzętowymi zapewnia więcej informacji na temat obiektów docelowych sprzętu dla aplikacji wysokiego poziomu. W manifeście aplikacji dla aplikacji wysokiego poziomu użyj stałych zdefiniowanych w pliku JSON w folderze HardwareDefinitions katalogu instalacji narzędzia Microsoft Azure Sphere SDK. Dokładna lokalizacja katalogu instalacji będzie się różnić w systemach Windows i Linux. W aplikacji obsługowej w czasie rzeczywistym (RTApp) użyj wartości raw wymienionych w obszarze Zawartość manifestu aplikacji.

Gdy dowolna aplikacja jest ładowana lokalnie lub wdrożona na urządzeniu, środowisko uruchomieniowe Azure Sphere odczytuje manifest aplikacji, aby ustalić, których funkcji aplikacja może używać. Próby uzyskania dostępu do zasobów, które nie są wymienione w manifeście, spowodują błędy interfejsu API, takie jak EPERM (odmowa uprawnień). Tylko jedna aplikacja na urządzeniu może korzystać z zasobu. Jeśli zainstalujesz aplikację, która zażąda zasobu, który jest już używany, próba zakończy się niepowodzeniem.

Zawartość manifestu aplikacji

Manifest aplikacji zawiera następujące elementy:

Nazwa Opis
SchemaVersion Wersja schematu manifestu aplikacji w użyciu. Obecnie musi to być liczba 1. Wymagane.
Nazwa Nazwa aplikacji. Podczas tworzenia projektu ta wartość jest ustawiona na nazwę projektu. Nazwa może mieć dowolną długość, ale w pakiecie obrazów jest przechowywanych tylko 31 pierwszych znaków. w ten sposób nazwa jest obcinana do zapytań dotyczących pakietu obrazów. Wymagane.
Componentid Identyfikator składnika. Program Visual Studio tworzy ten identyfikator podczas tworzenia aplikacji. Jeśli nie używasz programu Visual Studio, zobacz Generowanie identyfikatora składnika , aby uzyskać informacje na temat tworzenia identyfikatora. Wymagane.
Entrypoint Nazwa pliku wykonywalnego wraz ze ścieżką względną w obrazie systemu plików aplikacji, który jest tworzony podczas tworzenia aplikacji. Obecnie dla tej wartości program Visual Studio używa wartości /bin/app. Wymagane.
CmdArgs Argumenty przekazywane do aplikacji podczas uruchamiania. Każdy argument należy ująć w podwójny cudzysłów i rozdzielić przecinkami. Opcjonalne.
TargetBetaApis Określa, że aplikacja wymaga interfejsów API wersji beta i identyfikuje zestaw używanych interfejsów API wersji beta. To pole jest dodawane automatycznie podczas procesu tworzenia, jeśli aplikacja jest skompilowana przy użyciu interfejsów API beta. Opcjonalne. Aby uzyskać szczegółowe informacje, zobacz Korzystanie z funkcji wersji beta .
ApplicationType (Typ aplikacji) Typ aplikacji. Opcjonalne. Ustaw wartość Debuger tylko wtedy, gdy konstruujesz zamianę na gdbserver.
Możliwości Lista par klucz/wartości określających wymagania dotyczące zasobów aplikacji. Wymagane.
MallocVersion Liczba całkowita określająca wersję malloc, gdzie 1=standard i 2=mallocng, rozszerzone malloc dostępne w wersjach MUSL większych niż 1.2.1. Wersja 2 jest zalecana do tworzenia wszystkich nowych aplikacji.

W sekcji Możliwości są obsługiwane następujące elementy:

Uwaga

Aplikacje wysokiego poziomu mogą używać wartości możliwości z plików definicji sprzętu lub używać wartości raw. Nie można jednak mieszać obu typów wartości w tej samej funkcji. Funkcja RTApps może używać tylko nieprzetworzonych wartości do obsługi funkcji.

Nazwa Opis
Adc Kontroler konwersji analogowo-cyfrowej (ADC) używany przez aplikację. Ta funkcja rezerwuje cały kontroler ADC (który składa się z 8-pin bloku), a nie tylko pin 0 w bloku.
W aplikacji wysokiego poziomu określ nazwę urządzenia peryferyjnego deklarowaną w pliku nagłówka definicji sprzętu.
W programie RTApp określ wartość AppManifestValue deklarowaną w pliku JSON definicji sprzętu.
Przykład definicji sprzętu:"Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
Przykład wartości raw:"Adc": [ "ADC-CONTROLLER-0" ]
Odwołanie do interfejsu API:Applibs adc.h
Poglądowa:używanie komputerów ADCs w usłudze Azure Sphere
AllowedApplicationConnections Lista identyfikatorów składników aplikacji, z którymi aplikacja może się połączyć.
Przykład:"AllowedApplicationConnections": [ "005180BC-402F-4CB3-A662-72937DBCDE47" ]
Dokumentacja interfejsu API:Applibs application.h
Poglądowa:Komunikowanie się za pomocą aplikacji wysokiego poziomu
Dozwolone połączenia Lista nazw hostów DNS lub adresów IP (IPv4), z którymi aplikacja może się połączyć. Jeśli aplikacja korzysta z Azure IoT Hub, lista musi zawierać adres IP lub nazwę hosta DNS centrum, zwykle hub-name.azure-devices.net. Numery portów i symbole wieloznaczne w nazwach i adresach IP nie są akceptowane.
Przykład:"AllowedConnections" : [ "my-hub.example.net", "global.azure-devices-provisioning.net" ]
AllowedTcpServerPorts Lista portów, które umożliwiają przychodzący ruch TCP. Możesz dołączyć maksymalnie 10 portów, a każdy port musi być wymieniony osobno. Obsługiwane porty to od 1024 do 65535. Możesz określić te same porty zarówno dla protokołu TCP, jak i UDP. Jeśli jednak określisz ten sam port dla więcej niż jednej aplikacji na urządzeniu, druga aplikacja do uruchomienia nie zostanie załadowana.
Przykład:"AllowedTcpServerPorts": [ 1024, 65535 ]
AllowedUdpServerPorts Lista portów, które umożliwiają przychodzący ruch UDP. Możesz dołączyć maksymalnie 10 portów, a każdy port musi być wymieniony osobno. Obsługiwane porty to od 1024 do 65535. Możesz określić te same porty zarówno dla protokołu TCP, jak i UDP. Jeśli jednak określisz ten sam port dla więcej niż jednej aplikacji na urządzeniu, druga aplikacja do uruchomienia nie zostanie załadowana.
Przykład:"AllowedUdpServerPorts": [ 1024, 50000 ]
CertStore Wartość logiczna wskazująca, czy aplikacja wysokiego poziomu ma uprawnienia do zarządzania certyfikatami za pomocą interfejsu API CertStore: true, aby włączyć interfejs API; w przeciwnym razie fałsz.
Przykład:"CertStore" : true
DeviceAuthentication Ciąg określający identyfikator użytkownika dzierżawy usługi Azure Sphere (starszej wersji), który ma być używany do uwierzytelniania urządzenia.
Przykład:"DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0"
DhcpService Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do konfigurowania usługi DHCP: prawda, jeśli aplikacja ma tę funkcję. w przeciwnym razie fałsz.
Przykład:"DhcpService" : true
Odwołanie do interfejsu API:Applibs networking.h
Poglądowa:Korzystanie z usług sieciowych
EnterpriseWifiConfig Wartość logiczna wskazująca, czy aplikacja wysokiego poziomu ma uprawnienia do tworzenia sieci EAP-TLS i kojarzenia z nią certyfikatów: prawda, jeśli aplikacja ma taką funkcję; w przeciwnym razie fałsz.
Przykład:"EnterpriseWifiConfig" : true
Zewnętrznainterrupa Lista przerwań zewnętrznych używanych przez aplikację RTApp. Ta funkcja nie jest dostępna dla aplikacji wysokiego poziomu.
Przykład:"ExternalInterrupt": [ "EINT4", "EINT12" ]
Gpio Lista obiektów GPIO używanych przez aplikację.
W aplikacji wysokiego poziomu określ nazwę obiektu GPIO deklarowaną w pliku nagłówka definicji sprzętu, na przykład $MT 3620_RDB_LED1_RED.
W usłudze RTApp określ liczby całkowite odpowiadające numerom GPIO w pliku JSON definicji sprzętowej. Na przykład liczba 8 określa wartość GPIO 8.
Przykład definicji sprzętu:"Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]
Przykład wartości raw:"Gpio": [ 8, 12 ]
Dokumentacja interfejsu API:Applibs gpio.h
Poglądowa:Używanie obiektów GPIO w usłudze Azure Sphere
HardwareAddressConfig Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do konfigurowania adresu sprzętowego interfejsu sieciowego: prawda, jeśli aplikacja ma taką możliwość; w przeciwnym razie fałsz.
Przykład:"HardwareAddressConfig" : true
Odwołanie do interfejsu API:Applibs networking.h
Poglądowa:Korzystanie z usług sieciowych
HeapMemStats Wartość logiczna wskazująca, czy śledzenie alokacji pamięci sterty jest włączone: prawda, jeśli aplikacja ma tę funkcję; w przeciwnym razie fałsz.
Przykład:"HeapMemStats": true
Poglądowa:Użycie pamięci w aplikacjach wysokiego poziomu
I2cMaster Lista interfejsów wzorcowych I2C używanych przez aplikację.
W aplikacji wysokiego poziomu określ nazwę urządzenia peryferyjnego deklarowaną w pliku nagłówka definicji sprzętu.
W programie RTApp określ wartość AppManifestValue deklarowaną w pliku JSON definicji sprzętu.
Przykład definicji sprzętu:"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ]
Przykład wartości raw:"I2cMaster": [ "ISU0", "ISU1" ]
Dokumentacja interfejsu API:Applibs i2c.h
Poglądowa:Korzystanie z I2C z usługą Azure Sphere
I2sSubordinate Interfejs podrzędny Inter-IC Sound (I2S) używany przez aplikację RTApp. Ta funkcja nie jest dostępna dla aplikacji wysokiego poziomu. Przykład wartości raw: "I2sSubordinate": [ "I2S0", "I2S1" ]
MutableStorage Mutable storage settings that allow the application to use persistent storage.
Przykład:"MutableStorage" : { "SizeKB": 64, }
Dokumentacja interfejsu API:Applibs storage.h
Poglądowa:korzystanie z magazynu w usłudze Azure Sphere
NetworkConfig Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do konfigurowania interfejsu sieciowego: prawda, jeśli aplikacja ma taką funkcję; w przeciwnym razie fałsz.
Przykład:"NetworkConfig" : true
Odwołanie do interfejsu API:Applibs networking.h
Poglądowa:Korzystanie z usług sieciowych
PowerControls Tablica ciągów reprezentujących szczegółowe możliwości kontrolowania stanu zasilania urządzenia. ForcePowerDown i ForceReboot to jedyne obsługiwane wartości.
Ostrzeżenie: Ponieważ ForcePowerDown i ForceReboot zezwalają aplikacji na natychmiastowe zamknięcie wszystkich aplikacji, musisz upewnić się, że urządzenie nadal może odbierać aktualizacje systemu operacyjnego i aplikacji. Aby uzyskać więcej informacji i wskazówek, zobacz Wymuszanie wyłączania zasilania i aktualizacje.
Przykład:"PowerControls": ["ForcePowerDown", "ForceReboot"]
Dokumentacja interfejsu API:Applibs powermanagement.h
Konceptualna:Zarządzanie stanem zasilania dla urządzeń z usługą Azure Sphere
Pwm Modulator szerokości impulsu (PWM) używany przez aplikację.
W aplikacji wysokiego poziomu określ nazwę urządzenia peryferyjnego deklarowaną w pliku nagłówka definicji sprzętu.
W programie RTApp określ wartość AppManifestValue deklarowaną w pliku JSON definicji sprzętu.
Przykład definicji sprzętu:"Pwm": [ "$MT3620_RDB_LED_PWM_CONTROLLER2" ]
Przykład wartości raw:"Pwm": [ "PWM-CONTROLLER-0" ]
Dokumentacja interfejsu API:Applibs pwm.h
Poglądowa:Używanie aplikacji PWM w aplikacjach wysokiego poziomu
ReadNetworkProxyConfig Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do pobierania konfiguracji serwera proxy: prawda, jeśli aplikacja ma taką funkcję. w przeciwnym razie fałsz.
Przykład:"ReadNetworkProxyConfig": true
Odwołanie do interfejsu API:Applibs networking.h
Poglądowa:Łączenie się z usługami sieci Web
SntpService Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do konfigurowania usługi SNTP: prawda, jeśli aplikacja ma taką funkcję; w przeciwnym razie fałsz.
Przykład:"SntpService" : true
Odwołanie do interfejsu API:Applibs networking.h
Poglądowa:Serwer SNTP
SoftwareUpdateDeferral Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do odraczanie aktualizacji oprogramowania przez ograniczony czas: prawda, jeśli aplikacja ma taką możliwość; w przeciwnym razie fałsz.
Przykład:"SoftwareUpdateDeferral" : true
Odwołanie do interfejsu API:Applibs eventloop.H
Poglądowa:Odraczania aktualizacji urządzenia
SpiMaster Lista interfejsów głównych SPI używanych przez aplikację.
W aplikacji wysokiego poziomu określ nazwę urządzenia peryferyjnego deklarowaną w pliku nagłówka definicji sprzętu.
W programie RTApp określ wartość AppManifestValue deklarowaną w pliku JSON definicji sprzętu.
Przykład definicji sprzętu:"SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ]
Przykład wartości raw:"SpiMaster": [ "ISU0", "ISU1" ]
Informacje o interfejsie API:Applibs spi.h
Poglądowa:Używanie funkcji SPI z azure sphere
SystemEventNotifications Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do odbierania powiadomień o zdarzeniach systemowych: prawda, jeśli aplikacja ma taką funkcję; w przeciwnym razie fałsz.
Przykład:"SystemEventNotifications" : true
Odwołanie do interfejsu API:Applibs sysevent.h
Poglądowa:Odraczania aktualizacji urządzenia
Systemtime Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do konfigurowania czasu systemowego: prawda, jeśli aplikacja ma tę funkcję. w przeciwnym razie fałsz.
Przykład:"SystemTime" : true
Dokumentacja interfejsu API:Applibs rtc.h
Poglądowa:Zarządzanie czasem systemowym i programem RTC w usłudze Azure Sphere
TimeSyncConfig Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do konfigurowania usługi synchronizacji czasu: prawda, jeśli aplikacja ma taką funkcję. w przeciwnym razie fałsz.
Przykład:"TimeSyncConfig" : true
Uart Lista urządzeń peryferyjnych UART używanych przez aplikację. Ta funkcja nie umożliwia dedykowanego obiektu UART na tablicy deweloperów MT3620. Aby uzyskać informacje na temat dedykowanego obiektu UART, zobacz Tworzenie aplikacji obsługowej w czasie rzeczywistym.
W aplikacji wysokiego poziomu określ nazwę urządzenia peryferyjnego deklarowaną w pliku nagłówka definicji sprzętu.
W programie RTApp określ wartość AppManifestValue deklarowaną w pliku JSON definicji sprzętu.
Przykład definicji sprzętu:"Uart": [ "$MT3620_RDB_HEADER2_ISU0_UART", "$MT3620_RDB_HEADER4_ISU1_UART" ]
Przykład wartości raw:"Uart": [ "ISU0", "ISU1" ]
Informacje o interfejsie API:Applibs uart.h
Poglądowa:Używanie grafiki UART w usłudze Azure Sphere
WifiConfig Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do korzystania z interfejsu API WifiConfig w celu zmiany konfiguracji Wi-Fi: prawda, jeśli aplikacja ma taką możliwość; w przeciwnym razie fałsz.
Przykład:"WifiConfig" : true
Informacje o interfejsie API:Applibs wificonfig.h
Konceptualna:Konfigurowanie sieci

Sekcja MutableStorage obsługuje następujące elementy:

Nazwa Opis
RozmiarKB Liczba całkowita określająca rozmiar zmiennego magazynu w kibibytach. Maksymalna wartość to 64. Wartość 0 jest równoważna braku możliwości przechowywania z możliwością wyciszenia.

Przykład

Poniżej przedstawiono przykładowy plik app_manifest.json dla aplikacji wysokiego poziomu, która jest przeznaczona na sprzęt RDB 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
}

Przykładowy plik app_manifest.json dla aplikacji MyTestApp wykonuje następujące czynności:

  • Przekazuje do aplikacji cztery argumenty wiersza polecenia.
  • Zezwala tylko na połączenia z hostami DNS my-hub.example.net, contoso.azure-devices.net i global.azure-devices-provisioning.net.
  • Zezwala na przychodzący ruch TCP na portach 1024 i 65535.
  • Zezwala na przychodzący ruch UDP w portach 1024 i 50000.
  • Określa identyfikator użytkownika dzierżawy Azure Sphere (Starsza wersja), który ma być używany do uwierzytelniania urządzenia i zezwala na połączenia z usługą inicjowania obsługi urządzeń.
  • Określa użycie trzech obiektów GPIO.
  • Umożliwia aplikacji skonfigurowanie adresu sprzętowego interfejsu sieciowego.
  • Określa użycie jednego urządzenia peryferyjnego UART.
  • Umożliwia wyciszanie pamięci masowej z 64 kibibytes przestrzeni dyskowej.
  • Umożliwia aplikacji korzystanie z interfejsu API WifiConfig w celu zmiany konfiguracji Wi-Fi.
  • Określa użycie jednego interfejsu głównego SPI.
  • Określa użycie jednego interfejsu głównego I2C.
  • Umożliwia aplikacji skonfigurowanie czasu systemowego przy użyciu interfejsu API RTC.
  • Umożliwia mallocng do tworzenia aplikacji.