SoC嵌入式软件架构设计之七:嵌入式文件系统设计
嵌入式的系统区(system disk,SD)包含操作系统、驱动、中间件、应用和字库、UI资源等文件,本文讲述SD区的文件系统设计。文件系统最基本的目标是为了实现单个文件的定位和读写。由于一般代码都是不可自改动的。即量产之后不会有写操作。嵌入式系统的SD文件系统就是为了可以简单、高效地定位某个文件和读取文件里的数据。设计原则和要点有下面几方面:
1. 逻辑连续存储单个文件,以扇区对齐。
SD区的单个代码和资源文件一般都不大。所以不必要像fat32文件系统那样用fat表把文件簇串起来。直接逻辑连续地存储起来就可以,这样定位也会更加简单高速,当然文件应该以扇区来对齐。方便读取,文件偏移信息也能用扇区数来记录。
2. SD头
这是对整个SD区属性的描写叙述,包含校验码、版本、日期、OEM厂商等等。有时为了保证知识产权,还会加上一些防止拷贝的加密ID信息。
3. DIR节
DIR节就是文件夹信息,即每一个文件在SD区中的定位信息。是SD文件系统最重要的数据结构。文件的定位就是依赖于文件夹信息进行。打包工具会按一定的顺序将各个文件打包。并相应按顺序产生每一个文件相应的文件夹信息。每一个文件的文件夹数据结构例如以下:
1)文件名称,通常是8+3格式
2)文件属性。区分系统文件和应用文件、隐藏文件等
3)文件在SD区中的偏移量,以扇区为单位
4)文件大小,字节为单位
5)校验码
4. 文件数据
DIR节之后就是一个个真实的代码和资源和配置等文件。
5. fopen
打开文件即依据文件名称在DIR节中匹配,匹配成功就可以获得文件在SD中的偏移量,将这偏移量右移9位(即512字节。一个扇区)即是文件的位置。fopen返回的是一个句柄,该句柄相应一个数据结构,结构一般包含:文件的起始位置、长度、当前读指针位置等。
记录起始位置和长度是为了防止越界读取。
6. fread
依据句柄的当前读指针进行读取。读后要改动当前读指针。
7. fseek
依据模式来直接改动读指针。
须要清除的是:SD区是一个逻辑区,其仅仅是固件的一部分。一个固件会包含引导区、SD区、VM区、特定功能区(如VM)。之后才是数据区。这个数据区就会部署fat32或者exfat等标准文件系统。
下一节再继续解说固件分布设计。
SoC嵌入式软件架构设计之七:嵌入式文件系统设计的更多相关文章
- SoC嵌入式软件架构设计
内存是SoC(System on Chip,片上系统)集成设计的重要模块,是SoC中成本比重较大的部分.内存管理的软硬件设计是SoC软件架构设计的重要一环,架构设计师必须要在成本和效率中取得平衡,做到 ...
- SoC嵌入式软件架构设计II:没有MMU的CPU虚拟内存管理的设计和实现方法
大多数的程序代码是必要的时,它可以被加载到内存中运行.手术后,可直接丢弃或覆盖其它代码. 我们PC然在同一时间大量的应用,地址空间差点儿能够整个线性地址空间(除了部分留给操作系统或者预留它用).能够觉 ...
- SoC嵌入式软件架构设计II:否MMU的CPU虚拟内存管理的设计与实现方法
大多数的程序代码是必要的时,它可以被加载到内存中运行.手术后,可直接丢弃或覆盖其他代码.我们PC然在同一时间大量的应用,能够整个线性地址空间(除了部分留给操作系统或者预留它用),能够觉得每一个应用程序 ...
- SoC嵌入式软件架构设计之六:API设计方法
在嵌入式系统中,驱动都是以API的方式提供给应用进行调用.这里介绍嵌入式系统的API设计和管理方法. 驱动在系统中会按模块进行分类,比如按键驱动.LCD驱动.文件系统.card驱动.I2C驱动等等:每 ...
- SoC嵌入式软件架构设计之三:代码分块(Bank)设计原则
上一节讲述了在没有MMU的CPU(如80251.MIPS M控制器系列.ARM cortex m系列)上实现虚拟内存管理的集成硬件设计方法.新设计的内存管理管理单元要实现虚拟内存管理还须要操作系统.代 ...
- Hadoop HDFS分布式文件系统设计要点与架构
Hadoop HDFS分布式文件系统设计要点与架构 Hadoop简介:一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群 ...
- PowerDotNet平台化软件架构设计与实现系列(03):系统应用平台
为了复用和解耦,快速开发更多的系统和应用,我们对自己经常说的"系统"和"应用"进行更高级的提取和抽象. 十多年前入行,辗转至今,写过很多很多应用,个人喜欢分门别 ...
- 组件接口(API)设计指南-文件夹
组件接口(API)设计指南-文件夹 组件接口(API)设计指南[1]-要考虑的问题 组件接口(API)设计指南[2]-类接口(class interface) 组件接口(API)设计指南[3]-托付( ...
- loadrunner 场景设计-设置结果文件保存路径
场景设计-设置结果文件保存路径 by:授客 QQ:1033553122 Results->Results settings Results Name 结果文件夹名称 Directory 指定结果 ...
随机推荐
- python基础-类的起源
Python中一切事物都是对象. class Foo(object): def __init__(self,name): self.name = name f = Foo("alex&quo ...
- java基础66 JavaScript中的事件、localtion对象、screen对象(网页知识)
1.JavaScript中的事件注册 1.1.事件的注册方式 方式1:直接在html元素上注册 <body onLoad="ready()"></body > ...
- java 内部类与控制框架
应用程序控制框架(application framework)就是设计解决某类特殊问题的一个类,或一组类,要运用某个应用程序框架,通常是继承一个类或多个类,并覆盖这些方法.在覆盖的方法中编写代码定制应 ...
- JAVA复习笔记分布式篇:zookeeper
前言:终于到分布式篇,前面把JAVA的一些核心知识复习了一遍,也是一个JAVA程序员最基本要掌握的知识点,接下来分布式的知识点算是互联网行业的JAVA程序员必备的技能: 概念:ZooK ...
- javaweb笔记二
web服务器:实现服务器的开启,监听端口,接收客户端请求,产生响应.响应信息只能是静态的HTML,缺乏灵活性.web容器:是辅助应用的一种方式,是为了解决web服务器缺陷而产生的.可以将请求信息处理完 ...
- 超简单的java爬虫
最简单的爬虫,不需要设定代理服务器,不需要设定cookie,不需要http连接池,使用httpget方法,只是为了获取html代码... 好吧,满足这个要求的爬虫应该是最基本的爬虫了.当然这也是做复杂 ...
- Struts – MappingDispatchAction Example
Struts MappingDispatchAction class is used to group similar functionality into a single action class ...
- 【洛谷】P4643 【模板】动态dp
题解 在冬令营上听到冬眠的东西,现在都是板子了猫锟真的是好毒瘤啊(雾) (立个flag,我去thusc之前要把WC2018T1乱搞过去= =) 好的,我们可以参考猫锟的动态动态dp的课件,然后你发现你 ...
- HTTP上传大文件的节点配置
<system.web> <compilation debug="true" targetFramework="4.0" /> < ...
- Ionic实战五:ionic图表源码基于highcharts
ionic图表demo基于Highcharts,highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表.HighCha ...