分享

SoC嵌入式软件架构设计之七:嵌入式文件系统设计

 myallmy 2019-09-23

           嵌入式的系统区(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等标准文件系统。下一节再继续讲解固件分布设计。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多