共用方式為


應用程式資訊清單

應用程式指令清單描述應用程式所需的資源,也稱為 應用程式功能。 每個應用程式都有應用程式指令清單。

應用程式必須加入加入功能,方法是在應用程式指令清單的 [功能 ] 區段中列出每個必要資源;預設不會啟用任何功能。 如果應用程式要求未列出的功能,要求就會失敗。 如果應用程式指令清單檔案包含錯誤,則嘗試側載應用程式失敗。 每個應用程式的指令清單都必須儲存為計算機上的應用程式資料夾根目錄中app_manifest.json。

當您建立應用程式時,Azure Sphere 樣本會自動建立預設應用程式指令清單。 您必須編輯預設指令清單,以列出應用程式所需的功能。 每個 Azure Sphere 範例也都包含應用程式指令清單。 如果您將應用程式以範例為基礎,您可能也需要編輯指令清單。

不同的 Azure Sphere 裝置可能會以不同方式公開晶片的功能。 因此,您在指令清單中用來識別特定功能的值,例如 GPIO 針腳,可能會因您正在開發的硬體而有所不同。 管理目標硬體相依性 提供高階應用程式硬體目標的詳細資訊。 在高階應用程式的應用程式指令清單中,使用Microsoft Azure Sphere SDK 安裝目錄之 HardwareDefinitions 資料夾中 JSON 檔案中定義的常數。 安裝目錄的確切位置在 Windows 和 Linux 上會有所不同。 在即時可用的應用程式 (RTApp) 中,使用應用程式指令清單內容中所列的原始值。

當任何應用程式側載或部署至裝置時,Azure Sphere 執行時間會讀取應用程式指令清單,以確定應用程式允許使用哪些功能。 嘗試存取指令清單中未列出的資源會導致 API 錯誤,例如 EPERM(許可權遭拒)。 裝置上只有一個應用程式可以使用資源。 如果您安裝要求已在使用中的資源的應用程式,嘗試將會失敗。

應用程式指令清單的內容

應用程式指令清單包含下列專案:

名稱 描述
SchemaVersion 使用中的應用程式指令清單架構版本。 目前必須是 1。 必要。
名稱 應用程式的名稱。 在專案建立時,此值會設定為項目的名稱。 名稱可以是任何長度,但只有前 31 個字元儲存在映射套件中;因此,在影像套件的查詢中,名稱會遭到截斷。 必要。
ComponentId 元件的標識碼。 當您建置應用程式時,Visual Studio 會建立此標識碼。 如果您未使用 Visual Studio,請參閱 產生元件標識碼 ,以取得建立標識符的相關信息。 必要。
EntryPoint 可執行檔的名稱,以及應用程式檔案系統映像中的相對路徑,這是在建置應用程式時建立的。 Visual Studio 目前會針對此值使用 /bin/app。 必要。
CmdArgs 在啟動時傳遞至應用程式的自變數。 以雙引弧括住每個自變數,並以逗號分隔自變數。 選擇性。
TargetBetaApis 指定應用程式需要 Beta API,並識別所使用的 Beta API 集合。 如果應用程式是使用 Beta API 建置,則此字位會在建置程式期間自動新增。 選擇性。 如需詳細資訊,請參閱 使用 Beta 功能
ApplicationType 應用程式類型。 選擇性。 只有在您要建置 gdbserver 的取代專案時,才設定為 [調試程式]。
Capabilities 指定應用程式資源需求的索引鍵/值組清單。 必要。
MallocVersion 整數,指定 malloc 版本,其中 1=standard 和 2=mallocng,這是 MUSL 版本中大於 1.2.1 的增強 malloc。 建議針對所有新的應用程式開發使用第 2 版。

[功能]段支援下列專案:

注意

高階應用程式可以使用硬體定義檔案中的功能值,也可以使用原始值。 不過,您無法在相同的功能中混合這兩個實值類型。 RTApps 只能針對功能使用原始值。

名稱 描述
Adc 應用程式所使用的模擬數位轉換 (ADC) 控制器。 這項功能會保留整個 ADC 控制器(包括 8 針腳區塊),而不只是區塊中的針腳 0。
在高階應用程式中,指定硬體定義頭檔中所宣告的周邊名稱。
在 RTApp 中,指定硬體定義 JSON 檔案中宣告的 AppManifestValue。
硬體定義範例: "Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
原始值範例: "Adc": [ "ADC-CONTROLLER-0" ]
API 參考:Applibs adc.h
概念:在 Azure Sphere 上使用 ADC
AllowedApplicationConnections 允許應用程式連線的應用程式元件標識碼清單。
範例: "AllowedApplicationConnections": [ "005180BC-402F-4CB3-A662-72937DBCDE47" ]
API 參考:Applibs application.h
概念:與高階應用程式通訊
AllowedConnections 允許應用程式連線的 DNS 主機名稱或 IP 位址清單。 如果應用程式使用 Azure IoT 中樞,清單必須包含中樞的IP位址或 DNS 主機名,通常是 hub-name.azure-devices.net。 不接受名稱和IP位址中的埠號碼和通配符。
範例: "AllowedConnections" : [ "my-hub.example.net", "global.azure-devices-provisioning.net" ]
AllowedTcpServerPorts 允許傳入 TCP 流量的埠清單。 您最多可以包含 10 個埠,而且每個埠都必須個別列出。 支援的埠為 1024 到 65535。 您可以為 TCP 和 UDP 指定相同的連接埠。 不過,如果您為裝置上的多個應用程式指定相同的埠,則執行的第二個應用程式將無法載入。
範例: "AllowedTcpServerPorts": [ 1024, 65535 ]
AllowedUdpServerPorts 允許連入 UDP 流量的埠清單。 您最多可以包含 10 個埠,而且每個埠都必須個別列出。 支援的埠為 1024 到 65535。 您可以為 TCP 和 UDP 指定相同的連接埠。 不過,如果您為裝置上的多個應用程式指定相同的埠,則執行的第二個應用程式將無法載入。
範例: "AllowedUdpServerPorts": [ 1024, 50000 ]
CertStore 布爾值,指出高階應用程式是否有權使用 CertStore API 管理憑證:true 以啟用 API;否則為 false。
範例: "CertStore" : true
DeviceAuthentication 字串,指定要用於裝置驗證的 Azure Sphere (舊版) 租使用者的 UUID。
範例: "DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0"
DhcpService 布爾值,指出應用程式是否具有設定 DHCP 服務的許可權:如果應用程式具有功能,則為 true;否則為 false。
範例: "DhcpService" : true
API 參考:Applibs networking.h
概念:使用網路服務
EnterpriseWifiConfig 布爾值,指出高階應用程式是否具有建立 EAP-TLS 網路的許可權,並將憑證與其產生關聯:如果應用程式具有功能,則為 true;否則為 false。
範例: "EnterpriseWifiConfig" : true
ExternalInterrupt RTApp 所使用的外部中斷清單。 此功能不適用於高階應用程式。
範例: "ExternalInterrupt": [ "EINT4", "EINT12" ]
Gpio 應用程式所使用的 GPI 清單。
在高階應用程式中,指定硬體定義頭檔中宣告的 GPIO 名稱,例如 $MT 3620_RDB_LED1_RED
在 RTApp 中,指定對應至硬體定義 JSON 檔案中 GPIO 數位的整數。 例如, 8 指定 GPIO 8。
硬體定義範例: "Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]
原始值範例: "Gpio": [ 8, 12 ]
API 參考:Applibs gpio.h
概念:在 Azure Sphere 上使用 GPO
HardwareAddressConfig 布爾值,指出應用程式是否有權設定網路介面的硬體位址:如果應用程式具有功能,則為 true;否則為 false。
範例:"HardwareAddressConfig" : true
API 參考:Applibs networking.h
概念:使用網路服務
HeapMemStats 布爾值,指出是否啟用堆積記憶體配置追蹤:如果應用程式具有功能,則為 true;否則為 false。
範例: "HeapMemStats": true
概念:高階應用程式中的記憶體使用
I2cMaster 應用程式所使用的 I2C 主要介面清單。
在高階應用程式中,指定硬體定義頭檔中所宣告的周邊名稱。
在 RTApp 中,指定 硬體定義 JSON 檔案中宣告的 AppManifestValue
硬體定義範例: "I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ]
原始值範例: "I2cMaster": [ "ISU0", "ISU1" ]
API 參考:Applibs i2c.h
概念:搭配 Azure Sphere 使用 I2C
I2sSubordinate RTApp 所使用的 INTER-IC 音效 (I2S) 次級介面。 此功能不適用於高階應用程式。 原始值範例: “I2sSubordinate”: [ “I2S0”, “I2S1” ]
MutableStorage 允許應用程式使用永續性記憶體的可變動記憶體設定。
範例: "MutableStorage" : { "SizeKB": 64, }
API 參考:Applibs storage.h
概念:在 Azure Sphere 上使用記憶體
NetworkConfig 布爾值,指出應用程式是否具有設定網路介面的許可權:如果應用程式具有功能,則為 true;否則為 false。
範例: "NetworkConfig" : true
API 參考:Applibs networking.h
概念:使用網路服務
PowerControls 字串數位,表示控制裝置電源狀態的細微功能。 ForcePowerDown 和 ForceReboot 是唯一支援的值。
警告:因為 ForcePowerDown 和 ForceReboot 允許應用程式立即終止所有應用程式,因此您必須確定您的裝置仍能夠接收作業系統和應用程式更新。 如需詳細資訊和指引,請參閱 強制關閉電源和更新
範例: "PowerControls": ["ForcePowerDown", "ForceReboot"]
API 參考:Applibs powermanagement.h
概念:管理 Azure Sphere 裝置的關閉電源狀態
Pwm 應用程式所使用的脈衝寬度調節器(PWM)。
在高階應用程式中,指定硬體定義頭檔中所宣告的周邊名稱。
在 RTApp 中,指定 硬體定義 JSON 檔案中宣告的 AppManifestValue
硬體定義範例: "Pwm": [ "$MT3620_RDB_LED_PWM_CONTROLLER2" ]
原始值範例: "Pwm": [ "PWM-CONTROLLER-0" ]
API 參考:Applibs pwm.h
概念:在高階應用程式中使用 PVM
ReadNetworkProxyConfig 布爾值,指出應用程式是否具有擷取 Proxy 組態的許可權:如果應用程式具有功能,則為 true;否則為 false。
範例: "ReadNetworkProxyConfig": true
API 參考:Applibs networking.h
概念:連線到 Web 服務
SntpService 布爾值,指出應用程式是否具有設定 SNTP 服務的許可權:如果應用程式具有功能,則為 true;否則為 false。
範例: "SntpService" : true
API 參考:Applibs networking.h
概念:SNTP 伺服器
SoftwareUpdateDeferral 布爾值,指出應用程式是否有權在有限的期間內延遲軟體更新:如果應用程式具有功能,則為 true;否則為 false。
範例: "SoftwareUpdateDeferral" : true
API 參考:Applibs eventloop。h
概念:延遲裝置更新
SpiMaster 應用程式所使用的 SPI 主要介面清單。
在高階應用程式中,指定硬體定義頭檔中所宣告的周邊名稱。
在 RTApp 中,指定 硬體定義 JSON 檔案中宣告的 AppManifestValue
硬體定義範例: "SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ]
原始值範例: "SpiMaster": [ "ISU0", "ISU1" ]
API 參考:Applibs spi.h
概念:搭配 Azure Sphere 使用 SPI
SystemEventNotifications 布爾值,指出應用程式是否有權接收系統事件通知:如果應用程式具有功能,則為 true;否則為 false。
範例: "SystemEventNotifications" : true
API 參考:Applibs sysevent.h
概念:延遲裝置更新
SystemTime 布爾值,指出應用程式是否具有設定系統時間的許可權:如果應用程式具有功能,則為 true;否則為 false。
範例: "SystemTime" : true
API 參考:Applibs rtc.h
概念:管理系統時間和 Azure Sphere 上的 RTC
TimeSyncConfig 布爾值,指出應用程式是否具有設定時間同步服務的許可權:如果應用程式具有功能,則為 true;否則為 false。
範例: "TimeSyncConfig" : true
Uart 應用程式使用的 UART 周邊清單。 此功能不會在 MT3620 開發面板上啟用專用 UART。 如需專用 UART 的相關信息,請參閱 建置即時可用的應用程式
在高階應用程式中,指定硬體定義頭檔中所宣告的周邊名稱。
在 RTApp 中,指定 硬體定義 JSON 檔案中宣告的 AppManifestValue
硬體定義範例: "Uart": [ "$MT3620_RDB_HEADER2_ISU0_UART", "$MT3620_RDB_HEADER4_ISU1_UART" ]
原始值範例: "Uart": [ "ISU0", "ISU1" ]
API 參考:Applibs uart.h
概念:在 Azure Sphere 上使用 UART
WifiConfig 布爾值,指出應用程式是否有權使用 WifiConfig API 來變更 Wi-Fi 組態:如果應用程式具有功能,則為 true;否則為 false。
範例: "WifiConfig" : true
API 參考:Applibs wificonfig.h
概念:設定網路功能

MutableStorage 區段支援下列專案:

名稱 描述
SizeKB 整數,指定可變動記憶體的大小,以 kibibytes 為單位。 最大值為 64。 值為 0 相當於沒有可變動儲存功能。

範例

以下顯示目標為 MT3620 RDB 硬體的高階應用程式範例app_manifest.json檔案:

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

MyTestApp 的範例app_manifest.json檔案會執行下列動作:

  • 將四個命令行自變數傳遞至應用程式。
  • 只允許連線到 DNS 主機 my-hub.example.net、contoso.azure-devices.net 和 global.azure-devices-provisioning.net。
  • 允許埠 1024 和 65535 上的傳入 TCP 流量。
  • 允許埠 1024 和 50000 上的連入 UDP 流量。
  • 指定要用於裝置驗證的 Azure Sphere(舊版)租使用者 UUID,並允許連線到裝置布建服務。
  • 指定三個 GPO 的使用。
  • 允許應用程式設定網路介面的硬體位址。
  • 指定一個 UART 周邊的使用。
  • 啟用具有 64 kibibytes 儲存空間的可變動記憶體。
  • 可讓應用程式使用 WifiConfig API 來變更 Wi-Fi 組態。
  • 指定使用一個 SPI 主要介面。
  • 指定一個 I2C 主要介面的使用。
  • 可讓應用程式使用 RTC API 設定系統時間。
  • 啟用應用程式開發的 mallocng。