資料介紹
此開源參考設(shè)計(jì)演示了如何通過支持 LwIP 的微控制器系統(tǒng)上的嵌入式 Web 服務(wù)器安全、穩(wěn)健和專業(yè)地更新固件。
使用stm32-secure-patching-bootloader作為后端固件更新引擎,該設(shè)計(jì)通過 HTML 多部分/表單數(shù)據(jù)文件上傳方法提供簽名和加密的固件更新補(bǔ)丁或完整圖像文件。大多數(shù)瀏覽器都原生支持此方法。后端多部分表單處理已集成到現(xiàn)有的 FreeRTOS 和支持 LwIP-netconn 的 Web 服務(wù)器應(yīng)用程序中。
該項(xiàng)目在 NUCLEO-F429ZI 開發(fā)板上運(yùn)行。它價(jià)格低廉,隨時(shí)可用,并且包括 USB OTG 和以太網(wǎng)端口。
什么是多部分表單文件上傳?它是如何工作的?
以下 HTML 代碼被插入到網(wǎng)頁(yè)中并提供給瀏覽器。瀏覽器自動(dòng)生成一個(gè)文件選擇器按鈕并將另一個(gè)按鈕綁定到表單提交操作(按下時(shí)生成 POST 請(qǐng)求)。不需要javascript。
id="form" action="upload" method="post" enctype="multipart/form-data"> id="file" type="file" name="binary" accept=".sfb,.sfbp"/> type="submit">upload
服務(wù)器將在 /upload URL 處看到一個(gè) HTTP POST 請(qǐng)求。請(qǐng)求中有一些常用的 HTTP 協(xié)議標(biāo)頭,包括預(yù)期長(zhǎng)度(文件八位字節(jié)數(shù)據(jù)加上 HTTP 數(shù)據(jù))和內(nèi)容類型指示符。來自表單的每個(gè)“部分”在標(biāo)題中都有自己的內(nèi)容類型指示符。我們正在尋找的是Content-Type:application/octet-stream后跟 HTTP 標(biāo)頭終止符“\r\n”。此后在 LwIP 緩沖區(qū)中接收到的所有數(shù)據(jù)都是固件更新文件字節(jié)并按原樣使用。
?
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 服務(wù)器源代碼 (httpserver-netconn.c) 中,我構(gòu)建了一個(gè)狀態(tài)機(jī)來解析此數(shù)據(jù)流并適當(dāng)?shù)厥褂?SE_PATCH_Init和SE_PATCH_Data API 。
本質(zhì)上,當(dāng)找到并驗(yàn)證 HTTP 標(biāo)頭時(shí),將調(diào)用 SE_PATCH_Init 函數(shù)。這個(gè)函數(shù)只是重置和準(zhǔn)備補(bǔ)丁引擎內(nèi)部狀態(tài)機(jī)。然后作為“八位字節(jié)流”的一部分接收到的所有字節(jié)都被送入 SE_PATCH_Data 函數(shù)。修補(bǔ)引擎管理字節(jié)計(jì)數(shù)器以及擦除和寫入閃存以及執(zhí)行修補(bǔ)(如果使用 .sfbp 文件)的所有細(xì)節(jié),因此除了在 Web 服務(wù)器中正確解析接收到的網(wǎng)絡(luò)數(shù)據(jù)包之外,更新固件真的沒有什么可做的處理循環(huán)。
修補(bǔ)引擎首先使用 ECDSA 簽名驗(yàn)證來驗(yàn)證固件更新文件頭(256 字節(jié)),然后再接受任何其他字節(jié)。當(dāng)滿意有效的固件更新文件正在發(fā)送時(shí),它將累積字節(jié)并將它們寫入下載槽(使用 .sfb 文件)或?qū)⑺鼈兣c現(xiàn)有固件映像組合以重新創(chuàng)建新的固件映像內(nèi)部閃存中的下載槽(using.sfbp 文件)。
當(dāng)所有字節(jié)都被正確接收和處理后,修補(bǔ)引擎可以立即重啟或由用戶手動(dòng)重啟。我選擇手動(dòng)重新啟動(dòng),以便可以將“成功”消息發(fā)送回客戶端瀏覽器并在重新啟動(dòng)前關(guān)閉連接。“成功”頁(yè)面包含一個(gè)重定向計(jì)時(shí)器,用于在延遲顯示更新后的固件版本后自動(dòng)重新加載固件更新頁(yè)面。
需要重新啟動(dòng),因?yàn)閷?shí)際上是stm32-secure-patching-bootloader在下載槽 (SLOT1) 中獲取更新映像候選并覆蓋 SLOT0 中的活動(dòng)固件映像。它只有在所有簽名、解密和 SHA256 哈希都經(jīng)過檢查時(shí)才會(huì)這樣做,這使得它非常健壯,非常適合任何打包的交付框架,如以太網(wǎng)、wifi、藍(lán)牙、lora、lorawan、CAN、modbus、UART 等。
在存儲(chǔ)庫(kù)中,您可以使用 bin 目錄中的預(yù)構(gòu)建文件立即測(cè)試更新,或者您可以使用 STM32CubeIDE 和包含的項(xiàng)目文件自行構(gòu)建更新文件。有關(guān)如何執(zhí)行此操作的更多說明,請(qǐng)參閱項(xiàng)目 readme.txt。
使用網(wǎng)絡(luò)更新界面
打開連接到 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 或兼容的瀏覽器,轉(zhuǎn)到 http://
單擊固件更新選項(xiàng)卡。
使用文件選擇器按鈕選擇要上傳的更新文件。然后單擊“上傳”按鈕,它將從那里開始。
選擇器只允許選擇 .sfb(全圖)或 .sfbp(補(bǔ)丁)。下面顯示了可供選擇器使用的預(yù)構(gòu)建圖像。
?
- 嵌入式web服務(wù)器系統(tǒng),嵌入式Web服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)
- 嵌入式web服務(wù)器系統(tǒng)設(shè)計(jì),基于-ARM簡(jiǎn)單嵌入式WEB服務(wù)器系統(tǒng)設(shè)計(jì).doc
- 嵌入式web服務(wù)器系統(tǒng)設(shè)計(jì),嵌入式Web服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)
- 嵌入式設(shè)備web服務(wù)器比較
- 嵌入式web服務(wù)器
- 學(xué)習(xí)Spring Boot 嵌入式服務(wù)器
- 基于ARM的嵌入式Web服務(wù)器設(shè)計(jì)方案 20次下載
- 基于ARM的嵌入式Web服務(wù)器的設(shè)計(jì)方案 27次下載
- 基于Android的嵌入式Web服務(wù)器設(shè)計(jì) 177次下載
- 嵌入式Web服務(wù)器的實(shí)現(xiàn)及其CGI應(yīng)用 79次下載
- 嵌入式Web服務(wù)器的設(shè)計(jì)與研究
- 基于SOPC的嵌入式Web服務(wù)器設(shè)計(jì)與實(shí)現(xiàn)
- 嵌入式Web服務(wù)器Boa的移植及其應(yīng)用
- 嵌入式Web 服務(wù)器的分析與研究
- 基于ARM的嵌入式uClinux系統(tǒng)設(shè)計(jì)與Web服務(wù)器應(yīng)用的
- 如何通過瀏覽器訪問Web頁(yè)面進(jìn)行固件更新的方法? 1702次閱讀
- 基于ESP32的簡(jiǎn)易web服務(wù)器設(shè)計(jì) 3990次閱讀
- 小型和受限嵌入式系統(tǒng)的固件驗(yàn)證 1481次閱讀
- 基于雙以太網(wǎng)處理器Jupiter實(shí)現(xiàn)嵌入式設(shè)備網(wǎng)絡(luò)的設(shè)計(jì) 3837次閱讀
- 基于STM32F103RB微處理器和W5100芯片實(shí)現(xiàn)嵌入式Web服務(wù)器的設(shè)計(jì) 4275次閱讀
- 通過采用WEB服務(wù)器實(shí)現(xiàn)視頻監(jiān)控系統(tǒng)的應(yīng)用方案 4791次閱讀
- 采用嵌入式WEB服務(wù)器技術(shù)實(shí)現(xiàn)鐵路分布式監(jiān)控管理系統(tǒng)的設(shè)計(jì) 829次閱讀
- 基于以太網(wǎng)和現(xiàn)場(chǎng)總線控制系統(tǒng)實(shí)現(xiàn)嵌入式HTTP服務(wù)器的設(shè)計(jì) 889次閱讀
- 基于嵌入式操作系統(tǒng)與Internet網(wǎng)絡(luò)實(shí)現(xiàn)智能終端控制系統(tǒng)的設(shè)計(jì) 1123次閱讀
- 基于Web服務(wù)器和S3C2410處理器實(shí)現(xiàn)溫室茶樹培養(yǎng)監(jiān)測(cè)系統(tǒng)的設(shè)計(jì) 914次閱讀
- 嵌入式Web服務(wù)器BOA移植與測(cè)試設(shè)計(jì)概述 1864次閱讀
- 基于嵌入式系統(tǒng)的Web服務(wù)器建立設(shè)計(jì) 3319次閱讀
- 基于MicroBlaze軟核處理器的嵌入式Web服務(wù)器設(shè)計(jì)詳解 1221次閱讀
- 基于嵌入式Linux的機(jī)房信息視頻監(jiān)測(cè)系統(tǒng) 2185次閱讀
- 一種嵌入式Web服務(wù)器的設(shè)計(jì)方案 4306次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多