

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# OTA 更新先決條件
<a name="ota-prereqs"></a>

若要使用無線 (OTA) 更新，請執行下列動作：
+ 檢查[使用 HTTP 進行 OTA 更新的先決條件](ota-http-freertos.md)或[使用 MQTT 進行 OTA 更新的先決條件](ota-mqtt-freertos.md)。
+ [建立 Amazon S3 儲存貯體以存放您的更新](dg-ota-bucket.md).
+ [建立 OTA 更新服務角色](create-service-role.md).
+ [建立 OTA 使用者政策](create-ota-user-policy.md).
+ [建立程式碼簽署憑證](ota-code-sign-cert.md).
+ 如果您使用適用於 的程式碼簽署 AWS IoT，則為 [授予 程式碼簽署的存取權 AWS IoT](code-sign-policy.md)。
+ [使用 OTA 程式庫下載 FreeRTOS](ota-download-freertos.md).

# 建立 Amazon S3 儲存貯體以存放您的更新
<a name="dg-ota-bucket"></a>

OTA 更新檔案存放在 Amazon S3 儲存貯體中。

如果您使用的是 Code Signing for AWS IoT，您用來建立程式碼簽署任務的命令會採用來源儲存貯體 （未簽署韌體映像所在的位置） 和目的地儲存貯體 （寫入已簽署韌體映像的位置）。您可以為來源及目標指定相同的儲存貯體。檔案名稱會變更為 GUID，因此原始檔案不會遭到覆寫。<a name="create-bucket"></a>

**建立 Amazon S3 儲存貯體**

1. 至 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 登入 Amazon S3 主控台。

1. 選擇**建立儲存貯體**。

1. 輸入儲存**貯體名稱**。

1. 在**封鎖公開存取的儲存貯體設定**下，保持選取**封鎖所有公開存取**，以接受預設許可。

1. 在**儲存貯體版本控制**下，選取**啟用**，將所有版本保留在相同的儲存貯體中。

1. 選擇**建立儲存貯體**。

如需 Amazon S3 的詳細資訊，請參閱 [Amazon Simple Storage Service 使用者指南](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)。

# 建立 OTA 更新服務角色
<a name="create-service-role"></a>

OTA 更新服務會擔任此角色，以代表您建立和管理 OTA 更新任務。<a name="create-service-role-steps"></a>

**建立 OTA 服務角色**

1. 登入 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 從導覽窗格中，選擇 **Roles (角色)**。

1. 選擇建**立角色**。

1. 在**選取可信任執行個體類型**下，選取 **AWS 服務**。

1. 從 AWS 服務清單中選擇 **IoT**。

1. 在 **Select your use case (選取您的使用案例)** 下，選擇 **IoT**。

1. 選擇 **Next: Permissions (下一步：許可)**。

1. 選擇 **Next: Tags (下一步：標籤)**。

1. 選擇下**一步：檢閱**。

1. 輸入角色名稱和說明，然後選擇 **Create role (建立角色)**。

如需 IAM 角色的詳細資訊，請參閱 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。

**重要**  
若要解決混淆代理人安全問題，您必須遵循[AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/cross-service-confused-deputy-prevention.html)指南中的指示。<a name="add-ota-permissions"></a>

**將 OTA 更新許可新增到您的 OTA 服務角色**

1. 在 IAM 主控台頁面上的搜尋方塊中，輸入角色的名稱，然後從清單中選擇。

1. 選擇**連接政策**。

1. 在 **Search (搜尋)** 方塊中，輸入 "AmazonFreeRTOSOTAUpdate"，從篩選政策清單中選取 **AmazonFreeRTOSOTAUpdate**，然後選擇 **Attach policy (連接政策)** 將該政策連接至您的服務角色。<a name="add-iam-permissions"></a>

**將必要的 IAM 許可新增至 OTA 服務角色**

1. 在 IAM 主控台頁面上的搜尋方塊中，輸入角色的名稱，然後從清單中選擇。

1. 選擇**新增內嵌政策**。

1. 選擇 **JSON** 標籤。

1. 將下列政策文件複製並貼入文字方塊：

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "iam:GetRole",
                   "iam:PassRole"
               ],
               "Resource": "arn:aws:iam::111122223333:role/your_role_name"
           }
       ]
   }
   ```

------

   請務必*將 your\$1account\$1id* 取代為 AWS 您的帳戶 ID，並將 *your\$1role\$1name* 取代為 OTA 服務角色的名稱。

1. 選擇**檢閱政策**。

1. 輸入政策名稱，然後選擇 **Create policy (建立政策)**。

**注意**  
如果您的 Amazon S3 儲存貯體名稱以 "afr-ota" 開頭，則不需要下列程序。如果這樣做， AWS 受管政策`AmazonFreeRTOSOTAUpdate`已包含必要的許可。<a name="add-s3-permissions"></a>

****將所需的 Amazon S3 許可新增至 OTA 服務角色****

1. 在 IAM 主控台頁面上的搜尋方塊中，輸入角色的名稱，然後從清單中選擇。

1. 選擇**新增內嵌政策**。

1. 選擇 **JSON** 標籤。

1. 將下列政策文件複製並貼入方塊。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "s3:GetObjectVersion",
                   "s3:GetObject",
                   "s3:PutObject"
               ],
               "Resource": [
                   "arn:aws:s3:::example-bucket/*"
               ]
           }
       ]
   }
   ```

------

   此政策授予您的 OTA 服務角色讀取 Amazon S3 物件的許可。確保您將 *example-bucket* 取代為儲存貯體的名稱。

1. 選擇**檢閱政策**。

1. 輸入政策名稱，然後選擇 **Create policy (建立政策)**。

# 建立 OTA 使用者政策
<a name="create-ota-user-policy"></a>

您必須授予 使用者許可來執行無線更新。您的 使用者必須擁有執行以下作業的許可：
+ 存取存放您韌體更新的 S3 儲存貯體。
+ 存取存放在 中的憑證 AWS Certificate Manager。
+ 存取 AWS IoT MQTT 型檔案交付功能。
+ 存取 FreeRTOS OTA 更新。
+ 存取 AWS IoT 任務。
+ 存取 IAM。
+ 的存取碼簽署 AWS IoT。請參閱 [授予 程式碼簽署的存取權 AWS IoT](code-sign-policy.md)。
+ 列出 FreeRTOS 硬體平台。
+ 標記和取消標記 AWS IoT 資源。

若要授予使用者所需的許可，請參閱 [IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。另請參閱[授權使用者和雲端服務使用 AWS IoT 任務](https://docs.aws.amazon.com/iot/latest/developerguide/iam-policy-users-jobs.html)。

若要提供存取權，請新增權限至您的使用者、群組或角色：
+ 中的使用者和群組 AWS IAM Identity Center：

  建立權限合集。請按照《*AWS IAM Identity Center 使用者指南*》中的[建立權限合集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)說明進行操作。
+ 透過身分提供者在 IAM 中管理的使用者：

  建立聯合身分的角色。遵循《*IAM 使用者指南*》的[為第三方身分提供者 (聯合) 建立角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)中的指示。
+ IAM 使用者：
  + 建立您的使用者可擔任的角色。請按照《*IAM 使用者指南*》的[為 IAM 使用者建立角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)中的指示。
  + (不建議) 將政策直接附加至使用者，或將使用者新增至使用者群組。請遵循《*IAM 使用者指南*》的[新增許可到使用者 (主控台)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) 中的指示。

# 建立程式碼簽署憑證
<a name="ota-code-sign-cert"></a>

若要數位簽署韌體映像，您需要程式碼簽署憑證及私有金鑰。基於測試目的，您可以建立自我簽署憑證和私有金鑰。對於生產環境，請透過知名的憑證授權機構 (CA) 購買憑證。

不同平台需要不同類型的程式碼簽署憑證。下列各節說明如何為不同的 FreeRTOS 合格平台建立程式碼簽署憑證。

**Topics**
+ [為 Texas Instruments CC3220SF-LAUNCHXL 建立程式碼簽署憑證](ota-code-sign-cert-ti.md)
+ [為 Espressif ESP32 建立程式碼簽署憑證](ota-code-sign-cert-esp.md)
+ [為 Nordic nrf52840-dk 建立程式碼簽署憑證](ota-code-sign-cert-nordic.md)
+ [為 FreeRTOS Windows 模擬器建立程式碼簽署憑證](ota-code-sign-cert-win.md)
+ [為自訂硬體建立程式碼簽署憑證](ota-code-sign-cert-other.md)

# 為 Texas Instruments CC3220SF-LAUNCHXL 建立程式碼簽署憑證
<a name="ota-code-sign-cert-ti"></a>

**重要**  <a name="deprecation-message"></a>
此參考整合託管在已棄用的 Amazon-FreeRTOS 儲存庫上。我們建議您在建立新專案時從[這裡開始](freertos-getting-started-modular.md)。如果您已經有以現在已棄用之 Amazon-FreeRTOS 儲存庫為基礎的現有 FreeRTOS 專案，請參閱 [Amazon-FreeRTOS Github 儲存庫遷移指南](github-repo-migration.md)。 FreeRTOS 

SimpleLink Wi-Fi CC3220SF Wireless Microcontroller Launchpad Development Kit 支援兩種韌體程式碼簽署的憑證鏈：
+ 生產 (certificate-catalog)

  若要使用生產憑證鏈，您必須購買商業程式碼簽署憑證，並使用 [TI Uniflash 工具](http://www.ti.com/tool/UNIFLASH)來將電路板設為生產模式。
+ 測試及開發 (certificate-playground) 

  遊樂場憑證鏈可讓您嘗試使用自我簽署的程式碼簽署憑證進行 OTA 更新。

使用 AWS Command Line Interface 將程式碼簽署憑證、私有金鑰和憑證鏈匯入至其中 AWS Certificate Manager。如需詳細資訊，請參閱*AWS Command Line Interface *[《 使用者指南》中的安裝 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) 。

下載並安裝最新版的 [SimpleLink CC3220 開發套件](http://www.ti.com/tool/download/SIMPLELINK-CC3220-SDK)。根據預設，您需要檔案所在的位置如下：

`C:\ti\simplelink_cc32xx_sdk_version\tools\cc32xx_tools\certificate-playground` (Windows) 

`/Applications/Ti/simplelink_cc32xx_version/tools/cc32xx_tools/certificate-playground` (macOS)

SimpleLink CC3220 SDK 中的憑證格式為 DER 格式。若要建立自我簽署的程式碼簽署憑證，您必須將其轉換為 PEM 格式。

請依照下列步驟建立連結至 Texas Instruments 遊樂場憑證階層的程式碼簽署憑證，並符合 AWS Certificate Manager 和 Code Signing for AWS IoT criteria。

**注意**  
若要建立程式碼簽署的憑證，請在您的機器上安裝 [OpenSSL](https://www.openssl.org/)。在安裝 OpenSSL 後，請確保將 `openssl` 指派給命令提示字元或終端機環境中的 OpenSSL 可執行檔。

**建立自我簽署的程式碼簽署憑證**

1. 使用管理員許可來開啟命令提示字元或終端機。

1. 在您的工作目錄中，使用以下文字來建立名為 `cert_config.txt` 的檔案。將 *test\$1signer@amazon.com* 取代為您的電子郵件地址。

   ```
   [ req ]
   prompt             = no
   distinguished_name = my dn
   
   [ my dn ]
   commonName = test_signer@amazon.com
   
   [ my_exts ]
   keyUsage         = digitalSignature
   extendedKeyUsage = codeSigning
   ```

1. 建立私有金鑰及憑證簽署請求 (CSR)：

   ```
   openssl req -config cert_config.txt -extensions my_exts -nodes -days 365 -newkey rsa:2048 -keyout tisigner.key -out tisigner.csr
   ```

1. 將 Texas Instruments 遊樂場根 CA 私有金鑰從 DER 格式轉換成 PEM 格式。

   TI 遊樂場根 CA 私有金鑰的所在位置如下：

   `C:\ti\simplelink_cc32xx_sdk_version\tools\cc32xx_tools\certificate-playground\dummy-root-ca-cert-key` (Windows) 

   `/Applications/Ti/simplelink_cc32xx_sdk_version/tools/cc32xx_tools/certificate-playground/dummy-root-ca-cert-key` (macOS)

   ```
   openssl rsa -inform DER -in dummy-root-ca-cert-key -out dummy-root-ca-cert-key.pem
   ```

1. 將 Texas Instruments 遊樂場根 CA 憑證從 DER 格式轉換成 PEM 格式。

   TI 遊樂場根憑證的所在位置如下：

   `C:\ti\simplelink_cc32xx_sdk_version\tools\cc32xx_tools\certificate-playground/dummy-root-ca-cert` (Windows) 

   `/Applications/Ti/simplelink_cc32xx_sdk_version/tools/cc32xx_tools/certificate-playground/dummy-root-ca-cert` (macOS)

   ```
   openssl x509 -inform DER -in dummy-root-ca-cert -out dummy-root-ca-cert.pem
   ```

1. 使用 Texas Instruments 根 CA 簽署 CSR：

   ```
   openssl x509 -extfile cert_config.txt -extensions my_exts  -req -days 365 -in tisigner.csr -CA dummy-root-ca-cert.pem -CAkey dummy-root-ca-cert-key.pem -set_serial 01 -out tisigner.crt.pem -sha1
   ```

1. 將您的程式碼簽署憑證 (`tisigner.crt.pem`) 轉換成 DER 格式：

   ```
   openssl x509 -in tisigner.crt.pem -out tisigner.crt.der -outform DER
   ```
**注意**  
您會在稍後將 `tisigner.crt.der` 憑證寫入 TI 開發電路板。

1. 將程式碼簽署憑證、私有金鑰和憑證鏈匯入至 AWS Certificate Manager：

   ```
   aws acm import-certificate --certificate fileb://tisigner.crt.pem --private-key fileb://tisigner.key --certificate-chain fileb://dummy-root-ca-cert.pem
   ```

   此命令會顯示您憑證的 ARN。在建立 OTA 更新任務時，您將需要此 ARN。
**注意**  
此步驟的編寫假設您將使用適用於 的程式碼簽署 AWS IoT 來簽署韌體映像。雖然 AWS IoT 建議使用適用於 的程式碼簽署，但您可以手動簽署韌體映像。

# 為 Espressif ESP32 建立程式碼簽署憑證
<a name="ota-code-sign-cert-esp"></a>

**重要**  <a name="deprecation-message"></a>
此參考整合託管在已棄用的 Amazon-FreeRTOS 儲存庫上。我們建議您在建立新專案時從[這裡開始](freertos-getting-started-modular.md)。如果您已經有以現在已棄用之 Amazon-FreeRTOS 儲存庫為基礎的現有 FreeRTOS 專案，請參閱 [Amazon-FreeRTOS Github 儲存庫遷移指南](github-repo-migration.md)。 FreeRTOS 

Espressif ESP32 主機板支援使用 ECDSA 程式碼簽署憑證的自我簽署 SHA256。

**注意**  
若要建立程式碼簽署的憑證，請在您的機器上安裝 [OpenSSL](https://www.openssl.org/)。在安裝 OpenSSL 後，請確保將 `openssl` 指派給命令提示字元或終端機環境中的 OpenSSL 可執行檔。  
使用 AWS Command Line Interface 將程式碼簽署憑證、私有金鑰和憑證鏈匯入至其中 AWS Certificate Manager。如需安裝 的資訊 AWS CLI，請參閱[安裝 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)。

1. 在您的工作目錄中，使用以下文字來建立名為 `cert_config.txt` 的檔案。將 *test\$1signer@amazon.com* 取代為您的電子郵件地址：

   ```
   [ req ]
   prompt             = no
   distinguished_name = my_dn
                       
   [ my_dn ]
   commonName = test_signer@amazon.com
                       
   [ my_exts ]
   keyUsage         = digitalSignature
   extendedKeyUsage = codeSigning
   ```

1. 建立 ECDSA 程式碼簽署私有金鑰：

   ```
   openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out ecdsasigner.key
   ```

1. 建立 ECDSA 程式碼簽署憑證：

   ```
   openssl req -new -x509 -config cert_config.txt -extensions my_exts -nodes -days 365 -key ecdsasigner.key -out ecdsasigner.crt
   ```

1. 將程式碼簽署憑證、私有金鑰和憑證鏈匯入至 AWS Certificate Manager：

   ```
   aws acm import-certificate --certificate fileb://ecdsasigner.crt --private-key fileb://ecdsasigner.key
   ```

   此命令會顯示您憑證的 ARN。在建立 OTA 更新任務時，您將需要此 ARN。
**注意**  
此步驟的編寫假設您將使用適用於 的程式碼簽署 AWS IoT 來簽署韌體映像。雖然 AWS IoT 建議使用適用於 的程式碼簽署，但您可以手動簽署韌體映像。

# 為 Nordic nrf52840-dk 建立程式碼簽署憑證
<a name="ota-code-sign-cert-nordic"></a>

**重要**  <a name="deprecation-message"></a>
此參考整合託管在已棄用的 Amazon-FreeRTOS 儲存庫上。我們建議您在建立新專案時從[這裡開始](freertos-getting-started-modular.md)。如果您已經有以現在已棄用之 Amazon-FreeRTOS 儲存庫為基礎的現有 FreeRTOS 專案，請參閱 [Amazon-FreeRTOS Github 儲存庫遷移指南](github-repo-migration.md)。 FreeRTOS 

Nordic nrf52840-dk 支援透過 ECDSA 程式碼簽署憑證進行的自我簽署 SHA256。

**注意**  
若要建立程式碼簽署的憑證，請在您的機器上安裝 [OpenSSL](https://www.openssl.org/)。在安裝 OpenSSL 後，請確保將 `openssl` 指派給命令提示字元或終端機環境中的 OpenSSL 可執行檔。  
使用 AWS Command Line Interface 將程式碼簽署憑證、私有金鑰和憑證鏈匯入至其中 AWS Certificate Manager。如需安裝 的資訊 AWS CLI，請參閱[安裝 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)。

1. 在您的工作目錄中，使用以下文字來建立名為 `cert_config.txt` 的檔案。將 *test\$1signer@amazon.com* 取代為您的電子郵件地址：

   ```
   [ req ]
   prompt             = no
   distinguished_name = my_dn
                       
   [ my_dn ]
   commonName = test_signer@amazon.com
                       
   [ my_exts ]
   keyUsage         = digitalSignature
   extendedKeyUsage = codeSigning
   ```

1. 建立 ECDSA 程式碼簽署私有金鑰：

   ```
   openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out ecdsasigner.key
   ```

1. 建立 ECDSA 程式碼簽署憑證：

   ```
   openssl req -new -x509 -config cert_config.txt -extensions my_exts -nodes -days 365 -key ecdsasigner.key -out ecdsasigner.crt
   ```

1. 將程式碼簽署憑證、私有金鑰和憑證鏈匯入至 AWS Certificate Manager：

   ```
   aws acm import-certificate --certificate fileb://ecdsasigner.crt --private-key fileb://ecdsasigner.key
   ```

   此命令會顯示您憑證的 ARN。在建立 OTA 更新任務時，您將需要此 ARN。
**注意**  
此步驟的編寫假設您將使用適用於 的程式碼簽署 AWS IoT 來簽署韌體映像。雖然 AWS IoT 建議使用適用於 的程式碼簽署，但您可以手動簽署韌體映像。

# 為 FreeRTOS Windows 模擬器建立程式碼簽署憑證
<a name="ota-code-sign-cert-win"></a>

FreeRTOS Windows 模擬器需要具有 ECDSA P-256 金鑰和 SHA-256 雜湊的程式碼簽署憑證，才能執行 OTA 更新。若您沒有程式碼簽署憑證，請依照以下步驟來建立。

**注意**  
若要建立程式碼簽署憑證，請在您的機器上安裝 [OpenSSL](https://www.openssl.org/)。在安裝 OpenSSL 後，請確保將 `openssl` 指派給命令提示字元或終端機環境中的 OpenSSL 可執行檔。  
使用 AWS Command Line Interface 將程式碼簽署憑證、私有金鑰和憑證鏈匯入至其中 AWS Certificate Manager。如需安裝 的資訊 AWS CLI，請參閱[安裝 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)。

1. 在您的工作目錄中，使用以下文字來建立名為 `cert_config.txt` 的檔案。將 *test\$1signer@amazon.com* 取代為您的電子郵件地址：

   ```
   [ req ]
   prompt             = no
   distinguished_name = my_dn
                       
   [ my_dn ]
   commonName = test_signer@amazon.com
                       
   [ my_exts ]
   keyUsage         = digitalSignature
   extendedKeyUsage = codeSigning
   ```

1. 建立 ECDSA 程式碼簽署私有金鑰：

   ```
   openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out ecdsasigner.key
   ```

1. 建立 ECDSA 程式碼簽署憑證：

   ```
   openssl req -new -x509 -config cert_config.txt -extensions my_exts -nodes -days 365 -key ecdsasigner.key -out ecdsasigner.crt
   ```

1. 將程式碼簽署憑證、私有金鑰和憑證鏈匯入至 AWS Certificate Manager：

   ```
   aws acm import-certificate --certificate fileb://ecdsasigner.crt --private-key fileb://ecdsasigner.key
   ```

   此命令會顯示您憑證的 ARN。在建立 OTA 更新任務時，您將需要此 ARN。
**注意**  
此步驟的編寫假設您將使用適用於 的程式碼簽署 AWS IoT 來簽署韌體映像。雖然 AWS IoT 建議使用適用於 的程式碼簽署，但您可以手動簽署韌體映像。

# 為自訂硬體建立程式碼簽署憑證
<a name="ota-code-sign-cert-other"></a>

使用適當的工具組，為您的硬體建立自我簽署憑證及私有金鑰。

使用 AWS Command Line Interface 將程式碼簽署憑證、私有金鑰和憑證鏈匯入 AWS Certificate Manager。如需安裝 的資訊 AWS CLI，請參閱[安裝 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)。

建立程式碼簽署憑證之後，您可以使用 AWS CLI 將其匯入 ACM：

```
aws acm import-certificate --certificate fileb://code-sign.crt --private-key fileb://code-sign.key
```

此命令的輸出會顯示您憑證的 ARN。在建立 OTA 更新任務時，您將需要此 ARN。

ACM 需要憑證才能使用特定演算法和金鑰大小。如需詳細資訊，請參閱[匯入憑證的事前準備](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate-prerequisites.html)。如需 ACM 的詳細資訊，請參閱[將憑證匯入 AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)。

您必須將程式碼簽署憑證的內容複製、貼上並格式化為檔案，該`vendors/vendor/boards/board/aws_demos/config_files/ota_demo_config.h`檔案是稍後下載的 FreeRTOS 程式碼的一部分。

# 授予 程式碼簽署的存取權 AWS IoT
<a name="code-sign-policy"></a>

若要提供存取權，請新增權限至您的使用者、群組或角色：
+ 中的使用者和群組 AWS IAM Identity Center：

  建立權限合集。請按照《*AWS IAM Identity Center 使用者指南*》中的[建立權限合集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)說明進行操作。
+ 透過身分提供者在 IAM 中管理的使用者：

  建立聯合身分的角色。遵循《*IAM 使用者指南*》的[為第三方身分提供者 (聯合) 建立角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)中的指示。
+ IAM 使用者：
  + 建立您的使用者可擔任的角色。請按照《*IAM 使用者指南*》的[為 IAM 使用者建立角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)中的指示。
  + (不建議) 將政策直接附加至使用者，或將使用者新增至使用者群組。請遵循《*IAM 使用者指南*》的[新增許可到使用者 (主控台)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) 中的指示。

# 使用 OTA 程式庫下載 FreeRTOS
<a name="ota-download-freertos"></a>

您可以從 [GitHub](https://github.com/freertos/freertos) 複製或下載 FreeRTOS。如需說明，請參閱 [ README.md](https://github.com/freertos/freertos/blob/main/README.md) 檔案。

如需設定和執行 OTA 示範應用程式的相關資訊，請參閱[無線更新示範應用程式](ota-demo.md)。

**重要**  
在本主題中，FreeRTOS 下載目錄的路徑稱為 `freertos`。
`freertos` 路徑中的空格字元可能會導致建置失敗。當您複製或拷貝儲存庫時，請確定您建立的路徑不包含空格字元。
Microsoft Windows 的檔案路徑長度上限為 260 個字元。長 FreeRTOS 下載目錄路徑可能會導致建置失敗。
由於原始碼可能包含符號連結，如果您使用 Windows 擷取封存，您可能需要：  
啟用[開發人員模式](https://docs.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-development)或 
使用提升為管理員的主控台。
透過這種方式，Windows 可以在擷取封存時正確建立符號連結。否則，符號連結會寫入為一般檔案，其中包含符號連結的路徑為文字或空白。如需詳細資訊，請參閱 [ Windows 10！ 中的部落格項目 Symlinks](https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/)。  
如果您在 Windows 下使用 Git，則必須啟用開發人員模式，或者您必須：  
使用下列命令將 `core.symlinks`設為 true：  

    ```
    git config --global core.symlinks true
    ```
每當您使用寫入系統的 git 命令 （例如 **git pull**、 和 ) 時**git clone**，請使用提升為管理員的主控台**git submodule update --init --recursive**。

# 使用 MQTT 進行 OTA 更新的先決條件
<a name="ota-mqtt-freertos"></a>

本節描述使用 MQTT 執行無線 (OTA) 更新的一般需求。

## 最低需求
<a name="ota-mqtt-freertos-min-requirements"></a>
+ 裝置韌體必須包含必要的 FreeRTOS 程式庫 (coreMQTT Agent、OTA 更新及其相依性）。
+ 需要 FreeRTOS 1.4.0 版或更新版本。不過，我們建議您儘可能使用最新版本。

## 組態
<a name="ota-mqtt-freertos-config"></a>

從 201912.00 版開始，FreeRTOS OTA 可以使用 HTTP 或 MQTT 通訊協定，將韌體更新映像從 傳輸 AWS IoT 到 裝置。如果您在 FreeRTOS 中建立 OTA 更新時指定這兩個通訊協定，則每個裝置都會判斷用於傳輸映像的通訊協定。如需詳細資訊，請參閱[使用 HTTP 進行 OTA 更新的先決條件](ota-http-freertos.md)。

根據預設， 中的 OTA 通訊協定組態[https://github.com/aws/amazon-freertos/blob/main/vendors/vendor/boards/board/aws_demos/config_files/ota_config.h](https://github.com/aws/amazon-freertos/blob/main/vendors/vendor/boards/board/aws_demos/config_files/ota_config.h)是使用 MQTT 通訊協定。

## 裝置特定的組態
<a name="ota-mqtt-freertos-dev-config"></a>

無。

## 記憶體用量
<a name="ota-mqtt-freertos-memory"></a>

當 MQTT 用於資料傳輸時，MQTT 連線不需要額外的記憶體，因為它是在控制操作與資料操作之間共用。

## 裝置政策
<a name="ota-mqtt-freertos-device-policy"></a>

使用 MQTT 接收 OTA 更新的每個裝置都必須在 中註冊為物件， AWS IoT 而且物件必須具有類似此處列出的附加政策。如需 `"Action"` 和 `"Resource"` 物件中的項目的詳細資訊，請參閱 [AWS IoT 核心政策動作](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-actions.html)和 [AWS IoT 核心動作資源](https://docs.aws.amazon.com/iot/latest/developerguide/iot-action-resources.html)。

**備註**
+ `iot:Connect` 許可允許您的裝置 AWS IoT 透過 MQTT 連線至 。
+  AWS IoT 任務 (`.../jobs/*`) 主題的 `iot:Subscribe`和 `iot:Publish`許可允許連線的裝置接收任務通知和任務文件，以及發佈任務執行的完成狀態。
+ OTA 串流 (`.../streams/*`) AWS IoT 主題的 `iot:Subscribe`和 `iot:Publish`許可允許連接的裝置從中擷取 OTA 更新資料 AWS IoT。需要這些許可才能透過 MQTT 執行韌體更新。
+ `iot:Receive` 許可允許 AWS IoT Core 在這些主題上發佈訊息到連線的裝置。每次交付 MQTT 訊息時，都會檢查此許可。您可以使用此許可來撤銷目前訂閱主題之用戶端的存取權。

# 使用 HTTP 進行 OTA 更新的先決條件
<a name="ota-http-freertos"></a>

本節描述使用 HTTP 執行無線 (OTA) 更新的一般需求。從 201912.00 版開始，FreeRTOS OTA 可以使用 HTTP 或 MQTT 通訊協定，將韌體更新映像從 傳輸 AWS IoT 到 裝置。

**注意**  
雖然 HTTP 通訊協定可能用於傳輸韌體映像，但仍然需要 coreMQTT Agent 程式庫，因為與 的其他互動 AWS IoT Core 會使用 coreMQTT Agent 程式庫，包括傳送或接收任務執行通知、任務文件和執行狀態更新。
當您為 OTA 更新任務同時指定 MQTT 和 HTTP 通訊協定時，每個個別裝置上 OTA 代理程式軟體的設定都會決定用來傳輸韌體映像的通訊協定。若要將 OTA 代理程式從預設 MQTT 通訊協定方法變更為 HTTP 通訊協定，您可以修改用來編譯裝置的 FreeRTOS 原始程式碼的標頭檔案。

## 最低需求
<a name="ota-http-freertos-min-requirements"></a>
+ 裝置韌體必須包含必要的 FreeRTOS 程式庫 (coreMQTT 代理程式、HTTP、OTA 代理程式及其相依性）。
+ FreeRTOS 版本 201912.00 或更新版本需要變更 OTA 通訊協定的組態，才能透過 HTTP 啟用 OTA 資料傳輸。

## 組態
<a name="ota-http-freertos-config"></a>

請參閱 [https://github.com/aws/amazon-freertos/blob/main/vendors/vendor/boards/board/aws_demos/config_files/ota_config.h](https://github.com/aws/amazon-freertos/blob/main/vendors/vendor/boards/board/aws_demos/config_files/ota_config.h) 檔案中 OTA 通訊協定的下列組態。

**透過 HTTP 啟用 OTA 資料傳輸**

1. 將 `configENABLED_DATA_PROTOCOLS` 變更為 `OTA_DATA_OVER_HTTP`。

1. 當 OTA 更新時，您可以指定這兩個通訊協定，以便可以使用 MQTT 或 HTTP 通訊協定。您可以將 `configOTA_PRIMARY_DATA_PROTOCOL` 變更 `OTA_DATA_OVER_HTTP`，以將裝置使用的主要通訊協定設定為 HTTP。

**注意**  
OTA 資料操作僅支援 HTTP。若為控制操作，您必須使用 MQTT。

## 裝置特定的組態
<a name="ota-http-freertos-device-configuration"></a>

**ESP32**  
由於 RAM 數量有限，當您啟用 HTTP 做為 OTA 資料通訊協定時，必須關閉 BLE。在 [https://github.com/aws/amazon-freertos/blob/main/vendors/espressif/boards/esp32/aws_demos/config_files/aws_iot_network_config.h](https://github.com/aws/amazon-freertos/blob/main/vendors/espressif/boards/esp32/aws_demos/config_files/aws_iot_network_config.h) 檔案中，僅將 `configENABLED_NETWORKS` 變更為 `AWSIOT_NETWORK_TYPE_WIFI`。  

```
/**
     * @brief Configuration flag which is used to enable one or more network interfaces for a board.
     *
     * The configuration can be changed any time to keep one or more network enabled or disabled.
     * More than one network interfaces can be enabled by using 'OR' operation with flags for
     * each network types supported. Flags for all supported network types can be found
     * in "aws_iot_network.h"
     *
     */
    #define configENABLED_NETWORKS      ( AWSIOT_NETWORK_TYPE_WIFI )
```

## 記憶體用量
<a name="ota-http-freertos-memory"></a>

當 MQTT 用於資料傳輸時，MQTT 連線不需要額外的堆積記憶體，因為它是在控制操作與資料操作之間共用。不過，透過 HTTP 啟用資料傳輸需要額外的堆積記憶體。以下是所有支援平台的堆積記憶體用量資料，使用 FreeRTOS `xPortGetFreeHeapSize` API 計算。您必須確定有足夠的 RAM 才能使用 OTA 程式庫。

****Texas Instruments CC3220SF-LAUNCHXL****  
控制操作 (MQTT)：12 KB  
資料操作 (HTTP)：10 KB  
 TI 會使用相當少的 RAM，因為它在硬體上使用 SSL，所以它不會使用 mbedtls 程式庫。

****Microchip Curiosity PIC32MZEF****  
控制操作 (MQTT)：65 KB  
資料操作 (HTTP)：43 KB

****Espressif ESP32****  
控制操作 (MQTT)：65 KB  
資料操作 (HTTP)：45 KB  
ESP32 上的 BLE 大約需要 87 KB RAM。沒有足夠的 RAM 來啟用所有的程式，如上述裝置特定的組態中所述。

****Windows 模擬器****  
控制操作 (MQTT)：82 KB   
資料操作 (HTTP)：63 KB 

****Nordic nrf52840-dk****  
不支援 HTTP。

## 裝置政策
<a name="ota-http-freertos-device-policy"></a>

此政策可讓您使用 MQTT 或 HTTP 來進行 OTA 更新。

每部使用 HTTP 接收 OTA 更新的裝置都必須註冊為 AWS IoT 中的物件，且該物件必須有連接的政策，如此處列出的政策所示。如需 `"Action"` 和 `"Resource"` 物件中的項目的詳細資訊，請參閱 [AWS IoT 核心政策動作](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-actions.html)和 [AWS IoT 核心動作資源](https://docs.aws.amazon.com/iot/latest/developerguide/iot-action-resources.html)。

**備註**
+ `iot:Connect` 許可允許您的裝置透過 MQTT 連接至 AWS IoT 。
+  AWS IoT 任務 (`.../jobs/*`) 主題的 `iot:Subscribe`和 `iot:Publish`許可允許連線的裝置接收任務通知和任務文件，以及發佈任務執行的完成狀態。
+ `iot:Receive` 許可允許 AWS IoT Core 在這些主題上發佈訊息到目前連線的裝置。每次交付 MQTT 訊息時，都會檢查此許可。您可以使用此許可來撤銷目前訂閱主題之用戶端的存取權。