这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » [原创]Tornado之TrueFFS编程者指南(四)

共1条 1/1 1 跳转至

[原创]Tornado之TrueFFS编程者指南(四)

菜鸟
2002-12-05 02:52:28     打赏
二. 起步 1.介绍 本章将告诉你在Tornado下怎样去配置TrueFFS并包含它。为了在一个vxworks映象中包含TrueFFS,你必须编辑config.h文件并定义INCLUDE_TFFS。这使得vxworks的初始化代码调用tffsDrv()来创建管理TrueFFS所需的结构和全局变量,并为所有挂接了的flash设备注册socket组件驱动。在链接的时候,通过解析与tffsDrv()相关联的符号(symbols)可以将TrueFFS所必需的软件模块链接到vxworks映象中。 为了支持TrueFFS,每一个bsp必须包含一个sysTffs.c文件。它将TrueFFS所有的层(翻译层,socket层和MTD层)链接到一起并和vxworks绑定。因此,你必须编辑这个文件并决定哪一种MTD和翻译层模块应该包含到TrueFFS中。另外,如果你的目标系统包含了一个MMU单元,你还得编辑sysLib.c中的sysPhysMemDesc[ ]数组。 在重新编译vxworks映象并重启目标系统后,你应该可以使用诸如格式化flash、创建TrueFFS块设备、绑定此块设备到dosFs所必要的功能。 2.配置和使用TrueFFS总述 配置vxworks使其包含TrueFFS需要编辑如下: Makefile ――在bsp的.o列表中加入sysTffs.o       config.h ――包含TrueFFS sysLib.c ――调整ROM区的描述 sysTffs.c ――确定包含在TrueFFS中的功能特点   对于一个支持TrueFFS的BSP来说,以上所有文件必须放在target/config下你的BSP配置目录里。但是,sysTffs.c不会自动捆绑到这个目录。相反,几个sysTffs.c不同的版本被捆绑到src/drv/tffs/sockets下,如ads860-sysTffs.c, mv177-sysTffs.c, hkbaha47-sysTffs.c等等。阅读一下src/drv/tffs/sockets/README这个文件,你就可以确定哪一个bspname-sysTffs.c适合你的BSP。这个README也描述了要支持TrueFFS所有BSP需要修改的特定地方。   当你启动该映象后,它会自动运行tffsDrv( )。这个函数自动为每一个flash设备注册一个socket组件。这时flash设备还没有挂上块设备驱动。但socket组件驱动已经为调用tffsDevFormat( )函数提供了充足的条件。为了使用TrueFFS,必须用这个函数来格式化flash媒体。为了在socket组件的顶部创建一个TrueFFS块设备并mount dos文件系统到这个块设备上,你还得调用usrTffsConfig()函数。下面就具体讲讲这几个文件的修改。 修改Makefile:   为了加入sysTffs.o的编译,你应该在其中加入如下的宏定义: MACH_EXTRA = sysTffs.o 修改config.h:   对于大多数的BSP来说,包含TrueFFS也就是要在config.h中加入如下的两个宏定义: #ifndef INCLUDE_TFFS  #define INCLUDE_TFFS #endif #ifndef INCLUDE_DOSFS  #define INCLUDE_DOSFS #endif   当然如果你想使用tffsShow()和tffsShowAll()来查看socket信息,你还要加上#define INCLUDE_SHOW_ROUTINES这样一条宏定义。 修改sysLib.c:   如果你的目标系统包含了MMU模块,那么它的BSP在sysLib.c文件里面就定义了一个sysPhysMemDesc[ ]表。典型地,这个表告诉MMU包含启动映象(boot image)的存储区域是WRITABLE_NOT(不可写)的,或者说是ROM型的。ROM曾经是唯一能可靠存储启动映象的技术,所以vxworks一直默认包含一个启动映象的存储区域为ROM型的。然而随着flash技术的到来,这种可能性已经得到了扩展。因为它即可写也可以可靠地存储启动映象。所以你必须编辑sysPhysMemDesc[ ],重新设置启动映象所在的存储区域为WRITABLE(可写)型的。 修改sysTffs.c:   这个文件的主要功能就是定义一些BSP特殊的socket代码,作为连接flash硬件和vxworks的桥梁。缺省地,一个WRS支持的sysTffs.c包含了所有的翻译层模块,所有的MTD层模块,以及tffsBootImagePut( ), tffsShow( ), tffsShowAll( )这样的工具函数。为了减小映象的大小,你可以通过编辑sysTffs.c来去掉一些你知道对你的应用不必要的模块。   首先,我们应该选择翻译层模块。根据不同的flash技术有三种翻译层供你选择,如下表所示: ---------------------- 宏定义符号       | 相应的flash技术 ---------------------- INCLUDE_TL_NFTL |  NAND-based flash INCLUDE_TL_FTL |  NOR-based flash INCLUDE_TL_SSFDC |  SSFDC flash ---------------------- 我们一般的flash芯片如sst39vf040,sst39vf160,am29lv160等都是NOR-based flash型,所以可以只“#define INCLUDE_TL_FTL”。   接下来,我们选择MTD层模块。Vxworks自带了支持一些flash型号的MTD层驱动模块。如下表所示: ____________________________________ 宏定义符号            相应的flash设备 INCLUDE_MTD_I28F016 Intel 28f016 INCLUDE_MTD_I28F008 Intel 28f008 INCLUDE_MTD_I28F008_BAJA Intel 28f008 on the Heurikon Baja 4000 INCLUDE_MTD_AMD       AMD, Fujitsu: 29F0{40,80,16} 8-bit devices INCLUDE_MTD_CDSN       Toshiba, Samsung: NAND CDSN devices INCLUDE_MTD_DOC2       Toshiba, Samsung: NAND DiskOnChip2000 INCLUDE_MTD_CFISCS       CFI/SCS device INCLUDE_MTD_WAMD AMD, Fujitsu 29F0{40,80,16} 16-bit devices ______________________________________   同翻译层一样你也可以去掉一些不必要的模块宏定义。比如,如果你使用的是8bit数据宽度的AMD29F040,那么你完全可以undefine掉除了INCLUDE_MTD_AMD以外的其它宏定义。如果你所用的flash型号很不幸不在这里面,那么你只有自己写MTD层驱动模块了。这时你可以在src/drv/tffs下找一个比较类似的驱动来修改然后把它放到你的BSP目录下,并修改Makefile加入其.o文件到MACH_EXTRA的.o文件列表中。当然你也可以把它放到src/drv/tffs下,同样地修改该目录下的Makefile文件。   另外,缺省情况下sysTffs.c定义了INCLUDE_TFFS_BOOT_IMAGE。这将在sysTffs.o中自动包含了tffsBootImagePut( )函数。通过使用tffsBootImagePut( )函数,你可以绕过TrueFFS(和它的翻译层)而直接向flash存储空间写数据。用tffsDevFormat( )函数可以将TrueFFS管理区域的起始地址定位到一个偏移地址上,从而在TrueFFS之外留下一个自由区域,可以用来放置启动映象(boot image)。tffsBootImagePut( )可以将启动映象写入这个自由区域。   再下来是选择socket层特征。尽管在sysTffs.c文件中设置一些宏定义可以加入翻译层模块和MTD层模块以及其它的一些相关工具模块,但文件的大部分内容还是专注于socket组件驱动程序的定义。这些驱动程序是一个标准的API,作为连接设备硬件和vxworks的桥梁。它们在很大程度上由你使用的flash硬件来决定相应的功能定义。Tornado的TrueFFS支持三种通常种类的flash硬件: PC flash卡(可移动的flash媒介) DiskOnChip 2000 设备 板上固定的flash片组   后面两者都是不可移动的媒介,它们的socket接口相对来说要简单一些。所以对于大多数标准API函数来说,可以简单地“作一点或根本不作”。然而PC flash卡则是可移动的设备,所以接口处理就要复杂得多。大多数BSP提供的接口程序都很精干,但过于简单。它们都假定socket包含了一张flash卡,但不支持热拔插。目前,这种简单的PCIC驱动有big-endian 和little-endian两种版本。big-endian版本是由ads860的BSP带有的,little-endian版本则是由PC386和PC486的BSP提供的。相对于PCIC驱动有两种宏定义:INCLUDE_SOCKET_PCIC0和 INCLUDE_SOCKET_PCIC1。前者是为slot 0创建一个socket接口,后者是为slot 1创建一个socket接口。   对于PC386和PC486来说,你可选择一个比简单的PCIC更加完善的socket接口。对此,后面我们有时间的话还会细讲。 (未完待续) [align=right][color=#000066][此贴子已经被作者于2002-12-4 18:56:20编辑过][/color][/align]



关键词: 原创     Tornado     TrueFFS     编程     指南         

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]