Manifest aplikacji
Ważne
Jest to dokumentacja usługi Azure Sphere (starsza wersja). Usługa Azure Sphere (starsza wersja) zostanie wycofana 27 września 2027 r., a użytkownicy muszą przeprowadzić migrację do usługi Azure Sphere (zintegrowanej) do tej pory. Użyj selektora wersji znajdującego się powyżej spisu treści, aby wyświetlić dokumentację usługi Azure Sphere (zintegrowaną).
Manifest aplikacji opisuje zasoby, nazywane również możliwościami aplikacji, których wymaga aplikacja. Każda aplikacja ma manifest aplikacji.
Aplikacje muszą wyrazić zgodę na korzystanie z funkcji, wyświetlając listę każdego wymaganego zasobu w sekcji Możliwości manifestu aplikacji. Domyślnie nie są włączone żadne możliwości. Jeśli aplikacja żąda możliwości, która nie znajduje się na liście, żądanie zakończy się niepowodzeniem. Jeśli plik manifestu aplikacji zawiera błędy, próba załadowania aplikacji nie powiedzie się. Manifest każdej aplikacji musi być przechowywany jako app_manifest.json w katalogu głównym folderu aplikacji na komputerze.
Szablon usługi Azure Sphere automatycznie tworzy domyślny manifest aplikacji podczas tworzenia aplikacji. Aby wyświetlić listę możliwości, których wymaga aplikacja, należy edytować manifest domyślny. Każdy przykład usługi Azure Sphere zawiera również manifest aplikacji. Jeśli aplikacja jest oparta na przykładzie, prawdopodobnie trzeba będzie również edytować manifest.
Różne urządzenia usługi Azure Sphere mogą uwidaczniać funkcje mikroukładu na różne sposoby. W związku z tym wartość używana w manifeście w celu zidentyfikowania określonej funkcji, takiej jak wyprowadzenie gpIO, może się różnić w zależności od sprzętu, dla którego się opracowujesz. Zarządzanie docelowymi zależnościami sprzętowymi zawiera więcej informacji na temat celów sprzętowych dla aplikacji wysokiego poziomu. W manifeście aplikacji wysokiego poziomu użyj stałych zdefiniowanych w pliku JSON w folderze HardwareDefinitions katalogu instalacyjnego zestawu SDK usługi Microsoft Azure Sphere. Dokładna lokalizacja katalogu instalacyjnego będzie się różnić w systemach Windows i Linux. W aplikacji obsługującej czas rzeczywistym (RTApp) użyj nieprzetworzonych wartości wymienionych w zawartości manifestu aplikacji.
Gdy dowolna aplikacja jest ładowana bezpośrednio lub wdrażana na urządzeniu, środowisko uruchomieniowe usługi Azure Sphere odczytuje manifest aplikacji, aby ustalić, które możliwości może używać aplikacja. 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 używać zasobu. Jeśli zainstalujesz aplikację żądającą zasobu, który jest już używany, próba zakończy się niepowodzeniem.
Zawartość manifestu aplikacji
Manifest aplikacji zawiera następujące elementy:
Nazwa/nazwisko | opis |
---|---|
Wersja schematu | Wersja używanego schematu manifestu aplikacji. Obecnie musi mieć wartość 1. Wymagany. |
Nazwa/nazwisko | Nazwa aplikacji. Podczas tworzenia projektu ta wartość jest ustawiona na nazwę projektu. Nazwa może mieć dowolną długość, ale w pakiecie obrazu są przechowywane tylko pierwsze 31 znaków. w związku z tym nazwa jest obcinana w zapytaniach dotyczących pakietu obrazów. Wymagany. |
Identyfikator składnika | 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. Wymagany. |
Punkt wejścia | Nazwa pliku wykonywalnego wraz ze ścieżką względną w obrazie systemu plików aplikacji, który jest tworzony podczas kompilowania aplikacji. Program Visual Studio obecnie używa /bin/app dla tej wartości. Wymagany. |
CmdArgs | Argumenty przekazywane do aplikacji podczas uruchamiania. Ujęć każdy argument w podwójny cudzysłów i rozdziel argumenty przecinkami. Opcjonalny. |
TargetBetaApis | Określa, że aplikacja wymaga interfejsów API beta i identyfikuje zestaw używanych interfejsów API beta. To pole jest automatycznie dodawane podczas procesu kompilacji, jeśli aplikacja jest kompilowana przy użyciu interfejsów API beta. Opcjonalny. Aby uzyskać szczegółowe informacje, zobacz Korzystanie z funkcji beta. |
Typ aplikacji | Typ aplikacji. Opcjonalny. Ustaw wartość Debuger tylko wtedy, gdy tworzysz zamiennik dla serwera gdbserver. |
Możliwości | Lista par klucz/wartość określająca wymagania dotyczące zasobów aplikacji. Wymagany. |
MallocVersion | Liczba całkowita określająca wersję malloc, gdzie 1=standard i 2=mallocng, ulepszony mallococ dostępny w wersjach MUSL większych niż 1.2.1. W przypadku wszystkich nowych aplikacji zaleca się tworzenie aplikacji w wersji 2. |
Sekcja Możliwości obsługuje następujące elementy:
Uwaga
Aplikacje wysokiego poziomu mogą używać wartości możliwości z plików definicji sprzętu lub mogą używać wartości pierwotnych. Nie można jednak mieszać obu typów wartości w tej samej możliwości. Usługa RTApps może używać tylko nieprzetworzonych wartości dla możliwości.
Nazwa/nazwisko | opis |
---|---|
Adc | Kontroler konwersji analog-do-cyfrowej (ADC), który jest używany przez aplikację. Ta funkcja zastrzega sobie cały kontroler ADC (który składa się z 8-pinowego bloku), a nie tylko pinezki 0 w bloku. W aplikacji wysokiego poziomu określ nazwę urządzenia peryferyjnego zadeklarowaną w pliku nagłówka definicji sprzętu. W aplikacji RTApp określ wartość AppManifestValue zadeklarowaną w pliku JSON definicji sprzętu. Przykład definicji sprzętu: "Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ] Przykład wartości pierwotnej: "Adc": [ "ADC-CONTROLLER-0" ] Dokumentacja interfejsu API: Applibs adc.h Koncepcyjne: używanie usługi ADCs w usłudze Azure Sphere |
AllowedApplicationConnections | Lista identyfikatorów składników aplikacji, z którymi aplikacja może się łączyć. Przykład: "AllowedApplicationConnections": [ "005180BC-402F-4CB3-A662-72937DBCDE47" ] Dokumentacja interfejsu API: Applibs application.h Koncepcyjne: komunikacja z aplikacją wysokiego poziomu |
Dozwolone połączenia | Lista nazw hostów DNS lub adresów IP (IPv4), z którymi aplikacja może nawiązać połączenie. Jeśli aplikacja używa usługi Azure IoT Hub, lista musi zawierać adres IP lub nazwę hosta DNS dla centrum, zazwyczaj 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 zezwalają na przychodzący ruch TCP. Można dołączyć maksymalnie 10 portów, a każdy port musi być wymieniony indywidualnie. Obsługiwane porty to od 1024 do 65535. Można 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, uruchomienie drugiej aplikacji zakończy się niepowodzeniem. Przykład: "AllowedTcpServerPorts": [ 1024, 65535 ] |
AllowedUdpServerPorts | Lista portów, które zezwalają na przychodzący ruch UDP. Można dołączyć maksymalnie 10 portów, a każdy port musi być wymieniony indywidualnie. Obsługiwane porty to od 1024 do 65535. Można 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, uruchomienie drugiej aplikacji zakończy się niepowodzeniem. Przykład: "AllowedUdpServerPorts": [ 1024, 50000 ] |
Magazyn certyfikatów | Wartość logiczna wskazująca, czy aplikacja wysokiego poziomu ma uprawnienia do zarządzania certyfikatami za pomocą interfejsu API CertStore: true w celu włączenia interfejsu API; w przeciwnym razie, fałsz. Przykład: "CertStore" : true |
DeviceAuthentication | Ciąg określający identyfikator UUID dzierżawy usługi Azure Sphere do użycia na potrzeby 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 możliwość; w przeciwnym razie, fałsz. Przykład: "DhcpService" : true Dokumentacja interfejsu API: Applibs networking.h Koncepcyjne: Korzystanie z usług sieciowych |
EnterpriseWifiConfig | Wartość logiczna wskazująca, czy aplikacja wysokiego poziomu ma uprawnienia do tworzenia sieci protokołu EAP-TLS i kojarzenia z nią certyfikatów: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz. Przykład: "EnterpriseWifiConfig" : true |
ExternalInterrupt | Lista zewnętrznych przerwań używanych przez aplikację RTApp. Ta funkcja nie jest dostępna dla aplikacji wysokiego poziomu. Przykład: "ExternalInterrupt": [ "EINT4", "EINT12" ] |
Gpio | Lista obiektów zasad grupy używanych przez aplikację. W aplikacji wysokiego poziomu określ nazwę GPIO zadeklarowaną w pliku nagłówka definicji sprzętu, taką jak $MT 3620_RDB_LED1_RED. W aplikacji RTApp określ liczby całkowite, które odpowiadają numerom GPIO w pliku JSON definicji sprzętu. Na przykład 8 określa 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 pierwotnej: "Gpio": [ 8, 12 ] Dokumentacja interfejsu API: Applibs gpio.h Koncepcyjne: używanie obiektów zasad grupy 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 możliwość; w przeciwnym razie, fałsz. Przykład: "HardwareAddressConfig" : true Dokumentacja interfejsu API: Applibs networking.h Koncepcyjne: Korzystanie z usług sieciowych |
HeapMemStats | Wartość logiczna wskazująca, czy jest włączone śledzenie alokacji pamięci sterty: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz. Przykład: "HeapMemStats": true Koncepcyjne: użycie pamięci w aplikacjach wysokiego poziomu |
I2cMaster | Lista interfejsów głównych I2C używanych przez aplikację. W aplikacji wysokiego poziomu określ nazwę urządzenia peryferyjnego zadeklarowaną w pliku nagłówka definicji sprzętu. W aplikacji RTApp określ wartość AppManifestValue zadeklarowaną 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 pierwotnej: "I2cMaster": [ "ISU0", "ISU1" ] Dokumentacja interfejsu API: Applibs i2c.h Koncepcyjne: używanie protokołu 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 pierwotnej: "I2sSubordinate": [ "I2S0", "I2S1" ] |
MutableStorage | Ustawienia magazynu modyfikowalnego, które umożliwiają aplikacji używanie magazynu trwałego. Przykład: "MutableStorage" : { "SizeKB": 64, } Dokumentacja interfejsu API: Applibs storage.h Koncepcyjne: Używanie magazynu w usłudze Azure Sphere |
Konfiguracja sieci | Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do konfigurowania interfejsu sieciowego: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz. Przykład: "NetworkConfig" : true Dokumentacja interfejsu API: Applibs networking.h Koncepcyjne: 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 są jedynymi obsługiwanymi wartościami. Ostrzeżenie: Ponieważ forcePowerDown i ForceReboot zezwalają aplikacji na natychmiastowe zakończenie wszystkich aplikacji, upewnij się, że urządzenie nadal może odbierać aktualizacje systemu operacyjnego i aplikacji. Aby uzyskać więcej informacji i wskazówek, zobacz Wymuszanie zasilania i aktualizacji. Przykład: "PowerControls": ["ForcePowerDown", "ForceReboot"] Dokumentacja interfejsu API: Applibs powermanagement.h Koncepcyjne: Zarządzanie stanem zasilania dla urządzeń usługi Azure Sphere |
Pwm | Modulator szerokości impulsu (PWM), który jest używany przez aplikację. W aplikacji wysokiego poziomu określ nazwę urządzenia peryferyjnego zadeklarowaną w pliku nagłówka definicji sprzętu. W aplikacji RTApp określ wartość AppManifestValue zadeklarowaną w pliku JSON definicji sprzętu. Przykład definicji sprzętu: "Pwm": [ "$MT3620_RDB_LED_PWM_CONTROLLER2" ] Przykład wartości pierwotnej: "Pwm": [ "PWM-CONTROLLER-0" ] Dokumentacja interfejsu API: Applibs pwm.h Koncepcyjne: 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 możliwość; w przeciwnym razie, fałsz. Przykład: "ReadNetworkProxyConfig": true Dokumentacja interfejsu API: Applibs networking.h Koncepcyjne: Nawiązywanie połączenia z usługami internetowymi |
SntpService | Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do konfigurowania usługi SNTP: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz. Przykład: "SntpService" : true Dokumentacja interfejsu API: Applibs networking.h Koncepcyjne: serwer SNTP |
SoftwareUpdateDeferral | Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do odroczenia aktualizacji oprogramowania przez ograniczony okres: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz. Przykład: "SoftwareUpdateDeferral" : true Dokumentacja interfejsu API: Applibs eventloop.h Koncepcyjne: odroczenie aktualizacji urządzeń |
SpiMaster | Lista interfejsów głównych SPI używanych przez aplikację. W aplikacji wysokiego poziomu określ nazwę urządzenia peryferyjnego zadeklarowaną w pliku nagłówka definicji sprzętu. W aplikacji RTApp określ wartość AppManifestValue zadeklarowaną 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 pierwotnej: "SpiMaster": [ "ISU0", "ISU1" ] Dokumentacja interfejsu API: Applibs spi.h Koncepcyjne: używanie spi z usługą Azure Sphere |
SystemEventNotifications | Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do odbierania powiadomień o zdarzeniach systemowych: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz. Przykład: "SystemEventNotifications" : true Dokumentacja interfejsu API: Applibs sysevent.h Koncepcyjne: odroczenie aktualizacji urządzeń |
SystemTime | Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do konfigurowania czasu systemowego: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz. Przykład: "SystemTime" : true Dokumentacja interfejsu API: Applibs rtc.h Koncepcyjne: Zarządzanie czasem systemowym i protokołem RTC w usłudze Azure Sphere |
TimeSyncConfig | Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do konfigurowania usługi synchronizacji czasowej: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz. Przykład: "TimeSyncConfig" : true |
Uart | Lista urządzeń peryferyjnych UART używanych przez aplikację. Ta funkcja nie włącza dedykowanego karty UART na tablicy deweloperów MT3620. Aby uzyskać informacje o dedykowanym UART, zobacz Tworzenie aplikacji obsługującej czas rzeczywisty. W aplikacji wysokiego poziomu określ nazwę urządzenia peryferyjnego zadeklarowaną w pliku nagłówka definicji sprzętu. W aplikacji RTApp określ wartość AppManifestValue zadeklarowaną 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 pierwotnej: "Uart": [ "ISU0", "ISU1" ] Dokumentacja interfejsu API: Applibs uart.h Koncepcyjne: Używanie funkcji UART w usłudze Azure Sphere |
WifiConfig | Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do używania interfejsu API WifiConfig w celu zmiany konfiguracji sieci Wi-Fi: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz. Przykład: "WifiConfig" : true Dokumentacja interfejsu API: Applibs wificonfig.h Koncepcyjne: Konfigurowanie sieci |
Sekcja MutableStorage obsługuje następujące elementy:
Nazwa/nazwisko | opis |
---|---|
Rozmiar KB | Liczba całkowita określająca rozmiar magazynu modyfikowalnego w kibibajtach. Maksymalna wartość to 64. Wartość 0 jest równoważna braku możliwości magazynu modyfikowalnego. |
Przykład
Poniżej przedstawiono przykładowy plik app_manifest.json dla aplikacji wysokiego poziomu, która jest przeznaczona dla sprzętu 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 na portach 1024 i 50000.
- Określa dzierżawę usługi Azure Sphere, która ma być używana do uwierzytelniania urządzeń i zezwala na połączenia z usługą Device Provisioning Service.
- Określa użycie trzech obiektów zasad grupy.
- Umożliwia aplikacji skonfigurowanie adresu sprzętowego interfejsu sieciowego.
- Określa użycie jednego urządzenia peryferyjnego UART.
- Umożliwia magazyn modyfikowalny z 64 kibibajtami miejsca do magazynowania.
- Umożliwia aplikacji używanie interfejsu API WifiConfig w celu zmiany konfiguracji sieci Wi-Fi.
- Określa użycie jednego interfejsu głównego SPI.
- Określa użycie jednego interfejsu głównego I2C.
- Umożliwia aplikacji konfigurowanie czasu systemowego przy użyciu interfejsu API RTC.
- Umożliwia mallocng na potrzeby tworzenia aplikacji.