热线电话:

厦门莫格电气自动化有限公司

主营:PLC可编程控制器模块,DCS卡件,ES...

商铺首页 > 新闻动态 > HARDMEIER DC 4QC
厦门莫格电气自动化有限公司
8
企业等级: 普通会员
经营模式:
所在地区: 福建 厦门
联系卖家:    QQ在线咨询1982497648
手机号码:
公司官网:
公司地址:

HARDMEIER DC 4QC

发布时间:2019-08-27 03:16:52        

HARDMEIER DC 4QC

  O引言
    随着嵌入式技术的不断发展,嵌入式系统的应用越来越广泛,人们对于嵌入式系统功能的要求也越来越高,相应地其大容量数据存储和管理变得越来越重要。相对硬盘而言,FLASH等非易失性存储器具有体积小、功耗低、成本低、抗震强等优点,已在嵌入式系统中被大量作为存储设备使用,而大容量非易失数据存储方案的应用还存在成本和软件支持方面的问题需要克服。大页NANDFLASH具有写入速度快、容量大、成本低等优点,适合于需要进行数据存储的场合。YAFFS2作为专门支持大页NANDFLASH的文件系统在U-Boot和嵌入式Linux上一直没有得到正式支持。本文结合部队应用实际,在嵌入式Linux系统中实现了大页NANDFLASH和YAFFS2文件系统的结合,为装备的数据存储处理搭建起了小型的智能化平台。本文内容安排如下,首先介绍系统存储方案特点和YAFFS2数据在大页NANDFLASH上的储存方式,然后详细叙述系统移植和文件系统制作过程,最后对移植结果进行测试。
    l系统存储方案设计
    某国产化设备用于取代随装多台套设备,除完成原设备的数据记录功能外,还需进行数据翻译、判读,数据分析处理,二维显示和三维动态复现等功能;同时,需存储装备长时间工作输出的所有原始数据信息,类似黑匣子功能,以供事后分析使用。具有程序量大,数据需实时存储,且数据存储量大的特点。板上存储设备包括SDRAM和FLASH,SDRAM为易失性存储器,作为程序的运行空间和记录数据的缓存空间;FLASH为非易失性存储器,用于存储系统软件程序和记录数据。
    嵌入式系统中应用的FLASH主要有NORFLASH和NANDFLASH两种。NORFLASH的块大小范围为64~128KB,其容量一般为l~32MB,可作为嵌入式设备的启动设备,适合于代码存储。NANDFLASH的块大小范围为8~64KB,容量一般为8~512MB,适合于数据存储。它们之间的主要差别有以下几点。
    (1)速度。在写数据和擦除数据时,NANDFLASH支持整块擦写操作,其速度比NORFLASH要快得多,两者相差近千倍;读取时,NANDFLASH要先向芯片发送地址信息进行寻址才能开始读写数据,而NORFLASH的操作则是以字或字节为单位进行的,直接读取,所以读取数据时,NORFLASH效率更高。
    (2)容量和成本。NORFLASH的每个存储单元与位线相连,增加了芯片内位线的数量,不利于存储密度的提高。在面积和工艺相同的情况下,NANDFLASH的容量比NORFLASH要大得多,生产成本更低。
    (3)易用性。NANDFLASH的I/O端口采用复用的数据线和地址线,必须先通过寄存器串行地进行数据存取,各个产品或厂商对信号的定义不同,增加了应用的难度;NORFLASH有专用的地址引脚来寻址,较容易与其他芯片进行连接,另外还支持片上执行XIP(eXecuteInPlace),应用程序可以直接在FLASH内部运行,简化了产品设计。
    (4)可靠性。由于FLASH的电器特性,在读/写数据过程中,会产生比特位反转,造成一位或几位数据错误。NANDFLASH位反转的几率比NORFLASH高,在使用时需要使用EDC/ECC算法。NANDFLASH还可能会随机分布坏块。
    (5)耐久性。FLASH由于写入和擦除数据时会导致介质的氧化降解,导致芯片老化,所以并不适合频繁地擦写,NANDFLASH的擦写次数是100万次,而NORFLASH只有10万次。
    基于以上分析,为了满足经常性的进行实时快速大容量数据存储和较长使用寿命的要求,采用NANDFLASH来存储操作系统和数据,其复杂操作、比特位反转和坏块等问题可以通过文件系统解决。NORFLASH因为出现位反转和坏块的几率小,并且读取速度快,用来存储启动程序,能保证正常启动系统的前提下提高设备反应时间。整个系统的存储空间分配如图1所示。
 
    整个系统存储空间由SDRAM,NORFLASH,NANDFLASH组成。其中,sDRAM分成程序空间(ProgSpace)和数据空间(DataSpace)。NORFLASH存储系统启动程序U-Boot;NANDFLAsH分成程序空间(ProgSpace)和数据空间(DataSpace),程序空间中固化存储Linux操作系统和YAFFS2文件系统及相应的应用程序,在U-Boot的控制下,通过页传输方式读入SDRAM程序空间中;数据空间中存储来自前端的原始数据,该数据在SDR-AM中打包,以页方式将数据写入NANDFLASH中,提高数据写入速度。
    对小页NANDFLASH的文件系统支持已有比较多的编程实例可借鉴,而对本文使用的大页NANDFLASH的编程支持还没有完整的说明。因此,移植嵌入式操作系统,以建立对大页NANDFLASH支持的文件系统是该存储方案需解决的关键问题。
    2YAFFS/YAFFS2文件系统分析
    目前广泛应用的嵌入式文件系统有JFFS/JFFS2(JournaIlingFLASHFileSystern)和YAFFS/YAFFS2(YetAnotherFLASHFileSyst-em)。JFFS/JFFS2文件系统主要针对NORFLASH设计,在NANDFLASH上性能不佳。YAFFS/YAFFS2文件系统是专门针对NANDFLASH设计,其具有可写入、修改并能永久保存文件的特性,并提供了损耗平衡和掉电保护。与JFFS相比,它减少了一些功能,因此速度更快、占用内存更少。此外YAFFS自带NANDFLASH芯片驱动,并为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD和VFS,直接对文件进行操作。
    YAFFS文件系统已发展为两个版本,YAFFS和YAFFS2。YAFFS版本只支持512B的小页NANDFLASH。而YAFFS2作为YAFFS的升级版,在向下兼容小页NANDFLASH的同时也能够更好地支持2KB的大页NANDFLASH。YAFFS2的性能与YAFFS相比有很大提高,表1为YAFFS,YAFFS2(512B×8),YAFFS2(2KB×8)三者性能比较,从测试结果可以看出,YAFFS2和2KB大页NANDFLASH的结合更好地提高了存储器操作效率。
 
    YAFFS2文件系统在设计时就充分考虑了大页NANDFLASH的结构,根据大页NANDFLASH以页面为单位存取的特点,将文件组织成固定大小的页,利用大页NANDFLASH提供的每个页面(2112B,其中前2048B存储数据)64B的备用空间(SpareData,OOB)来存放ECC和文件系统的组织信息,这样不仅能够实现错误检测和坏块处理,还能够提高文件系统的加载速度。以三星公司的K9F1G08UOA的NANDFLASH为例,它的单片存储容量为128MB,由1024block组成,每个块包含64page,每个页均包含一个2048B的数据区和64B的备用空间,总共包含2112B。结构如图2所示。

 
    blockState:描述该块的状态。如果不是OxFF,就说明是坏块。相对应的是,所有正常的块,里面所有数据都是OxFF的。
    chunkld:描述该页在一个文件内的索引,所以文件大小被限制在232×2KB。chunkld为O,说明此页面保存的是文件头。不为O,说明是数据页面。文件内偏移量为0,即放在第一个页面的文件,其chunkId为1,后面的以此类推。
    ObjectID:描述对象ID号,用来惟一标示一个文件。所以YAFFS2文件系统支持的文件总数限制在232个。
    nBytes:记录该页面内的有效字节数。
    blockSequence:记录着各块被分配出去的先后顺序,每分配出去一块,就加1。在YAFFS2文件系统建立的时候,块的扫描顺序就是由它决定的,而不是FLASH的物理介质顺序。在垃圾收集的时候也会以此作为参考之一,判断该块是否适合回收。
    tagsEcc:Ecc,YAFFSTags区域的ECC校验数据。
    ECC:数据区的ECC校验数据。读/写数据区的数据时,每256B生成3BECC校验和,一页面2KB数据就会生成24B的校验数据。
    3系统移植
    此次开发采用宿主机+目标系统的开发模式。宿主机为PC+Fedora9,Fedora9安装在PC的虚拟机内。目标系统软硬件组成为目标板(CPU为S3C2440A)+U-Boot+嵌入式Linux,Linux版本为2.6.29.4。交叉编译工具为arm-linux-gcc-4.3.2。
    选用嵌入式Linux系统是因为它有着技术上先进,健壮、安全;是多任务系统,支持ARM体系结构;源码开放,驱动程序及其他资源非常丰富,良好的可移植性等优点。嵌入式系统的移植从软件角度可以分为以下四个步骤。如图3所示。
 
    (1)引导加载程序的移植,包括固化在固件(Fireware)中的boot代码和Bootloader两大部分。大多数嵌入式系统中并没有固件,Bootlo-ader是上电后执行的第一个程序。它主要用来初始化处理器及外设,然后调用Linux内核。
    (2)嵌入式Linux内核移植。特定于嵌入式处理系统的定制内核以及内核的启动参数。内核的启动参数可以是内核默认的,或是由Bootlo-ader传递给它的。
    (3)文件系统制作。包括根文件系统和建立于FLASH内存设备之上的文件系统。里面包含了Linux系统配置文件和运行应用软件所需要的库等。
    (4)用户应用程序编写。特定于用户的应用程序,它所实现的功能通常就是设计该嵌入式系统所要达到的目标,它们也存储在文件系统内。
    3.1Bootloader移植
    对于支持ARM架构的Bootloader有U-Boot,Vivi等。U-Boot(UniversalBootLoader)即通用Bootloader,是遵循GPL条款的开放源代码项目。它可以引导Linux,VxWorks,LynxOS等多种操作系统。支持PowerPC,x86,ARM等多种架构的CPU,具有丰富的设备驱动源码,如串口、以太网、SDRAM,FLASH等。系统采用U-Boot的版本为1.1.6,它已支持SMDK2410开发板,在其基础上进行修改。U-Boot1.1.6中对NANDFLASH的支持有新旧两套代码,新代码在drivers/nand目录下,旧代码在driver/nand_legacy目录下。本次移植选用新代码,它移植自Lin-ux2.6.12,更加智能。移植过程分以下几步。
    (1)根据具体输入时钟,修改时钟定义参数。SMDK2410开发板的默认时钟为12MHz。
    (2)依照实际开发板的内存地址分配情况修改lowlevelinit.S文件。
    (3)针对S3C2410,S3C2440NANDFLASH控制器的不同,修改接口参数。
    (4)仿照内核支持NANDFLASH的文件来编写片选函数。命令和控制函数,查询状态函数。
    (5)根据具体NANDFLASH芯片设置时序参数。
    (6)增加从NANDFLASH烧写,读取YAFFS2文件系统映像功能。
    (7)修改Makefile文件,将新建文件编入U-Boot中。
    在编写烧写YAFFS2文件系统映像的命令时,要注意YAFFS2文件系统映像里除了2KB的数据外,后面还包括了64B的OOB数据,所以映像文件大小是以2112B为单位。OOB中已经包含了ECC,在烧写时不需要再计算ECC校验码。烧写时,首先检查是否为坏块,是就跳过,然后写入2KB的数据,最后写入64B的OOB数据。还要增加对skipfirstblk参数的支持。使烧写YAFFS2文件系统映像时,跳过分区上第一个块,这是由YAFFS2文件系统特性决定的。
    由于不使用ECC校验码,烧写过程中会不断提示以下信息:
    WritingdatawithoutECCtoNAND-FLASHisnotreeom-mended
    可以修改driver/mtd/nand/nandbase.C文件的nand_write_page函数,将输出这条信息的命令去掉。
    最后执行makeXX_config和makeall命令,生成的U-Boot.bin文件即可以运行与目标板上了。将它烧入NORFLASH后启动,在串口工具中能够看到提示信息。输入nandinfo命令即可查看到NANDFLASH的信息,说明U-Boot识别出了NANDFLASH。
    3.2嵌入式Linux内核移植
    目前Linux内核还没有正式支持YAFFS文件系统,所以需要通过补丁修改Linux内核,另外YAFFS文件系统也需要MTD设备驱动的支持。首先下载最新版本的2.6内核,这里以linux-2.6.29.4为例。尽管Linux2.6并不是一个真正的实时操作系统,但其改进的特性能够满足系统响应需求。再下载YAFFS代码包。内有YAFFS和YAFFS2两个文件夹。其中YAFFS已经不再维护,进入YAFFS2。文件夹内有patch-ker.sh补丁文件,使用以下命令将YAFFS2加入到Linux内核。
    以上命令完成了三件事情:
    (1)修改内核fs/Kconfig。增加一行:source”fs/YAFFS2/Kconfig”。
    (2)修改内核fs/Kconfig。增加一行:ojb-MYM(CONFIG_YAFFS_FS)+=YAFFS2/。
    (3)在内核fs/目录下创建YAFFS2目录;将YAFFS2源码目录下面的Makefile.kernel文件复制为内核fs/YAFFS2/Makefie;将YAFFS2源码目录的Kconfig文件复制到内核fs/YAFFS2目录下;将YAFFS2源码目录下的*.C*.h文件复制到内核fs/YAFFS2目录下。
    进入内核目录,修改makefile,并对内核进行默认配置进行修改,使其支持本开发板。
 
    根据具体NANDFLASH芯片特性,修改tacls,twrph0,twrphl的值。
    修改arch/arm/tools/math-types文件,使其Linux内核的机器号与Bootloader传递来的参数一致。建立好交叉编译环境,在环境变量PATH中添加交叉编译工具路径。或者直接在makefile文件内添加修改也可以。使用makes3c2410_defconfig命令,将2410的默认配置文件写到当前目录下的.config。使用makeme-nuconfig命令配置内核模块的功能,要选中MTD和YAFFS2支持。在Bootoptions选项中增加以下语句。
 
    使用makezImage命令,生成是zlmage映像文件。再用mkimage工具制作ulmage,uImage是U-Boot专用的映像文件,它在zImage之前加上一个长度为040的“头”,说明这个映像文件的类型、加载位置、生成时间、大小等信息。
    3.3制作文件系统
    嵌入式Linux系统都需要构建根文件系统,构建根文件系统的规则在文件系统层次标准(FilesystemHi-erarchyStandard,FHS)文档中。首先建立根文件系统目录和动态链接库,然后使用Busybox工具可以生成根文件系统所需的bin,sbin,usr目录和linuxrc文件。Bosybox是一个遵循GPLv2协议的开源项目,它在编写过程总对文件大小进行优化,并考虑了系统资源有限(比如内存等)的情况,为嵌入式系统提供了一个比较完整的工具集。
    YAFFS2源代码包内除了本身文件系统代码外,utils目录下还包含了mkYAFFSimage/mkYAFFS2image的代码,修改Makefile里的内核路径编译出mkYAFFSimage/mkYAFFS2image工具。其中mkYAFFSimage用于制作512B的小页YAFFS文件系统,mkYAFFS2image用于制作2KB以上的大页YAFFS2文件系统。输入以下格式命令,制作出支持大页的YAFFS2文件系统映像。
    mkYAFFS2imageMYM{PRJROOT}rootfsrootfs.YAFFS
    通过mkYAFFS2image制做出来的映像文件其OOB中包含的ECC是使用YAFFS2/YAFFSecc.c文件中的YAFFSECCCaimJlate函数计算出来的
    ECC校验码,其校验算法和nandecc.c文件内的nand_calculate_ecc函数校验算法不同,如果在内核中由MTD来处理ECC,当读取NANDFLASH中的数据时,会通过nand_calculate_ecc函数的算法再生成一个新的ECC校验和,校验的时候,将从OOB区中读出的原ECC校验和新ECC校验和按位异或,其错误的结果会造成系统认为所有的页面都是错误的。解决办法有两种,一是在内核编译时把LetsYAFFSdoitsownECC选上,同时修改内核把MTD驱动中的ECC校验关闭;二是修改mkYAFFS2image.c文件,使其制作image时使用nand_caleulate_ecc函数的校验算法,在内核编译时不要把LetsYAFFSdoitsownECC选上,同时打开MTD驱动中的ECC校验。
    3.4系统测试
    启动系统后,Bootloader首先运行,然后它将内核复制到内存中,并且在内存某个固定的地址设置好要传递给内核的参数,最后运行内核。内核启动之后,它会将文件系统挂载为根文件系统,接着启动文件系统中的应用程序。启动途中会显示如下信息:

 
    重新启动,内核可以从NANDFLASH启动根文件系统。
    4结语
    大页NANDFLASH的快速擦除、读/写性能满足了系统对实时性的要求,YAFFS2可靠的掉电保护和高效率的读写以及对NANDFLASH存储设备的保护等优势增加了整个系统的安全性和健壮性,两者的结合达到了装备对数据的大容量存储和管理的需求。目前,该系统已装备于某部,用于实时监测装备的战技术状况,以及长时间实时记录装备工作数据,用于事后分析评估装备性能和操作手水平,在部队作训中发挥了重大作用。
 
免责声明
• 本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 304108043@qq.com
  • QQ在线咨询1982497648
  • 手机:
  • 联系我时务必告知是在产品网上看到的!

厦门莫格电气自动化有限公司

商铺|诚信档案

地址:

电话:传真:

免责声明:以上信息由会员自行提供,内容的真实性、准确性和合法性由发布会员负责,产品网对此不承担任何责任。产品网不涉及用户间因交易而产生的法律关系及法律纠纷, 纠纷由您自行协商解决。

风险提醒:本网站仅作为用户寻找交易对象,就货物和服务的交易进行协商,以及获取各类与贸易相关的服务信息的平台。为避免产生购买风险,建议您在购买相关产品前务必 确认供应商资质及产品质量。过低的价格、夸张的描述、私人银行账户等都有可能是虚假信息,请采购商谨慎对待,谨防欺诈,对于任何付款行为请您慎重抉择!如您遇到欺诈 等不诚信行为,请您立即与产品网联系,如查证属实,产品网会对该企业商铺做注销处理,但产品网不对您因此造成的损失承担责任!

联系:304108043@qq.com是处理侵权投诉的专用邮箱,在您的合法权益受到侵害时,欢迎您向该邮箱发送邮件,我们会在3个工作日内给您答复,感谢您对我们的关注与支持!

商铺首页 | 公司概况 | 供应信息 | 新闻动态 | 诚信档案 | 联系我们 |

厦门莫格电气自动化有限公司 电话: 传真: 联系人:

地址: 主营产品:PLC可编程控制器模块,DCS卡件,ESD系统卡件,振动监测系统卡件,汽轮机控制系统模块,燃气发电机备件

Copyright © 2025 版权所有: 产品网

免责声明:以上所展示的信息由企业自行提供,内容的真实性、准确性和合法性由发布企业负责。产品网对此不承担任何保证责任。

商盟客服

您好,欢迎莅临,欢迎咨询...