微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于VDK的嵌入式文件系统实现

基于VDK的嵌入式文件系统实现

时间:02-24 来源:互联网 点击:

摘要 针对实验室开发的基于Nand Flash的高速、大容量存储系统,阐述了利用BF537及其集成开发环境Visual DSP++的内核VDK,实现嵌入式文件系统的具体方案。同时简要介绍了通过虚拟地址映射和坏块标记的方法,来管理Nand Flash芯片中的坏块,以此实现文件系统的地址传输。
关键词 VDK;BF537;嵌入式文件系统;Nand Flash

Blackfin(BF)系列DSP是ADI公司和Intel公司共同开发的DSP,采用了一种新型结构MSA。BF系列中的BF537具有较块的运算速度和丰富的接口资源,长于控制和视频图像处理,且其带有符合IEEE 802.3规范的以太网控制器,如果在BF537中移植带有LwIP协议栈的VDK工程,并利用网络芯片对537进行扩展,就能便捷地实现嵌入式系统与因特网的通信。
由于低功耗、数据非易失、存储速度快、存储密度大等优点,Nand Flash在闪存行列中脱颖而出,常被用作大容量数据的存储媒质。随着存储系统容量和存取速度的不断提升,构建嵌入式文件系统来实现存储系统中数据的管理。

1 VDK与嵌入式文件系统
1.1 VDK简介
VDK(Visual DSP Kernel)是ADI公司针对Blackfin系列DSP处理器特别开发的“小而健壮”的轻量级内核,特别适合编写需要精确控制的代码,是一个提供了丰富的API函数库,同时支持轻量级IP协议栈(LwIP)的RTOS。
VDK功能全面,具有线程、信号量、事件与事件位、消息、关键域与禁止调度域等特征。内核通过协同多任务和时间片轮转的方式来管理和协调线程,这种方式称为“调度”。VDK运用程序可分为两部分:线程域和中断域。线程域中的调度称为“软件调度”,由内核完成;中断域中的调度称为“硬件调度”,由中断控制器完成。后者的优先级高于前者,而设备驱动是两者沟通的桥梁。
然而VDK只是一个“裸核”,不提供文件系统的支持,如果需要基于VDK实现文件系统,用户必须自己编写各种接口函数的代码。
1.2 基于Nand Flash的嵌入式文件系统简介
Flash文件系统主要有开源的和商业的两类。开源的Flash文件系统,有JFFS、JFFS2、YAFS等。JFFS采用高效的日志文件系统,具有掉电安全、脏块回收、磨损均衡等特性,主要用于嵌入式Linux。Red Hat公司后来在JFFS基础上进行升级,发展出JSSF2。JSSF2采用哈希表的日志节点结构,加快了节点的操作速度。YAFFS也是基于日志结构的文件系统,相比JFFS,YAFFS减少了一些功能,但降低了内存占用率,提高了访问速度。
商业Flash文件系统主要有TrueFFS和TransactionFFS。前者用于仿真硬盘驱动,利用冗余数据结构保证可靠的数据操作,并能均匀使用Flash。后者使用事务记录方案,运用程序可通过FAL访问文件系统。

2 嵌入式系统的硬件平台
基于BF537的嵌入式系统硬件平台的框图如图1所示。

LAN8187用于对BF537的以太网控制器进行扩展,使其能够通过以太网络与上位机进行通信。
BF537外挂了两片Nor Flash芯片作为其异步外存。程序Nor Flash用于存储运行程序代码,数据Flash主要用于存储文件系统运行所需的数据,例如文件目录表、地址映射表等。XC4VFX100用于处理数据流的速度、解析和转发BF537的命令,配合BF537对存储阵列进行管理。

3 嵌入式文件系统设计
3.1 文件目录表
考虑到存储系统的存储速度较快,且文件数目较少的特点,文件目录表采用线性表的方式。格式如表1所示,其中的“更新次数”用于记录存放文件目录表数据Nor Flash的编程次数。

文件系统采用Nor Flash中的一个64 kB的数据块实时记录文件目录表。出于磨损均衡的考虑,如果数据块的编程次数超过规定的阈值,文件系统将自动跳到Nor Flash的下一个64 kB的数据块记录文件目录表。
文件索引采用类似日志记录的方式,每个文件索引作为文件目录表的一个节点。文件系统进行文件操作时,可以根据具体操作要求,实时搜索、增删和标记索引节点,文件索引格式如表2所示。

文件存储时,主线程遍历文件目录表的节点信息,计算出当前存储的起始块地址,然后向存储阵列发出开始存储的命令,随后将控制权交给中断域。一旦接收到存储阵列的地址请求信号,运用程序进入中断,在中断域中向文件存储子线程发出信号,以发送当前地址信息,如此反复。如果主线程接收到用户停止存储的命令,将立即关闭中断,取得控制权,接着将最新的文件信息更新到文件目录表的最后位置,作为最新的节点。
文件下载时,主线程遍历文件目录表,找到相应的文件索引信息,然后发送消息给文件下载子线程,开始对指定文件进行下载。如果需要删除某个文件,在遍历目录表找到指定文件的信息后,先发送地址将存储阵列相应数据块的信息擦除,然后将该文件索引信息的“文件标记”置为“删除”标记。
3.2 地址映射表
地址映射是文件系统的核心。文件系统将整个存储阵列作为一个独立的地址空间,统一编址。通过定义一个地址缓冲区,将其相应的偏移地址作为Nand Flash的物理地址,并根据坏块信息对缓冲区相应偏移地址的单元做坏块或有效块的标记。文件系统在实际操作中,可“查询”地址缓冲区,如果地址缓冲区某偏移地址为坏块标记,则抛弃,继续查询下一个偏移地址的标记,如为有效块标记,则将此偏移地址作为存储阵列的有效物理块地址。
为提高存储效率和方便管理,地址缓冲区的内容会被记录在数据Nor Flash中,作为一个“地址映射表”。地址映射表体积不大,烧写到Nor Flash时,可将烧写代码推入到VDK的“关键域”中,因为烧写时间小于两次中断间隔,这样既不会照成中断延时,又能保证烧写工作一次完成。
硬件平台上电后,系统启动线程首先读取Nor Flash中的地址映射表到地址缓冲区,随后基于地址缓冲区进行文件管理;如需更新坏块信息,首先更新地址缓冲区,然后将地址缓冲区内容记录到Nor Flash中。故而名为“映射”,实质是一种“标记”的方法。地址映射机制如图2所示。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top