微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 解析在U-Boot中实现对Yaffs镜像的支持设计

解析在U-Boot中实现对Yaffs镜像的支持设计

时间:01-05 来源:互联网 点击:

公司的K9F1208UOM.该NAND FLASH每页为512 B,外加16 B额外空间,整个芯片容量为64 MB.在此之前,已经正确配置了相关的宏定义,并移植了相关NAND FLASH的驱动程序,使U-Boot能够正确操作该芯片。

2.1 为U-Boot添加新的命令

实际上,U-Boot中已经实现了所需的nand命令,只要编写好正确的NAND FLASH驱动程序,并定义相应的宏,就可实现对NAND FLASH的基本读写操作。欲添加对Yaffs镜像的支持,只要实现一个新的参数即可。为了给下述工作一个清晰的步骤,在此先简述如何向U-Boot中添加一个新命令。以下所述的路径均在U-Boot源码目录下。

(1)在include/CMD_cONfdefs.h文件中定义相应命令的宏,不能与已有的宏值重复。

(2)在common/CMd_name.c中实现命令操作的具体代码,文件名中的nAME即为相应命令的名称。在这个文件中,首先要编写命令的实现函数;此外还要使用一个U_BOOT_CMD()的宏函数来填写该命令的cmd_tbl_t结构体。该结构体的原型是在includecommand.h 中定义的,包含相应命令的名称、参数个数、实现函数、用法说明、帮助等信息。

(3)在相应的开发板头文件(位于include/con-figs/下)中的CONFIG_COMMANDS宏中添加(1)所定义的宏即可使用该命令。

在实现以上步骤时,参照已有命令的相应代码作适当修改即可。

2.2 为nand命令添加新参数

根据以上分析,下面给nand命令添加write.yaffs参数,从而实现对Yaffs镜像的支持。按照第2.1节中的步骤,由于nand命令已经实现,仅需要修改com-mon/cmd_nand.c文件即可。

(1)在common/cmd_nand.c文件的U_BOOT_CMD()宏函数中仿照其他参数,添加该参数的使用说明

定义读写操作的结构体原型中一部分参数没有使用,这些参数与选择ECC的方式有关,由于Yaffs文件系统已包含了OOB数据,故不使用这些参数。另外, opts.skipfirSTblk是向nand_write_options_t结构体中新添加的变量,因此需要修改该结构体。在 include/nand.h中,向struct nand_write_options结构体添加如下变量定义:

int skipfirstblk;

此外,需要再修改nand_write_opts函数,以增加对此变量的支持。

2.3 修改nand_write_opts函数

在drivers/nand/nand_util.c中,根据其代码,在while(blockstart!=(mtdoffset(~erasesize_blockalign+1)))循环体之后添加如下代码:

通过以上步骤,U-Boot已经可以支持Yaffs文件系统镜像的读写。一般地,在进行NAND FLASH写操作时,可以先通过串口或网络等接口将数据下载到内存中,进而按照命令格式将其烧写到NAND FLASH中。例如:

在U-Boot中使用以上三条命令,将名为test.yaffs的Yaffs文件系统镜像下载到内存中,然后擦除一块FLASH空间,最后用Nand Write.yaffs命令将其写入NAND FLASH.烧写完毕后会提示:

Writing data at 0xd67200-100%complete.

3663264 bytes written:OK

另外,由于没有使用ECC,烧写过程中会有大量如下提示:

Writing data without ECC to NAND_FLASH is not recom-mended

事实上,ECC数据在生成Yaffs镜像时已经包含在镜像里,因此这里的提示并没有关系。在drivers/nand/nand_basec.c文件中,将nand_write_page函数中case NAND_ECC_NONE:语句分支中的printk函数注释掉即可消除此提示。

3 Yaffs文件系统的性能

在实际使用中,一般CPU的运行速度远大于FLASH的读写速度,所以yaffs文件系统的读写速度主要由具体FLASH芯片的读写时间延迟来决定。

对于常使用的Yaffs 2,写操作的速度为1.5~4.5 MB/S,读操作的速度为7.6~16.7 MB/S,删除操作为7.8~62.5 MB/s,垃圾回收为2.1~7.7 MB/s.由于一般嵌入式系统数据交换量不大,所以该文件系统完全能够满足一般实时性操作的要求。

此外,作为日志型文件系统,Yaffs文件系统能够有效地保护数据完整性,避免系统掉电等情况对数据产生的破坏。同时,与其他FLASH文件系统相比,Yaffs文件系统的实现给NAND型FLASH带来了很多优化,在速度、内存占用以及能耗等方面都有更好的表现。

4 结 语

这里在分析Yaffs文件系统基本结构的基础上,通过为U-Boot已有命令添加新的参数,实现了U- Boot读写Yaffs文件系统镜像的支持。最后通过一个简单试验进行了验证。结果表明,烧写入FLASH中的文件系统镜像可以被嵌入式Linux等操作系统的内核挂载使用。方便了嵌入式系统的Yaffs根文件系统镜像的创建和调试。YAFFS是专门为NAND闪存设计的,它的出现使得价格低廉的NAND闪存芯片具有了高效性和健壮性。YAFFS文件系统性能优越且易于移植,已经成功应用于Linux、mClinux和Windows CE等嵌入式操作系统上。现在,每页大小为2Kb的新型

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

网站地图

Top