endif /* INCLUDE_MTD_MX29LV */ 并在该文件开头声明。 #ifdef INCLUDE_MTD_MX29LV FLStatus mx29lvMTDIdentify (FLFlash vol); #endif /* INCLUDE_MTD_MX29LV */ 最后就是将我们的flash相关MTD驱动加入到makefile中。即: MACH_EXTRA = mx29lvMtd.o 为了方便我们调试MTD驱动,应该在重新编译VxWorks映象前将诸如格式化flash、创建TrueFFS块设备、绑定此块设备到dosFs所必要的功能包含到VxWorks映像中。比如如下定义: #define INCLUDE_TFFS #ifdef INCLUDE_TFFS #define INCLUDE_TFFS_DOSFS #define INCLUDE_TFFS_SHOW #define INCLUDE_DOSFS /* dosFs file system */ #define INCLUDE_SHOW_ROUTINES /* show routines for system facilities*/ #define INCLUDE_TL_FTL #define INCLUDE_IO_SYSTEM #define INCLUDE_DISK_UTIL #endif /* INCLUDE_DOSFS */
2、MTD驱动简介 做了上述配置后,进入VxWorks操作系统后,我们在shell上利用tffsShow工具来显示flash的信息。TffsShow函数最终会调用MTD驱动中的mx29lvMtdIdentiy( )函数,在mx29lvMtdIdentiy ( )函数主要是通过读取MX29LV160BT芯片的设备和厂商ID来识别它,然后对FLFlash结构成员进行初始化,最主要的几个参数是: type Flash内存的JEDEC ID号。 erasableBlockSize Flash内存的擦除块大小(字节)。设置这个值时应考虑到interleaving。因此,通常通过如下方法来设置它的大小。 Vol.erasableBlockSize = MX29LV_MTD_SECTOR_SIZE * vol.interleaving; 对于MX29LV160BT,MX29LV_MTD_SECTOR_SIZE为64K字节。 chipSize 使用来构建TrueFFS文件系统的flash实际大小(字节)。 noOfChips 使用来构建TrueFFS文件系统的flash实际片数。 interleaving Flash内存交叉因子(interleaving factor)。即扩展数据总线的设备数。比如,一个32位数据总线上,我们可以使用4片8位或2片16位的设备。 map 指向flash内存映射(map)函数。该函数将flash映射到内存区。 read 指向flash内存的读函数。在MTD驱动识别函数中,这个成员函数已经被初始化为缺省的读函数。通常情况下,我们不需要再初始化它,否则还需要修改很多相关的函数。 write 指向flash内存的写函数。这个成员必须初始化,这是我们要做的一个重要工作。 erase 指向flash内存的擦除函数。这个成员必须初始化,这也是我们要做的一个重要工作。
针对FLFlash结构成员,我们所关心的两个函数就是写和擦除函数。在mx29lvMtdIdentiy()函数中必须有如下定义: vol.write = mx29lvWrite; vol.erase = mx29lvErase; 在mx29lvWrite()函数中主要是实现将数据写到flash中。首先需要对扇区进行解锁,然后写入写命令,之后才能进行数据的写入。最后需要判断数据是否写完。为了确保操作成功,我们应该在写完每个数据后进行数据的比较,比较正确后方能进行下一个数据的操作。 在mx29lvErase ()函数中主要是实现flash扇区的擦除。如今的flash一般都是按照扇区进行擦除操作的。在擦除操作之前也应该首先对扇区进行解锁,然后写擦除建立和扇区擦除命令。擦除成功后,flash中的内容应该是0xffff。所以为了确保成功,我们还是应该在擦除后进行比较,比较正确后方能进入下一个扇区的擦除操作,否则返回擦除错误标志。 所以,对于MTD驱动的调试,基本上就是调试写和擦除两个函数。在调试过程中,我们可以在这两个函数相应位置加入打印语句来调试。为了能调试这两个函数,我们通过在shell上输入命令tffsDevFormat来格式化flash,tffsDevFormat最终会调用mx29lvErase和mx29lvWrite函数,如果成功就会返回0,否则返回-1。当然也可以调用tffsDevCreate函数来验证我们的写和擦除函数的正确性。图2说明了tffsDevCreate调用过程。 
在shell上利用tffsShow来验证mx29lvMtdIdentiy。 è tffsShow 0: socket=RFA: type=0x2249, unitSize=0x10000, mediaSize=0x1f0000 value = 49 = 0x31 = "1" 说明已正确识别到MX29LV160BT设备,设备号为0x2249。
三、 建立TFFS设备 1、挂接设备名 MTD驱动调试成功后,我们就可以给flash设备挂接上dos设备名,如下操作: 格式化: è tffsDevFormat value = 1 è usrTffsConfig 0,0,”/tffs0” value = 0 然后通过devs来查看挂接的设备名。 è devs drv name 0 /null 1 /tyCo/0 1 /tyCo/1 5 host: 6 /pty/rlogin.S 7 /pty/rlogin.M 3 /tffs0/ 8 /vio value = 25 = 0x19 看到/tffs0/说明挂接设备已经成功,接下来就可以利用dosFs文件系统相关命令来操作flash了。如,ls、copy等。
2、从Flash中启动并下载VxWorks映像 要从flash中下载VxWorks映像,首先需要把VxWorks映像拷贝到flash中,在shell中的操作命令为copy “VxWorks”,”/tffs0/VxWorks”,然后修改config.h文件中引导行,如下: #define DEFAULT_BOOT_LINE \ "tffs=0,0(0,0)host:/tffs0/VxWorks h=192.168.0.153 e=192.168.0.154 u=target pw=target o=cpm" 修改完后,重新编译生成bootrom_uncmp.bin,并把它烧写到flash中(注意:该flash与上面建立TFFS文件系统的flash不一样,它并没 上一页 [1] [2] [3] 下一页
Tags:
|