AliosThings的Flash劃分規則

磊喆發表於2018-07-27

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. 分割槽大小劃分規則

  1. 獲取晶片平臺的Flash大小
  2. 獲取bootloader資訊,包括:bootloader支援的升級型別(原地還是乒乓)、bootloader跳轉地址(如果是乒乓會有兩個跳轉地址);
  3. 跟據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

注意:

  1. 從安全形度考慮,建議使用者使用乒乓升級方式,並支援版本回滾;如果使用者考慮成本因素採用原地升級方式,因誤操作,升級了不正確的韌體,導致裝置變磚,使用者需要自己承擔責任。
  2. 除了以上定義的flash分割槽之外,有些晶片或者模組還有一些配置檔案需要燒寫到Flash固定地址,所以確保以上分割槽不能與這些配置檔案的地址空間相覆蓋或者重疊;
  3. 以上分割槽一旦定義好之後不能輕易更改,否則會造成資料丟失;如果客戶需要新增自定義分割槽,需在分割槽表索引定義的尾部順次新增不能中間插入

3. 示例

根據以上的劃分原則,以esp8266 Flash大小為2Mbytes 升級空間為1024×1024模組為例劃分各分割槽:

  1. 獲取Flash 大小:Flash size = 2M bytes;地址空間為:0x000000 ~ 0x200000
  2. Bootloader資訊:

    1. 支援乒乓升級;
    2. Bootloader 跳轉地址1 = 0x1000 ;
    3. Bootloader 跳轉地址2 = 0x101000;
      Application區理論大小為:0x101000 – 0x1000 = 0x100000;
  3. 根據模組廠商文件,需要燒的配置檔案:
    由文件可知地址:0x1FC000 ~ 0x200000 為配置檔案儲存區,所以parameters1~parameters4 只能從0x1FC000向低地址劃分,即:
    Parameters1 起始地址:0x1f6000 大小:0x1000
    Parameters2 起始地址:0x1f7000 大小:0x2000
    Parameters3 起始地址:0x1f9000 大小:0x1000
    Parameters4 起始地址:0x1FA000 大小:0x1000
  4. Application區和OTA Tmp區劃分:
    根據步驟3可知OTA Tmp區的範圍只能是parameters1 – bootloader跳轉地址2, 即:0x1f6000 – 0x101000 = 0xF5000; 由於是乒乓升級,application區的大小應該和OTA Tmp區大小相等;
    由以上4個步驟可完成整個分割槽表的劃分,具體可檢視:aos/board/esp8266/board.c檔案。


相關文章