我现在在一款和AMD FLASH兼容的FLASH上建立文件系统,底层挪用tornado for PowerPC 的BSP模板 wrPPMC824x的MTD层trueffs驱动程序。现在的问题出在MTD层的写入、读出、擦除等函数执行结果均正确,验证方法是通过直接调用验证的,但结果好像就是注册不上FLASH,环境给出的错误信息有限,所以无从下手,已经棘手1周了,没有进展,请多多指教。问题描述在附件里,你可以自己研究一下,给分析分析。
在FLASH上实现TrueFFS文件系统,采用的FLASH的配置是8M×64bit,采用64位数据线和PowerPC的接口,CPU配置用于文件系统的FLASH的地址位0x7C00_0000~0x7FFF_FFFF,FLASH内部采用4块16位的FLASH组合成64位。
由于FLASH的扇区分配不是均匀的,FLASH的每个块(block(8M×16bit))前面的32K字为分为8个4k字的扇区,最后的32K字分成8个4k字的扇区,中间为254个32k字的扇区,为实现文件系统的扇区一致性,将开始的8个4k字的扇区和最后的8个4k字的扇区不用,只用中间的32k字长的扇区用于文件系统。
文件系统采用的BSP模板是wrPPMC824x,实现方法如下:
chipBlockSize = 0x20000;
baseAdrs = (char *)0x7c020000;
regionSize = 0x3F80000;
rid = f2xRegionCreate (baseAdrs, 8, regionSize, 2, chipBlockSize, 8,
F29_16BIT_TYPE, nvRamRid, (VOIDFUNCPTR)NULL, NONE);
MTD识别函数定义如下:
FLStatus f2xFlashMtdIdentify
(
FLFlash vol
)
{
F2X_GID id = (F2X_GID)vol.socket->serialNo;
int i;
vol.type = 0x227E;
vol.erasableBlockSize = 0x80000/* f2xGroupBlockSize(id) */;
vol.chipSize = 0x800000/* f2xGroupSize(id) */;
vol.noOfChips = 4;
vol.interleaving = 4;
vol.map = f2xFlashMtdMap;
vol.read = f2xFlashMtdRead;
vol.write = f2xFlashMtdWrite;
vol.erase = f2xFlashMtdErase;
printf("f2xFlashMtdIdentify called!\n");
return(flOK);
}
现在问题是按照TFFS文件系统加入的方法,在config.h中加入相应的宏,在sysLib.c中加入MMU对这段存储区的配置,然后在VxWorks中通过直接调用的方式验证MTD层的读、写、擦除函数,均能正确执行。而加入到VxWorks中后,在shell下执行usrTffsConfig、tffsDevFormat、tffsShow函数均出现错误,怀疑MTD识别函数f2xFlashMtdIdentify没有被调用,因为加入的调试信息,是不是什么地方配置不正确。请多多指教。