AliosThings的Flash劃分規則
Alios Things簡介
AliOS Things釋出於2017年杭州雲棲大會, 是 AliOS 家族旗下的、面向IoT領域的、高可伸縮的物聯網作業系統,於2017年10月20號宣佈在github上開源;具體介紹請點選連結:https://github.com/alibaba/AliOS-Things/blob/master/README-zh.md
本文主要介紹Alios的flash劃分規則,方便大家開發移植,如有疑問,歡迎留言。
1. 需求簡介
AliOS Things 由於功能需要,維護了一張flash分割槽表,這張表包括bootloader區、Application區、OTA TMP區以及parameters區,如下圖:
上圖的分割槽的簡介:
分割槽名稱 | 分割槽描述 |
---|---|
Bootloader區 | 儲存bootloader韌體,引導啟動整個系統,有些支援OTA程式碼copy等 |
Application區 | 當原地升級時,此分割槽為APP程式執行區;當乒乓升級(A,B分割槽)時,此分割槽為APP程式執行A區,與APP程式執行B區(OTA Tmp)交替儲存下載的韌體並執行對應的程式。 |
OTA Tmp區 | 當原地升級時,此分割槽用於存放O他的下載韌體;當乒乓升級(A,B分割槽)時,此分割槽為APP程式執行B區,與APP程式執行A區(Application)交替儲存下載的韌體並執行對應的程式。 |
Parameters1區 | OTA引數儲存區 |
Parameters2區 | KV儲存區 |
Parameters3區 | 使用者自定義(Mk3060,b_l475e兩個板子的KV儲存區) |
Parameters4區 | 安全相關的引數儲存區 |
2. 分割槽大小劃分規則
- 獲取晶片平臺的Flash大小
- 獲取bootloader資訊,包括:bootloader支援的升級型別(原地還是乒乓)、bootloader跳轉地址(如果是乒乓會有兩個跳轉地址);
- 跟據bootloader獲取的資訊,劃分整個Flash;
Bootloader支援原地升級
原地升級flash大小劃分方法表:
分割槽名 | 起始地址 | 分割槽大小 |
---|---|---|
Bootloader區 | 晶片Flash 起始地址 | bootloader跳轉地址與Flash起始地址差值 |
Application區 | Bootloader 跳轉地址 | 需要使用者根據實際情況自己評估Application的大小 |
OTA Tmp 區 | Application 分割槽結束地址 | 與Application儘量保持一致,如果支援差分可適當小些,使用者需根據實際情況自己評估 |
Parameters1區 | OTA Tmp 分割槽結束地址 | 一般是4Kbytes |
Parameters2區 | Parameters1分割槽結束地址 | 一般是8Kbytes |
Parameters3區 | Parameters2分割槽結束地址 | 一般是4Kbytes |
Parameters4區 | Parameters3分割槽結束地址 | 一般是4Kbytes |
Bootloader 支援乒乓升級
乒乓升級flash大小劃分方法表:
分割槽名 | 起始地址 | 分割槽大小 |
---|---|---|
Bootloader區 | 晶片Flash 起始地址 | bootloader跳轉地址與Flash起始地址差值 |
Application區 | Bootloader 跳轉地址1 | Bootloader跳轉地址2與bootloader跳轉地址1之間的差值(如果bootloader給出flash擦除範圍,以bootloader給出大小為準) |
OTA Tmp 區 | Bootloader 跳轉地址2 | 與Application區大小一致 |
Parameters1區 | OTA Tmp 分割槽結束地址 | 一般是4Kbytes |
Parameters2區 | Parameters1分割槽結束地址 | 一般是8Kbytes |
Parameters3區 | Parameters2分割槽結束地址 | 一般是4Kbytes |
Parameters4區 | Parameters3分割槽結束地址 | 一般是4Kbytes |
注意:
- 從安全形度考慮,建議使用者使用乒乓升級方式,並支援版本回滾;如果使用者考慮成本因素採用原地升級方式,因誤操作,升級了不正確的韌體,導致裝置變磚,使用者需要自己承擔責任。
- 除了以上定義的flash分割槽之外,有些晶片或者模組還有一些配置檔案需要燒寫到Flash固定地址,所以確保以上分割槽不能與這些配置檔案的地址空間相覆蓋或者重疊;
- 以上分割槽一旦定義好之後不能輕易更改,否則會造成資料丟失;如果客戶需要新增自定義分割槽,需在分割槽表索引定義的尾部順次新增不能中間插入
3. 示例
根據以上的劃分原則,以esp8266 Flash大小為2Mbytes 升級空間為1024×1024模組為例劃分各分割槽:
- 獲取Flash 大小:Flash size = 2M bytes;地址空間為:0x000000 ~ 0x200000
-
Bootloader資訊:
- 支援乒乓升級;
- Bootloader 跳轉地址1 = 0x1000 ;
- Bootloader 跳轉地址2 = 0x101000;
Application區理論大小為:0x101000 – 0x1000 = 0x100000;
- 根據模組廠商文件,需要燒的配置檔案:
由文件可知地址:0x1FC000 ~ 0x200000 為配置檔案儲存區,所以parameters1~parameters4 只能從0x1FC000向低地址劃分,即:
Parameters1 起始地址:0x1f6000 大小:0x1000
Parameters2 起始地址:0x1f7000 大小:0x2000
Parameters3 起始地址:0x1f9000 大小:0x1000
Parameters4 起始地址:0x1FA000 大小:0x1000 - Application區和OTA Tmp區劃分:
根據步驟3可知OTA Tmp區的範圍只能是parameters1 – bootloader跳轉地址2, 即:0x1f6000 – 0x101000 = 0xF5000; 由於是乒乓升級,application區的大小應該和OTA Tmp區大小相等;
由以上4個步驟可完成整個分割槽表的劃分,具體可檢視:aos/board/esp8266/board.c檔案。
相關文章
- 三個規則劃分企業商機管理系統
- 動態規劃之數的劃分動態規劃
- 微服務劃分原則微服務
- HaaS100 Flash分割槽劃分說明
- 01 分數規劃
- 01分數規劃
- 執行計劃-3:解釋規則
- 分數規劃P3199
- 01分數規劃的兩道例題
- 漲知識!你不知道的中國手機號碼的編碼和劃分規則
- 分數規劃學習筆記筆記
- React元件設計之邊界劃分原則React元件
- GBase8a資料分佈規劃
- clash 實現訂閱節點與規則的分離
- 動態規劃分類題目總結動態規劃
- 規則
- RAM、ROM、FLASH、EMMC的簡單區分
- zone的劃分
- 中文分詞研究難點-詞語劃分和語言規範中文分詞
- 正則匹配規則2
- 分庫分表之歷史表如何選擇最佳分片路由規則路由
- WAF的幾種劃分方法和劃分型別型別
- Mysql-基本的規則與規範MySql
- 從武則天的故事看職場生涯規劃的一個最重要方面
- app開發的規劃與籌劃APP
- url規則
- makefile規則
- ESlint規則EsLint
- MySQL分庫分表的原則MySql
- html的巢狀規則HTML巢狀
- 臺灣“中央銀行”計劃為比特幣制定反洗錢規則比特幣
- canvas非零繞組規則與奇偶規則Canvas
- 資料標準規劃有哪些規劃
- 【Fuzzy】不確定規劃:模糊規劃模型模型
- 正則匹配規則記錄
- 正規表示式的一些規則
- 人生規劃的本質
- 關於人生的規劃