Manifes aplikasi

Manifes aplikasi menjelaskan sumber daya, juga disebut kapabilitas aplikasi, yang diperlukan oleh aplikasi. Setiap aplikasi memiliki manifes aplikasi.

Aplikasi harus memilih untuk menggunakan kapabilitas dengan mencantumkan setiap sumber daya yang diperlukan di bagian Kapabilitas dari manifes aplikasi; tidak ada kapabilitas yang diaktifkan secara default. Jika aplikasi meminta kapabilitas yang tidak tercantum, permintaan gagal. Jika file manifes aplikasi berisi kesalahan, upaya untuk memuat sisi aplikasi gagal. Setiap manifes aplikasi harus disimpan sebagai app_manifest.json di direktori akar folder aplikasi di PC Anda.

Templat Azure Sphere secara otomatis membuat manifes aplikasi default saat Anda membuat aplikasi. Anda harus mengedit manifes default untuk mencantumkan kapabilitas yang diperlukan aplikasi Anda. Setiap sampel Azure Sphere juga menyertakan manifes aplikasi. Jika Anda mendasarkan aplikasi pada sampel, Anda mungkin juga perlu mengedit manifes.

Perangkat Azure Sphere yang berbeda dapat mengekspos fitur chip dengan cara yang berbeda. Hasilnya, nilai yang Anda gunakan dalam manifes untuk mengidentifikasi fitur tertentu, seperti pin GPIO, dapat bervariasi tergantung pada perangkat keras yang Anda kembangkan. Kelola dependensi perangkat keras target menyediakan informasi selengkapnya tentang target perangkat keras untuk aplikasi tingkat tinggi. Dalam manifes aplikasi untuk aplikasi tingkat tinggi, gunakan konstanta yang ditentukan dalam file JSON dalam folder HardwareDefinitions direktori instalasi Microsoft Azure Sphere SDK. Lokasi pasti direktori penginstalan akan berbeda di Windows dan Linux. Dalam aplikasi berkemampuan real-time (RTApp), gunakan nilai mentah yang tercantum dalam Konten manifes aplikasi.

Ketika aplikasi apa pun dimuat ke samping atau disebarkan ke perangkat, runtime Azure Sphere membaca manifes aplikasi untuk memastikan kemampuan aplikasi mana yang diizinkan untuk digunakan. Upaya untuk mengakses sumber daya yang tidak tercantum dalam manifes akan mengakibatkan kesalahan API seperti EPERM (izin ditolak). Hanya satu aplikasi di perangkat yang dapat menggunakan sumber daya. Jika Anda menginstal aplikasi yang meminta sumber daya yang sudah digunakan, upaya akan gagal.

Konten manifes aplikasi

Manifes aplikasi menyertakan item berikut:

Nama Deskripsi
SkemaVersi Versi skema manifes aplikasi yang digunakan. Saat ini harus 1. Diperlukan.
Nama Nama aplikasi. Pada pembuatan proyek, nilai ini diatur ke nama proyek. Nama bisa panjangnya berapa pun, tetapi hanya 31 karakter pertama yang disimpan dalam paket gambar; dengan demikian nama muncul terpoting dalam pertanyaan tentang paket gambar. Diperlukan.
ComponentId ID komponen. Visual Studio membuat ID ini saat Anda menyusun aplikasi. Jika Anda tidak menggunakan Visual Studio, lihat Membuat ID komponen untuk informasi tentang membuat ID. Diperlukan.
EntryPoint Nama yang dapat dijalankan bersama dengan jalur relatif dalam gambar sistem file aplikasi, yang dibuat saat aplikasi dibuat. Visual Studio saat ini menggunakan /bin/app untuk nilai ini. Diperlukan.
CmdArgs Argumen untuk lolos ke aplikasi saat startup. Apit setiap argumen dalam tanda kutip ganda dan argumen terpisah dengan tanda koma. Opsional.
TargetBetaApis Menentukan bahwa aplikasi memerlukan API Beta dan mengidentifikasi kumpulan API Beta yang digunakan. Bidang ini secara otomatis ditambahkan selama proses build jika aplikasi dibuat menggunakan API Beta. Opsional. Lihat Menggunakan fitur beta untuk detailnya.
ApplicationType Jenis aplikasi. Opsional. Atur ke Debugger hanya jika Anda sedang menyusun pengganti untuk gdbserver.
Kemampuan Daftar pasangan kunci/nilai yang menentukan persyaratan sumber daya aplikasi. Diperlukan.
MallocVersion Bilangan bulat yang menentukan versi malloc, dengan 1=standar dan 2=mallocng, malloc yang ditingkatkan yang tersedia dalam versi MUSL yang lebih besar dari 1.2.1. Versi 2 disarankan untuk semua pengembangan aplikasi baru.

Bagian Kapabilitas mendukung hal berikut:

Catatan

Aplikasi tingkat tinggi dapat menggunakan nilai kapabilitas dari file definisi perangkat keras atau dapat menggunakan nilai mentah. Namun, Anda tidak bisa mencampur kedua tipe nilai dalam kapabilitas yang sama. RTApps hanya dapat menggunakan nilai mentah untuk kemampuan.

Nama Deskripsi
Adc Pengontrol konversi analog-ke-digital (ADC) yang digunakan oleh aplikasi. Kemampuan ini mencadangkan seluruh pengontrol ADC (yang terdiri dari blok 8-pin), tidak hanya menyematkan 0 dalam blok.
Dalam aplikasi tingkat tinggi, tentukan nama periferal yang dideklarasikan dalam file header definisi perangkat keras.
Dalam RTApp, tentukan AppManifestValue yang dideklarasikan dalam definisi perangkat keras file JSON.
Contoh definisi perangkat keras:"Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
Contoh nilai mentah:"Adc": [ "ADC-CONTROLLER-0" ]
Referensi API:Applibs adc.h
Konseptual:Menggunakan ADC di Azure Sphere
AllowedApplicationConnections Daftar ID komponen aplikasi yang diperbolehkan untuk menyambungkan aplikasi.
Contoh:"AllowedApplicationConnections": [ "005180BC-402F-4CB3-A662-72937DBCDE47" ]
Referensi API:Applibs application.h
Konseptual:Berkomunikasi dengan aplikasi tingkat tinggi
AllowedConnections Daftar nama host DNS atau alamat IP (IPv4) tempat aplikasi diizinkan untuk tersambung. Jika aplikasi menggunakan Azure IoT Hub, daftar harus menyertakan alamat IP atau nama host DNS untuk hub, biasanya hub-name.azure-devices.net. Nomor port dan karakter wildcard dalam nama dan alamat IP tidak diterima.
Contoh:"AllowedConnections" : [ "my-hub.example.net", "global.azure-devices-provisioning.net" ]
AllowedTcpServerPorts Daftar port yang memungkinkan lalu lintas TCP masuk. Anda dapat menyertakan hingga 10 port, dan setiap port harus dicantumkan satu per satu. Port yang didukung adalah 1024 hingga 65535. Anda dapat menentukan port yang sama untuk TCP dan UDP. Namun, jika Anda menentukan port yang sama untuk lebih dari satu aplikasi di perangkat, aplikasi kedua yang dijalankan akan gagal dimuat.
Contoh:"AllowedTcpServerPorts": [ 1024, 65535 ]
AllowedUdpServerPorts Daftar port yang memungkinkan lalu lintas UDP masuk. Anda dapat menyertakan hingga 10 port, dan setiap port harus dicantumkan satu per satu. Port yang didukung adalah 1024 hingga 65535. Anda dapat menentukan port yang sama untuk TCP dan UDP. Namun, jika Anda menentukan port yang sama untuk lebih dari satu aplikasi di perangkat, aplikasi kedua yang dijalankan akan gagal dimuat.
Contoh:"AllowedUdpServerPorts": [ 1024, 50000 ]
CertStore Boolean yang menunjukkan apakah aplikasi tingkat tinggi memiliki izin untuk mengelola sertifikat dengan API CertStore: true untuk mengaktifkan API; jika tidak, false.
Contoh:"CertStore" : true
DeviceAuthentication String yang menentukan UUID penyewa Azure Sphere (Warisan) untuk digunakan untuk autentikasi perangkat.
Contoh:"DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0"
DhcpService Boolean yang menunjukkan apakah aplikasi memiliki izin untuk mengonfigurasi layanan DHCP: true jika aplikasi memiliki kapabilitas; jika tidak, false.
Contoh:"DhcpService" : true
Referensi API:Applibs networking.h
Konseptual:Menggunakan layanan jaringan
EnterpriseWifiConfig Boolean yang menunjukkan apakah aplikasi tingkat tinggi memiliki izin untuk membuat jaringan EAP-TLS dan mengaitkan sertifikat dengannya: benar jika aplikasi memiliki kapabilitas; jika tidak, false.
Contoh:"EnterpriseWifiConfig" : true
ExternalInterrupt Daftar gangguan eksternal yang digunakan RTApp. Kapabilitas ini tidak tersedia untuk aplikasi tingkat tinggi.
Contoh:"ExternalInterrupt": [ "EINT4", "EINT12" ]
Gpio Daftar GPIO yang digunakan aplikasi.
Dalam aplikasi tingkat tinggi, tentukan nama GPIO yang dideklarasikan dalam file header definisi perangkat keras, seperti $MT 3620_RDB_LED1_RED.
Dalam RTApp, tentukan bilangan bulat yang sesuai dengan angka GPIO dalam file JSON definisi perangkat keras. Misalnya, 8 menentukan GPIO 8.
Contoh definisi perangkat keras:"Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]
Contoh nilai mentah:"Gpio": [ 8, 12 ]
Referensi API:Applibs gpio.h
Konseptual:Menggunakan GPIO di Azure Sphere
HardwareAddressConfig Boolean yang menunjukkan apakah aplikasi memiliki izin untuk mengonfigurasi alamat perangkat keras antarmuka jaringan: true jika aplikasi memiliki kapabilitas; jika tidak, false.
Contoh:"HardwareAddressConfig" : true
Referensi API:Applibs networking.h
Konseptual:Menggunakan layanan jaringan
HeapMemStats Boolean yang menunjukkan apakah pelacakan alokasi memori tumpukan diaktifkan: true jika aplikasi memiliki kapabilitas; jika tidak, false.
Contoh:"HeapMemStats": true
Konseptual:Penggunaan memori dalam aplikasi tingkat tinggi
I2cMaster Daftar antarmuka master I2C yang digunakan oleh aplikasi.
Dalam aplikasi tingkat tinggi, tentukan nama periferal yang dideklarasikan dalam file header definisi perangkat keras.
Dalam RTApp, tentukan AppManifestValue yang dideklarasikan dalam definisi perangkat keras file JSON.
Contoh definisi perangkat keras:"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ]
Contoh nilai mentah:"I2cMaster": [ "ISU0", "ISU1" ]
Referensi API:Applibs i2c.h
Konseptual:Menggunakan I2C dengan Azure Sphere
I2sSubordinate Antarmuka subordinat Inter-IC Sound (I2S) yang digunakan oleh RTApp. Kapabilitas ini tidak tersedia untuk aplikasi tingkat tinggi. Contoh nilai mentah: "I2sSubordinate": [ "I2S0", "I2S1" ]
MutableStorage Pengaturan penyimpanan yang dapat diubah yang memungkinkan aplikasi menggunakan penyimpanan tetap.
Contoh:"MutableStorage" : { "SizeKB": 64, }
Referensi API:Applibs storage.h
Konseptual:Menggunakan penyimpanan di Azure Sphere
NetworkConfig Boolean yang menunjukkan apakah aplikasi memiliki izin untuk mengonfigurasi antarmuka jaringan: benar jika aplikasi memiliki kapabilitas; jika tidak, false.
Contoh:"NetworkConfig" : true
Referensi API:Applibs networking.h
Konseptual:Menggunakan layanan jaringan
PowerControls Array string yang mewakili kapabilitas granular untuk mengontrol status daya perangkat. ForcePowerDown dan ForceReboot adalah satu-satunya nilai yang didukung.
Peringatan: Karena ForcePowerDown dan ForceReboot memungkinkan aplikasi untuk segera menghentikan semua aplikasi, Anda harus memastikan perangkat Anda masih dapat menerima pembaruan sistem operasi dan aplikasi. Untuk informasi dan panduan selengkapnya, lihat Memaksa Power Down dan pembaruan.
Contoh:"PowerControls": ["ForcePowerDown", "ForceReboot"]
Referensi API:Applibs powermanagement.h
Konseptual:Mengelola status power-down untuk perangkat Azure Sphere
Pwm Modulator lebar pulsa (PWM) yang digunakan oleh aplikasi.
Dalam aplikasi tingkat tinggi, tentukan nama periferal yang dideklarasikan dalam file header definisi perangkat keras.
Dalam RTApp, tentukan AppManifestValue yang dideklarasikan dalam definisi perangkat keras file JSON.
Contoh definisi perangkat keras:"Pwm": [ "$MT3620_RDB_LED_PWM_CONTROLLER2" ]
Contoh nilai mentah:"Pwm": [ "PWM-CONTROLLER-0" ]
Referensi API:Applibs pwm.h
Konseptual:Menggunakan PWM dalam aplikasi tingkat tinggi
ReadNetworkProxyConfig Boolean yang menunjukkan apakah aplikasi memiliki izin untuk mengambil konfigurasi proksi: true jika aplikasi memiliki kapabilitas; jika tidak, false.
Contoh:"ReadNetworkProxyConfig": true
Referensi API:Applibs networking.h
Konseptual:Menyambungkan ke layanan web
SntpService Boolean yang menunjukkan apakah aplikasi memiliki izin untuk mengonfigurasi layanan SNTP: true jika aplikasi memiliki kapabilitas; jika tidak, false.
Contoh:"SntpService" : true
Referensi API:Applibs networking.h
Konseptual:Server SNTP
SoftwareUpdateDeferral Boolean yang menunjukkan apakah aplikasi memiliki izin untuk menangguhkan pembaruan perangkat lunak selama periode terbatas: true jika aplikasi memiliki kapabilitas; jika tidak, false.
Contoh:"SoftwareUpdateDeferral" : true
Referensi API:Applibs eventloop.H
Konseptual:Tangguhkan pembaruan perangkat
SpiMaster Daftar antarmuka master SPI yang digunakan oleh aplikasi.
Dalam aplikasi tingkat tinggi, tentukan nama periferal yang dideklarasikan dalam file header definisi perangkat keras.
Dalam RTApp, tentukan AppManifestValue yang dideklarasikan dalam definisi perangkat keras file JSON.
Contoh definisi perangkat keras:"SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ]
Contoh nilai mentah:"SpiMaster": [ "ISU0", "ISU1" ]
Referensi API:Applibs spi.h
Konseptual:Menggunakan SPI dengan Azure Sphere
SystemEventNotifications Boolean yang menunjukkan apakah aplikasi memiliki izin untuk menerima pemberitahuan kejadian sistem: true jika aplikasi memiliki kapabilitas; jika tidak, false.
Contoh:"SystemEventNotifications" : true
Referensi API:Applibs sysevent.h
Konseptual:Tangguhkan pembaruan perangkat
SystemTime Boolean yang menunjukkan apakah aplikasi memiliki izin untuk mengonfigurasi waktu sistem: true jika aplikasi memiliki kapabilitas; jika tidak, false.
Contoh:"SystemTime" : true
Referensi API:Applibs rtc.h
Konseptual:Mengelola waktu sistem dan RTC di Azure Sphere
TimeSyncConfig Boolean yang menunjukkan apakah aplikasi memiliki izin untuk mengonfigurasi layanan sinkronisasi waktu: true jika aplikasi memiliki kapabilitas; jika tidak, false.
Contoh:"TimeSyncConfig" : true
Uart Daftar periferal UART yang digunakan aplikasi. Kemampuan ini tidak mengaktifkan UART khusus pada papan pengembangan MT3620. Untuk informasi tentang UART khusus, lihat Menyusun aplikasi berkemampuan real-time.
Dalam aplikasi tingkat tinggi, tentukan nama periferal yang dideklarasikan dalam file header definisi perangkat keras.
Dalam RTApp, tentukan AppManifestValue yang dideklarasikan dalam definisi perangkat keras file JSON.
Contoh definisi perangkat keras:"Uart": [ "$MT3620_RDB_HEADER2_ISU0_UART", "$MT3620_RDB_HEADER4_ISU1_UART" ]
Contoh nilai mentah:"Uart": [ "ISU0", "ISU1" ]
Referensi API:Applibs uart.h
Konseptual:Menggunakan UART di Azure Sphere
WifiConfig Boolean yang menunjukkan apakah aplikasi memiliki izin untuk menggunakan API WifiConfig untuk mengubah konfigurasi Wi-Fi: true jika aplikasi memiliki kapabilitas; jika tidak, false.
Contoh:"WifiConfig" : true
Referensi API:Applibs wificonfig.h
Konseptual:Mengonfigurasi jaringan

Bagian MutableStorage mendukung hal berikut:

Nama Deskripsi
SizeKB Bilangan bulat yang menentukan ukuran penyimpanan yang dapat dimatikan dalam kibibyte. Nilai maksimum adalah 64. Nilai 0 sama dengan tidak memiliki kapabilitas penyimpanan yang dapat dimatikan.

Contoh

Berikut ini memperlihatkan contoh file app_manifest.json untuk aplikasi tingkat tinggi yang menargetkan perangkat keras 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
}

Contoh file app_manifest.json untuk MyTestApp melakukan hal berikut:

  • Meneruskan empat argumen baris perintah ke aplikasi.
  • Hanya memungkinkan koneksi ke host DNS my-hub.example.net, contoso.azure-devices.net, dan global.azure-devices-provisioning.net.
  • Memungkinkan lalu lintas TCP masuk pada port 1024 dan 65535.
  • Memungkinkan lalu lintas UDP masuk pada port 1024 dan 50000.
  • Menentukan UUID penyewa Azure Sphere (Warisan) untuk digunakan untuk autentikasi perangkat dan mengizinkan koneksi ke Layanan Penyediaan Perangkat.
  • Menentukan penggunaan tiga GPIO.
  • Memperbolehkan aplikasi mengonfigurasi alamat piranti keras antarmuka jaringan.
  • Menentukan penggunaan satu periferal UART.
  • Memungkinkan penyimpanan yang dapat dibisukan dengan ruang penyimpanan 64 kibibyte.
  • Memungkinkan aplikasi menggunakan API WifiConfig untuk mengubah konfigurasi Wi-Fi.
  • Menentukan penggunaan satu antarmuka master SPI.
  • Menentukan penggunaan satu antarmuka master I2C.
  • Memungkinkan aplikasi untuk mengonfigurasi waktu sistem menggunakan API RTC.
  • Memungkinkan mallocng untuk pengembangan aplikasi.