zoukankan      html  css  js  c++  java
  • 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等标准文件系统。

  • 相关阅读:
    k8s-istio记录
    k8s
    单词 -(动物)
    RxJs
    .netcore 3.1 unbuntu
    单词规整
    AutoMapper
    时间
    ye
    特殊权限
  • 原文地址:https://www.cnblogs.com/yueqian-scut/p/4022471.html
Copyright © 2011-2022 走看看