一.MUX中间层

为了能够兼容更多的网络设备和网络协议,VxWorks操作系统专门在网络设备驱动程序和网络协议层之间增加了MUX接口层。网络设备驱动程序不关心用户通过何种网络协议访问设备,只需要将数据传递给MUX层,或者从MUX层获取需要发送的数据;同样,协议层中的协议也不需要关心用户使用何种网络设备,将数据发送给MUX层或者从MUX层读取数据即可。

MUX层位于数据链路层和网络协议层之间,它提供协议和设备的衔接,管理着网络协议接口和底层设备驱动之间的通信。

vxworks end mux

MUX层的加入有效隔离了网络设备驱动程序和协议层协议, MUX层的统一标准接口屏蔽了底层网络设备的差异性和上层网络组件的特殊性,降低了网络设备的增加和网络组件的扩展的复杂度。

二.END & NPT

MUX层支持两种网络设备驱动程序:END(Enhanced Network Driver)和NPT(Network Protocol Toolkit)。

这两种网络设备驱动程序的大体结构相似,与MUX接口也几乎相同,MUX装载两者的方式也相同。不同的是,END模型基于帧(frame)传递数据,NPT模型基于包(packet)传递数据。在这里,帧和包的区别在于,帧包含了网络传输的全部数据,也就是数据包和MAC地址等链路层数据;而包仅仅包括数据包,不包括链路层信息。

NPT驱动程序模型可以看作是对END模型的一个扩展。END模型是VxWorks推荐的实现方式。

1、Wear-Leveling

闪速存储器不能无限次重复使用。它的每个扇区的擦除次数虽然很大,但却有限;因此,随着使用次数的加长,它最终会变成只读状态,所以应该尽最大可能延长它的寿命。行之有效的方法就是平衡使用所有的存储单元,而不让某一单元过度使用。这种技术被称之为损耗均衡。TrueFFS使用一种基于一张动态维护表的存储器——块映射的翻译系统来实现损耗均衡技术。当块数据被修改、移动或碎片回收后,这张维护表会自动调整。然而,如果存储在Flash上的一些数据本质上是静态的,就会产生静态文件锁定问题。存储这些静态数据的区域根据不会被轮循使用,其它区域就会被更频繁地使用,这将降低Flash期望的生命值。TrueFFS通过强制转移静态区域的方法成功克服了静态文件锁定问题。因为映射表是动态的,TrueFFS能够以对文件系统不可见的方式转移这些静态数据区域。由于绝对强制损耗均衡方式会对性能产生一些负面影响,所以TrueFFS采取了一种非绝对损耗均衡算法。它保证了所有空间的使用近似平等而不影响性能。

2、 碎片回收

块数据的修改使得Flash的一些块区域中的数据不再有效,并且这些区域在擦除之前变得不可写。如果没有机制来回收这些区域,Flash很快就会变成只读的状态了。不幸的是由于这些块不可能单独擦除,回收这些块就有些复杂了。单次擦除被限制在一个叫作擦除单元的较大范围内,如对于AMD的Am29LV065D芯片来说是64KB。TrueFFS使用一种被称为碎片回收的机制来回收那些不再包含有效数据的块。该机制从一个预擦除单元内复制所有的有效数据块到另一个新的被称为转移单元的擦除单元。然后,TrueFFS更新映射表,再擦除这个废旧的预擦除单元。这样,原来的块出现在外界时仍然包含了原来的数据,虽然这些数据现在已经存放在Flash存储器的其它空间。

碎片回收算法会找到并回收与下面标准最吻合的擦除单元:

  • 废块最多
  • 擦除次数最少
  • 最静态的区域

3、 块分配和关联数据集结

为了提高数据的读取效率,TrueFFS使用一种灵活的空间分配策略:将关联的数据(如由同一个文件的内容组成的多个块)集结到同一个单独擦除单元内的一段连续的区域中。为此,TrueFFS尽量在同一个擦除单元内维持一个由多个物理上连续的自由块组成的存储池。如果这样连续的存储池无法实现,TrueFFS分尽量保证池中的所有块是在同一个擦除单元内。如果连这样的情况也不可能的话,TrueFFS会尽量把块池分

配到一个拥有最多可用空间的擦除单元内。这种集结关联数据的途径有几个好处。首先,如果TrueFFS必须从一个小的存储窗口来访问Flash,那么这样集结了的关联数据可以减少调用映射物理块到该窗口的次数,加快了文件继续访问速度。其次,这种策略可以减少碎片的产生。这是因为删除一个文件可以释放掉更容易回收的完整块,意味着碎片回收会变得更快。另外,它可以使属于静态文件的多个块存放在同一地址,这样当损耗均稀算法决定移动静态区域时,转移这些块就变得更加容易了。

4、 Power Failure Management

向Flash写数据有时可能会出错,比如在响应文件系统写请求时、碎片回收期间甚至在TrueFFS格式化或擦除Flash时。在这些情况下,TrueFFS能够从错误中恢复过来;但在新数据第一次写入Flash时如果出错就会丢失这些数据。然而,TrueFFS非常仔细地保证所有已经存放在Flash上的数据是可恢复的,甚至能够避免用户由于不耐烦或好奇而猛地拔出Flash卡而可能造成的灾难性后果。

TrueFFS algorithms based on “erase after write” instead of"erase before write"健壮的关键是它使用了一种“先写后擦”的策略。当更新Flash一个扇区的数

据时,只有在更新操作完成并且新存储的数据校验成功后,先前的数据才会被允许擦掉。这样的结果是数据扇区不能处于部分写状态。操作成功的话新扇区的数据有效,否则老扇区的数据有效。很明显,这样有利于用户已经写到Flash上的数据的稳定性”

老的BSPs(VxWorks 6.9.3.x 还有之前版本)与 VxWorks 7 不兼容,原因存在以下基本差异。

  • VxWorks 7 使用新的VxBus基础架构,其中基于设备探测而不是设备信息的硬编码进行配置。
  • VxWorks 7 BSP使用了完全不同的目录结构。
  • VxWorks 7 BSP提供了处理器系列特定组件和板特定组件的分离。

然而,传统的BSP仍然可以使用在VxWorks 7中。只要它只使用VxBus旧设备的驱动程序,并且只要修改为采用新的目录结构即可。

下表突出显示VxWorks 6.9.3.x和VxWroks 7之间的源树结构的相关转换:

Category VxWorks 6.9.3.x VxWorks 7
BSP target/config pkgs/os/board/bsp_legacy-6.9.0.0/
Driver Source target/src/hwif pkgs/os/drv/vxbus_legacy-version_string/src
Driver Header target/h/hwif/ target/src/hwif/h/ pkgs/os/drv/vxbus_legacy-version_string/h/
Driver Supports target/config/comps/vxWroks pkgs/os/drv/vxbus_legacy-version_sting/cdf/

上面的version_sting提供了当前的vxbus_legacy包的版本。对于vxWorks第一版,它是1.0.0.0,对于较新的更新,它可能更高,例如1.0.0.3 。

有关存储驱动程序(SD,ATA,SATA等),请参阅 Migrating File Systems and Storage Devices 获取更多信息。

一般工作流程

  如果当前的VxWorks 6.9.3.x 环境尚未更新到最新版本(本文为6.9.3.3),请先更新它。虽然这不是必须的,但是只有在VxWorks 6.9.3.3迁移到VxWorks7时才会测试此迁移文档。您的BSP应该在更新的环境中构建和运行。

  以下是所需步骤的概述。所有步骤都可以在VxWorks Development Shell或者 Workbench 4中完成。一旦Workbench4运行,赚到Project选项卡并启动VxWorks Development Shell。默认情况下,Workbench 4启动WrTool终端。

在VxWorks 6.9.x中,确保BSP构建并运行。

将旧BSP复制到VxWorks 7(installDir/vxworks-7/pkgs/os/os/board/bsp_legacy-6.9.0.0)中用于传统的BSP的目录。

修改复制的BSP目录中的Makefile和20bsp.cdf文件。

修改复制的源文件中的包含路径。

如有必要,请将旧驱动程序文件(源,标题和支持文件)复制到vxbus_legacydirectory,如上表所示。还有确保每次VxWorks7更新时,如果vxbus_legacy版本已经增加,请将驱动程序复制到最新版本的vxbus_legacy目录。

  使用WrTool执行以下步骤,您可以从Workbench4或命令行启动WrTool。

CF卡是一种基于Flash技术的容量大、携带方便的存储介质,已在嵌入式系统等领域得到广泛的应用;但是,有限的擦写次数极大地限制了CF卡的使用寿命。TrueFFS通过一系列算法,能够延长CF卡的使用寿命,提高CF卡的使用效率。文章介绍了TrueFFS的原理,在CF卡上实现TrueFFS的方法,并对TrueFFS的性能进行了分析。

关键词:TrueFFS损耗均衡 闪速存储器 CF卡

闪速存储器最大的一个缺点就是寿命有限。可擦除的次数因芯片厂商而有所不同,一般都在1万~10万次左右。为了延长闪速存储器的寿命,提高使用效率,Msystems公司推出了TrueFFS系统。它为种类繁多的闪速存储器提供了统一的块设备接口,并且具有可重入、线程安全的特点;支持大多数流行的CPU架构,如PowerPC、MIPS、ARM、X86、68K等。

由于个性鲜明的闪速存储器越来越受到嵌入式系统工程师的青睐,业界流行的嵌入式实时操作系统VxWorks已将TrueFFS作为自身的一个可裁减的模块。目前该模块的版本为2.0,支持Intel、AMD、Toshiba、Fujitsu等厂家生产的大多数型号的闪速存储器和Flash卡,用户只需要更改少量代码,甚至可直接调用;但是,该模块对如今风靡的CF卡缺乏支持。

CF卡采用了Flash技术。形象地说,CF卡就是由若干片闪速存储器外加一个管理器组成;但是,CF卡具有携带方便、易于升级、存储量大、抗震性好、兼容性佳等优点。目前,CF卡标准已经达到1.4版本,容量从最早的2MB到现今的1GB。然而,有限的擦写闪数是闪速存储器遗传给CF卡的先天缺陷。本文介绍如何在CF上实现TrueFFS系统,硬件平台以PowerPC处理器(MPC8250,Motorola公司)为CPU,嵌入式操作系统是VxWorks。

1. TrueFFS的结构

TrueFFS本身并不是一个文件系统,需要在TrueFFS之上加载DOS文件系统才能使用,否则毫无意义。TrueFFS屏蔽了下层存储介质的差异,为开发者提供了统一的接口方式。应用程序对存储设备的读写就对像对拥有DOS文件系统的磁碟设备的操作一样。

TureFFS

如图1所示,TrueFFS由1个核心层和3个功能层组成:编译层、MTD层(MemoryTechnoilogy Driver)、Socket层。

VxWorks下的IEEE 1394 驱动源码:

IEEE 1394 VxWorks

获取驱动源码,请关注微信公众号:北南南北

北南南北