資料介紹
此開源參考設計演示了如何通過支持 LwIP 的微控制器系統上的嵌入式 Web 服務器安全、穩健和專業地更新固件。
使用stm32-secure-patching-bootloader作為后端固件更新引擎,該設計通過 HTML 多部分/表單數據文件上傳方法提供簽名和加密的固件更新補丁或完整圖像文件。大多數瀏覽器都原生支持此方法。后端多部分表單處理已集成到現有的 FreeRTOS 和支持 LwIP-netconn 的 Web 服務器應用程序中。
該項目在 NUCLEO-F429ZI 開發板上運行。它價格低廉,隨時可用,并且包括 USB OTG 和以太網端口。
什么是多部分表單文件上傳?它是如何工作的?
以下 HTML 代碼被插入到網頁中并提供給瀏覽器。瀏覽器自動生成一個文件選擇器按鈕并將另一個按鈕綁定到表單提交操作(按下時生成 POST 請求)。不需要javascript。
id="form" action="upload" method="post" enctype="multipart/form-data"> id="file" type="file" name="binary" accept=".sfb,.sfbp"/> type="submit">upload
服務器將在 /upload URL 處看到一個 HTTP POST 請求。請求中有一些常用的 HTTP 協議標頭,包括預期長度(文件八位字節數據加上 HTTP 數據)和內容類型指示符。來自表單的每個“部分”在標題中都有自己的內容類型指示符。我們正在尋找的是Content-Type:application/octet-stream后跟 HTTP 標頭終止符“\r\n”。此后在 LwIP 緩沖區中接收到的所有數據都是固件更新文件字節并按原樣使用。
?
POST /upload HTTP/1.1\r\n ... Content-Length: 129773\r\n ... Content-Type: multipart/form-data; ... Content-Type: application/octet-stream\r\n \r\n
?
在 Web 服務器源代碼 (httpserver-netconn.c) 中,我構建了一個狀態機來解析此數據流并適當地使用 SE_PATCH_Init和SE_PATCH_Data API 。
本質上,當找到并驗證 HTTP 標頭時,將調用 SE_PATCH_Init 函數。這個函數只是重置和準備補丁引擎內部狀態機。然后作為“八位字節流”的一部分接收到的所有字節都被送入 SE_PATCH_Data 函數。修補引擎管理字節計數器以及擦除和寫入閃存以及執行修補(如果使用 .sfbp 文件)的所有細節,因此除了在 Web 服務器中正確解析接收到的網絡數據包之外,更新固件真的沒有什么可做的處理循環。
修補引擎首先使用 ECDSA 簽名驗證來驗證固件更新文件頭(256 字節),然后再接受任何其他字節。當滿意有效的固件更新文件正在發送時,它將累積字節并將它們寫入下載槽(使用 .sfb 文件)或將它們與現有固件映像組合以重新創建新的固件映像內部閃存中的下載槽(using.sfbp 文件)。
當所有字節都被正確接收和處理后,修補引擎可以立即重啟或由用戶手動重啟。我選擇手動重新啟動,以便可以將“成功”消息發送回客戶端瀏覽器并在重新啟動前關閉連接。“成功”頁面包含一個重定向計時器,用于在延遲顯示更新后的固件版本后自動重新加載固件更新頁面。
需要重新啟動,因為實際上是stm32-secure-patching-bootloader在下載槽 (SLOT1) 中獲取更新映像候選并覆蓋 SLOT0 中的活動固件映像。它只有在所有簽名、解密和 SHA256 哈希都經過檢查時才會這樣做,這使得它非常健壯,非常適合任何打包的交付框架,如以太網、wifi、藍牙、lora、lorawan、CAN、modbus、UART 等。
在存儲庫中,您可以使用 bin 目錄中的預構建文件立即測試更新,或者您可以使用 STM32CubeIDE 和包含的項目文件自行構建更新文件。有關如何執行此操作的更多說明,請參閱項目 readme.txt。
使用網絡更新界面
打開連接到 Nucleo 的 STLINK 的終端,這樣您就可以看到分配給它的 IP 地址:
?
[ 0.000] Bootloader starting up. STM32 Secure Patching Bootloader. github.com/firmwaremodules/stm32-secure-patching-bootloader Build: v1.3.0 Registered to: unregistered Target: NUCLEO-F429ZI UID: 175053388a356f20 Clock:HSE,8,168 Crypto:SW UART:3,115200,N81 SLOT0:08020000 SLOT1:08060000 SIZE:40000 APP RAMSTART:20002700 VTOR:08020200 [ 0.029] Target check: CPUID:410FC241 IDCODE:20036419 FLASHSZ:0800 .. OK. [ 0.288] Verify bootloader. [ 0.315] SHA256: 3e8790d4724c52e5f5f2352bc6b132f1c8320134e0c89de983b98904c80e73a5 Valid [ 0.323] UART loader check trigger. [ 1.328] Check USB flash media. [ 2.330] No valid firmware found on flash media, status=1 [ 2.336] Verify slot 1 header. [ 2.339] Slot 1 is empty. [ 2.341] Verify slot 0. [ 2.343] Verify slot 0 header. [ 2.484] Verify slot 0 signature. [ 2.535] Verify slot 0 ready. [ 2.538] Verify slot 0 fw ver. [ 2.679] Slot 0 has valid active firmware version 1.0.0 [ 2.684] Preparing to launch application in slot 0. LwIP_HTTP_Server_Netconn_RTOS - NUCLEO-F429ZI Built FW_UPDATE_VERSION=1 Firmware Version: 1.0.0 Bootloader Version: v1.3.0 State: Looking for DHCP server ... IP address assigned by a DHCP server: 192.168.1.75
?
使用 Chrome 或兼容的瀏覽器,轉到 http://
單擊固件更新選項卡。
使用文件選擇器按鈕選擇要上傳的更新文件。然后單擊“上傳”按鈕,它將從那里開始。
選擇器只允許選擇 .sfb(全圖)或 .sfbp(補丁)。下面顯示了可供選擇器使用的預構建圖像。
?
- 嵌入式web服務器系統,嵌入式Web服務器的設計與實現
- 嵌入式web服務器系統設計,基于-ARM簡單嵌入式WEB服務器系統設計.doc
- 嵌入式web服務器系統設計,嵌入式Web服務器的設計與實現
- 嵌入式設備web服務器比較
- 嵌入式web服務器
- 學習Spring Boot 嵌入式服務器
- 基于ARM的嵌入式Web服務器設計方案 20次下載
- 基于ARM的嵌入式Web服務器的設計方案 27次下載
- 基于Android的嵌入式Web服務器設計 177次下載
- 嵌入式Web服務器的實現及其CGI應用 79次下載
- 嵌入式Web服務器的設計與研究
- 基于SOPC的嵌入式Web服務器設計與實現
- 嵌入式Web服務器Boa的移植及其應用
- 嵌入式Web 服務器的分析與研究
- 基于ARM的嵌入式uClinux系統設計與Web服務器應用的
- 如何通過瀏覽器訪問Web頁面進行固件更新的方法? 1043次閱讀
- 基于ESP32的簡易web服務器設計 3305次閱讀
- 小型和受限嵌入式系統的固件驗證 1304次閱讀
- 基于雙以太網處理器Jupiter實現嵌入式設備網絡的設計 3673次閱讀
- 基于STM32F103RB微處理器和W5100芯片實現嵌入式Web服務器的設計 4013次閱讀
- 通過采用WEB服務器實現視頻監控系統的應用方案 4484次閱讀
- 采用嵌入式WEB服務器技術實現鐵路分布式監控管理系統的設計 775次閱讀
- 基于以太網和現場總線控制系統實現嵌入式HTTP服務器的設計 813次閱讀
- 基于嵌入式操作系統與Internet網絡實現智能終端控制系統的設計 1045次閱讀
- 基于Web服務器和S3C2410處理器實現溫室茶樹培養監測系統的設計 798次閱讀
- 嵌入式Web服務器BOA移植與測試設計概述 1693次閱讀
- 基于嵌入式系統的Web服務器建立設計 3223次閱讀
- 基于MicroBlaze軟核處理器的嵌入式Web服務器設計詳解 1126次閱讀
- 基于嵌入式Linux的機房信息視頻監測系統 2097次閱讀
- 一種嵌入式Web服務器的設計方案 4151次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多