Alios Things的Flash划分规则
摘要: 为了方便大家移植Alios Things,本文给出了关于Alios Things 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区 | 当原地升级时,此分区用于存放OTA的下载固件;当乒乓升级(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 升级空间为1024x1024模组为例划分各分区:
- 获取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文件。
原文链接
本文为云栖社区原创内容,未经允许不得转载。
Alios Things的Flash划分规则相关推荐
- 涨知识!你不知道的中国手机号码的编码和划分规则
引言 在当今信息化的时代,移动电话号码已经成为人们日常生活中必不可少的联系方式.中国作为世界上拥有庞大人口数量的国家之一,移动电话号码的编码和划分显得尤为重要. 中国的移动电话号码分为三大运营商,每个 ...
- javascript英语单词音节拆分_英语音节及音节划分规则2018整理
英语音节及音节划分规则 音节: 音节是读音的基本单位, 任何单词的读音, 都是分解为一个个音节来朗读的.在英语 中, 元音特别响亮, 一个元音可以构成一个音节: 一个元音和一个或几个辅音结合也可以构 ...
- Linux 磁盘划分规则,如何规范的划分,比如300G, 900G,1T, 2T都是如何划分比较好。
Linux磁盘划分规则可以参考下面的建议: 1.根目录 (/):根目录是Linux文件系统的根节点,所有其他目录和文件都是从此目录开始的.根目录使用50GB的空间足以满足绝大部分应用,但如果您需要存储 ...
- 淘宝店铺层级划分规则是什么?如何去玩转?
淘宝的店铺的等级是有很严格的划分的,很多人低于其等级划分的规则是什么不是很清楚,也不知道如何去玩转这个事情,所以我们具体来说一下这个事情,有需要的朋友来学习下吧! 操作过直通车的朋友都知道,直通车的层 ...
- 嵌入式设备的FLASH划分
一般嵌入式设备的存储分两类,FLASH和硬盘.在设计软件时,需要根据需要和硬件情况进行空间划分.这次用到FLASH存储.顺便总结下. 版本发布的时候,一般有一个 flash_readme.txt文件, ...
- 三星,海力士,镁光nand flash命名规则
三星nand命名规则 1. Memory (K) 2. NAND Flash : 9 3. Small Classification (SLC : Single Level Cell, MLC : M ...
- NAND FLASH命名规则
基于网络的一个修订版 三星的pure nandflash(就是不带其他模块只是nandflash存储芯片)的命名规则如下: 1.Memory(K) 2. NANDFlash: 9 3. Small C ...
- 【BLE】TLSR8258开发记录之3--8258内部Flash划分
根据TLSR8258的SDK应用手册,8258总共有512 Kbyte空间,划分如下图 如上图,其中0x40000~0x74000为用户数据空间(212 Kbyte),可用来存储温湿度数据.模拟U盘用
- linux+swap分区规则_linux关于swap分区的划分规则
swap分区,即交换区,swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的 ...
最新文章
- 用Xshell连接Linux系统时输入反斜杠成W
- 原生JS实现addClass,removeClass,toggleClass
- 豆瓣9.6分!这部BBC的纪录片太让人震撼!
- java之Hibenate中监听事件的重写和二级cache缓存
- Flash+XML 加载图片
- 第9章 SportsStorePeta 完成购物车
- 颜宁追问4位男科学家:如何平衡事业和家庭?
- Office WORD如何在图片上添加文字
- 高德地图POI数据爬取
- pytest测试实战 电子书_pytest测试实战 PDF 下载
- 解决Perhaps JAVA_HOME does not point to the JDK.
- tf1.x版RandLA-Net源码解读(5):测试
- mysql从指定条数开始查询_mysql数据库指定条数数据查询的主要方法
- 自主上传图片投票工具、上传图片投票小程序、上传图片投票平台
- 在线版和离线版电路仿真以及开源电子硬件设计介绍
- 硅谷丛林的故事 EDA篇
- SAP 领料BAPI BAPI_GOODSMVT_CREATE 提示 短缺未限制使用的SL
- (九)统计学习方法 | 隐马尔可夫模型
- 【畅购商城】购物车模块之添加购物车
- 初读《学会提问》小感
热门文章
- c语言 把字符串转换为变量名_如何将抓取下来的unicode字符串转换为中文
- 【LeetCode笔记】279. 完全平方数(Java、动态规划)
- oracle安装过程掉电,Oracle数据库掉电后ORA-01172磁盘坏块解决方法
- pdo 错误 php,多语句查询中的PHP PDO错误
- python中webdriver_Python自动化学习--Webdriver中的常用方法
- php 获取今天数据,ThinkPHP 按日期获取今天获取本周获取本月获取今年数据
- c++从入门到精通_资料下载:从入门到精通,手把手教你学DSP
- 地球十大人类禁区!让人不寒而栗
- 爱因斯坦是怎样学习物理的?
- 直观秒懂:这波动图全是泵,应有尽有!