当前位置:首页 > 嵌入式 > 嵌入式软件
[导读] 在U-Boot中实现对Yaffs镜像的支持

0 引 言
    U-Boot是目前广泛使用的嵌入式操作系统通用引导程序,具有功能丰富强大,支持多种操作系统和 CPU体系,易于功能扩展和移植,源码开放等多种优点。U-Boot能够同时支持启动加载模式和下载模式。在下载模式下,可以通过U-Boot自带的 nand read/write等命令,配合.Jffs 2等参数,实现cramfs,Jffs 2等文件系统镜像的读写,方便开发过程的调试。Yaffs文件系统是专门针对NAND FLASH设计的可读写型文件系统,在NAND FLASH上性能稳定优异。U-Boot自身没有实现对Yaffs文件系统镜像读写的直接支持。由于Yaffs文件系统的特殊结构,需要对nand命令做一定的修改,从而实现其在NANDFLASH上对Yaffs镜像的读写。

1 相关工作简介
1.1 Yaffs文件系统结构简述
    目前,嵌入式系统中常用的FLASH文件系统有Cramfs,Jffs 2,Yaffs,exfat等。Cramfs是一种压缩型只读型文件系统,其在系统启动时解压至内存中运行。Jffs 2,Yaffs,Exfat等是可读写型文件系统,Jffs 2一般应用于NOR型FLASH;Exfat不是开源的文件系统实现,一般应用于Windows CE操作系统中。Yaffs是一种专门针对NAND FLASH设计的可读写型文件系统,它能针对嵌入式存储器的功能要求提供损耗平衡、掉电保护等。Yaffs文件系统的源代码开放,在多种嵌入式操作系统中移植十分方便。
    通常一个NAND FLASH存储设备由若干块组成;1个块由若干页组成。一般128 MB以下容量的NAND FLASH芯片,一页大小为528 B,依次分为2个256 B的主数据区和16 B的额外空间;128 MB以上容量的NAND FLASH芯片,一页大小通常为2 KB。由于NAND FLASH出现位反转的概率较大,一般在读写时需要使用ECC进行错误检验和恢复。
    Yaffs文件系统的设计充分考虑到NAND FLASH以页为存取单位等的特点,将文件组织成固定大小的段(Chunk)。以528 B的页为例,Yaffs文件系统使用前512 B存储数据、16 B的额外空间,用以存放数据的ECC和文件系统的组织信息等(称为OOB数据)。通过OOB数据,不但能实现错误检测和坏块处理;同时可以避免加载时对整个存储介质的扫描,加快了文件系统的加载速度。一个页面的具体结构如表1所示。

    由此可知,与其他文件系统相比,在生成Yaffs镜像时就包含了OOB数据,所以在烧写Yaffs镜像时,不需要计算ECC,仅依次写入512 B的数据和16 B的OOB数据即可。同时,Yaffs镜像要使用分区上的第一个块来存储一个名为Yaffs_ObjectHeader的结构体。该结构体记录了该分区中的文件、路径以及相关的链接,所以在烧写时还需要跳过第一个可用的块。Yaffs文件系统目前常用的版本为Yaffs 2,性能在许多方面都有了很大的提高。
1.2 U-Boot对常见文件系统的支持
    在实际开发过程中,一般使用引导程序,比如U-Boot,完成文件向FLASH中的烧写和启动引导等工作。U-Boot能够支持Cramfs,Jffs 2文件系统的烧写。这些文件系统是针对NOR型FLASH设计的,所有文件数据就是简单的线性表组织形式。对于目前大量使用的NAND型FLASH,由于带有用于数据校验等功能的OOB区,所以Yaffs文件系统的数据组织形式不再是线性表的形式。
    U-Boot没有提供对Yaffs文件系统的读写支持。但由于该文件系统的读写过程与其他文件系统的读写类似,因此可以通过修改U-Boot的FLASH读写命令,增加处理00B区域数据的功能,即可以实现对Yaffs文件系统的读写支持。[!--empirenews.page--]

2 具体实现
    在此,采用U-Boot 1.1.6版,NAND FLASH使用三星公司的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结构体。该结构体的原型是在include\command.h 中定义的,包含相应命令的名称、参数个数、实现函数、用法说明、帮助等信息。最后还要修改common/Makefile文件,将该文件添加为编译的目标。
    (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)))循环体之后添加如下代码:

   [!--empirenews.page--]
    通过以上步骤,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根文件系统镜像的创建和调试。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

作者 Mohamad Ali| IBM咨询首席运营官 北京2024年5月24日 /美通社/ -- 生成式AI的兴起几乎在所有面向上给业务带来改变。根据 IBM 商业价值研究院最新的年度 CEO 研究,近60%...

关键字: IBM AI BSP 模型

台北2024年5月21日 /美通社/ -- 提供针对AMD WRX90和TRX50主板优化的DDR5 OC R-DIMM 提供容量128GB(16GBx8)到768GB(96GBx8),速度5600MHz到8...

关键字: AMD 内存 BSP GB

上海2024年5月20日 /美通社/ -- 2024年5月16日,世界知名的生命科学公司 Eppendorf 集团于第二十三届生物制品年会上成功举办了"疫路超越 推流出新"的产品发布会,正式推出大规模...

关键字: RF PEN BSP IMAC

北京2024年5月20日 /美通社/ -- 过去五年里,支付和收款方式日新月异,其发展和变化比过去五十年都要迅猛。从嵌入式数字商务的出现,到"一拍即付"的...

关键字: VI BSP PAY COM

华钦科技集团(纳斯达克代码: CLPS ,以下简称"华钦科技"或"集团")近日宣布致敬 IBM 大型机 60 载辉煌历程,并将继续实施集团大型机人才培养计划。

关键字: IBM BSP 研发中心 PS

助力科研与检测新突破 上海2024年5月15日 /美通社/ -- 全球知名的科学仪器和服务提供商珀金埃尔默公司今日在上海举办了主题为"创新不止,探索无界"的新品发布会,集中展示了其在分析仪器领域的最...

关键字: 质谱仪 BSP DSC 气相色谱

上海2024年5月16日 /美通社/ -- 2024年5月10日至5月13日,富士胶片(中国)投资有限公司携旗下影像产品创新力作亮相北京P&E 2024。在数码相机展览区域,全新制定的集团使命"为世界绽...

关键字: 富士 数码相机 影像 BSP

贝克曼库尔特目前已成为MeMed Key免疫分析平台和MeMed BV检测技术的授权经销商 在原有合作的基础上,继续开发适用于贝克曼库尔特免疫分析仪的MeMed BV检测 加州布瑞亚和以色列海法2024年5月16日...

关键字: BSP IO 检测技术 免疫分析仪

英国英泰力能的燃料电池是可产业化的产品解决方案 英国首个专为乘用车市场开发的燃料电池系统 在 157kW 功率下,此燃料电池比乘用车的其他发动机更为强大 &...

关键字: ENERGY INTELLIGENT 氢燃料电池 BSP

深爱人才,共赴"芯"程 深圳2024年5月15日 /美通社/ -- 5月11日,深圳国资国企"博士人才荟"半导体与集成电路产业专场活动在深圳市重投天科半导体有限公司(简...

关键字: 半导体 集成电路产业 BSP 人工智能
关闭
关闭