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 指定结果 ...
随机推荐
- 使用免安装压缩包安装MySQL
OS:Windows 10家庭中文版 MySQL:mysql-5.7.20-winx64.zip 作者:Ben.Z 参考链接: Installing MySQL on Microsoft Window ...
- 组合比较符(PHP7+)
php7+支持组合比较符,即<=>,英文叫做combined comparison operator,组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较. 语法:$a& ...
- High-Speed Tracking with Kernelized Correlation Filters(二)
首先看看get_features函数. 首先判断是hog特征还是gray,分两种情况. 如果是hog特征,调用fhog函数,返回x,并将矩阵 ...
- SQL数据是否存在(是否有数据)判断,表,存储过程是否存在
判断是否存在数据 if exists( select * from Hong_PageConfig where names='name' ) Begin print '1' End else Begi ...
- 触发器中的inserted表和deleted表
触发器语句中使用了两种特殊的表:deleted 表和 inserted 表.Microsoft? SQL Server 2000 自动创建和管理这些表.可以使用这两个临时的驻留内存的表测试某些数据修改 ...
- 面试题:输入两个整数 n 和 m,从数列1,2,3…….n 中 随意取几个数, 使其和等于 m
问题: 2010年中兴面试题 编程求解: 输入两个整数 n 和 m,从数列1,2,3…….n 中 随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来. 思路: 类似这种组合问题一般都是使 ...
- JAVA类课后练习
1.Pg168--2 package com.hanqi; import java.util.Scanner; public class Rectangle { Rectangle() { //完成初 ...
- 微信小程序-视频教程-百度云-下载
链接: https://pan.baidu.com/s/16WGL3whutozx-UXqsDPhhA 提取码: 关注公众号[GitHubCN]回复获取 什么是微信小程序?小程序是一种不需要下载安 ...
- js处理局部scroll事件禁止外部scroll滚动解决办法,jquery.mousewheel.js处理时禁止办法说明
js Code: <script> window.onload = function() { for (i = 0; i < 500; i++) { var x = document ...
- STL容器读书笔记
vector vector维护的是一个连续线性空间 vector是动态空间,随着元素的加入会自动扩容,扩充至当前size的两倍,然后将原内容拷贝,开始在原内容之后构造新元素,并释放空间 vector提 ...