1. 案例簡介
OTA升級是很多嵌入式產品必備的一個功能。HaaS提供了完備的OTA解決方案。本案例就是一個端云一體的例子。 本文將分幾個部分介紹,具體包括: 設備端代碼的修改、編譯、燒錄。 云端服務器的配置、新增、OTA升級包上傳、OTA升級。 本文的設備連接情況如下:
本文的主要目標是通過修改設備端代碼和配置云端,完成對設備端版本的升級,如下圖所示:
2. 基礎知識
OTA:(over the air)已成為物聯網設備的剛需功能, AliIOS Things OTA有完備的升級方案,對各種升級場景都有很好的支持。 升級模式:整包升級、壓縮升級、差分升級、安全升級。 支持的升級通道:http、https、BLE、3G/4G,NB等; 復雜場景支持:網關及子設備升級,連接型模組升級非連接主設備的間接升級; OTA工具:差分工具、本地簽名工具、ymodem輔助升級工具,多固件打包工具等;
HaaS100進行升級流程,如下圖所示,當用戶開啟阿里云IoT物聯網平臺的安全升級功能,對應的產品就啟動了針對這個產品的安全升級功能,云端會對這個產品的升級固件做密鑰、公鑰管理并對這個產品的固件做數字簽名;對應的設備端,在OTA的過程中,會用從云端獲取的公鑰對升級的固件做數字簽名的驗證;整個流程,用戶不需要管理公私鑰,使用起來也非常方便,下圖為HaaS100 安全升級使用流程圖:
3. 物料清單
本實驗不依賴于其他外圍設備,主要是HaaS100開發板
名稱 | 數量 |
HaaS100 開發板 | 1 |
4. 案例實現
本案例依賴如下幾個組件,具體定義放到了solutions/ota_demo/package.yaml的文件中。
依賴組件 | 作用 |
ota | ota功能的組件 |
cjson | 和云端通信使用的JSON格式的組件 |
cli | 命令行的組件 |
netmgr | 用于網絡連接的組件 |
lwip | 用于網絡協議棧的組件 |
haas100 | 用于haas100開發板的組件 |
ulog | 用于串口日志的組件 |
1.打開云端安全升級功能并獲取公鑰
2.將公鑰內嵌到代碼中
如步驟1圖示,通過復制按鈕獲取的公鑰內嵌到 AliOS-Things/components/dm/ota/hal/ota_hal_digest.c
文件中,覆蓋如下的兩個數組:
/* RSA Public Key:User needs sign in alibaba cloud to get and replace them. */
static const unsigned char ota_pubn_buf[256];
static const unsigned char ota_pube_buf[3];
3.編譯燒錄到HaaS100的基礎固件
開發環境搭建 開發環境的搭建請參考 HaaS100快速開始(搭建開發環境章節),其中詳細的介紹了AliOS Things 3.3的IDE集成開發環境的搭建流程;
用例和開發板選擇 參考HaaS100快速開始(選擇解決方案和開發板章節),其中解決方案選擇:ota_demo; 開發板:HaaS 100
配置固件版本號 根據需求修改版本號,如app-1.0.0等。 修改位置:solutions/ota_demo/otaappdemo.c中的,MY_APP_VER宏定義。
配置四元祖 修改位置:solutions/ota_demo/otaappdemo.c中的,mqtt_main函數中的char product_key, char device_name, char *device_secret;填入自己的pk,dn,ds。
編譯固件 完成上面步驟后,就可以編譯ota_demo案例來生成固件了,具體編譯方法可參考《aos-studio使用說明之編譯固件》。
燒錄固件 ota_demo案例的固件生成后,可參考《aos-studio使用說明之燒錄固件》來燒錄固件。
打開串口 固件燒錄完成后,可以通過串口查看示例的運行結果,打開串口的具體方法可參考《aos-studio使用說明之查看日志》。 當串口終端打開成功后,可在串口中輸入help來查看已添加的測試命令。
配網連云 輸入wifi賬號和密碼配網:在終端輸入:
netmgr -t wifi -c wifi_ssid wifi_password
注意修改其中的wifi_ssid和wifi_password為需要連接的wifi名字和wifi密碼。 連網成功后,登錄物聯網平臺可以看到對應的設備在線。
4.編譯上云固件及云端操作
本地燒錄完成后,需要做一個高版本固件上傳到云端,通過云端操作完成固件的升級,所以需要按照步驟3中修改版本號的方法,修改固件版本號,其他不用修改,再編譯生成一個高版本的固件,然后登錄物聯網平臺平臺,按如下圖順序操作:
點擊添加固件后,如下圖將platform/mcu/haas1000/release/write_flash_gui/ota_bin/ota_bin/ota_rtos_ota.bin
上傳到云端:
步驟①:選擇整包。
步驟②:待升級固件的名稱,自定義。
步驟③:下拉菜單選擇固件所屬產品。
步驟④:沒有子模塊選擇default。
步驟⑤:填入待升級固件版本號。
步驟⑥:建議選擇SHA256.
步驟⑦:上傳待升級固件。
點擊確定后,選擇驗證固件即可開始固件升級;
5.升級結果驗證
按照上面的操作步驟完成后,可以完成固件的數字簽名驗簽進而實現固件升級,端側的log如下圖:
如果開啟了安全升級,但HaaS100沒有內嵌公鑰,觸發升級會怎么樣呢?答案是HaaS100會數字簽名驗證失敗,禁止固件升級,端側的log會如下圖所示:
云端升級結果可以通過點擊“查看”獲取詳情; 物聯網平臺的OTA操作可參考文檔OTA升級概述
5. 總結
本文僅僅針對OTA升級在HaaS100上的全鏈路進行了簡單介紹。使用ota_demo代碼例子外加一塊HaaS100開發板,熟悉HaaS開發框架中對于OTA升級的能力支持。關于OTA升級的更多豐富功能,歡迎訪問阿里云官網介紹 http://bestwisewords.com/document_detail/184188.html。