基于ARM的嵌入式文件系统YAFFS的移植

发布者:Xingfu6666最新更新时间:2012-03-22 来源: 微计算机信息 关键字:S3C2410  嵌入式文件  挂载 手机看文章 扫描二维码
随时随地手机看文章

1引言

目前,嵌入式系统大多采用用JAFFS和YAFFS文件系统,但JAFFS文件系统主要用于NOR FLASH,由于NOR FLASH 内部结构的局限性,只适合于小容量的存储,并且NOR FLASH读写速度慢,不能满足系统实时性的需要,在我的测试过程中,在NAND FLASH上挂载的JFFS2文件系统很不稳定,经常有CRC错误产生。特别是进行写操作的时候,每次复位都会产生CRC错误,可以说支持NAND FLASH的 JFFS2文件系统目前还不成熟。YAFFS(Yet Another Flash File System)类似于JFFS/JFFS2,是专门为 NAND闪存设计的嵌入式文件系统,适用于大容量的存储设备.YAFFS内部实现层和NAND FLASH接口层,这样就简化了其与系统的接口设计,可以方便地集成到系统中去,与JFFS相比,YAFFS减少了一些功能,因此速度更快,占用内存更少,更能满足系统实时性的要求。

2 硬件平台的简介

本系统采用目标机+宿主机开发模式,目标平台是ARM-S3C2410,宿主机是PC机+Linux操作系统.S3C2410是ARM920T处理器核的 32位微控制器,它是SAMSUNG公司专门为PDA、Internet设备和手持设备等专门开发的微处理器.该芯片还包含有16KB一体化的 Cache/MMU,这一特性使开发人员能够将Linux操作系统移植到基于该处理器的目标系统中.

该目标板的主要系统资源有:64M的 SDRAM、8M的NAND FLASH、32M的NOR FALSH、LCD控制器RAM控制器、NAND闪存控制器、3路UART、4路DMA、4路带PWM的Timer、并行I/O口、8路1O位ADC、Touch Screen接口、I2C接口、I2S接口、2个USB接口控制器、2路SPI,主频最高可达203MHz.

3 嵌入式文件系统的概述

众所周知,文件系统是操作系统的一个重要的组成部分,每个操作系统都有自己的文件系统,文件系统直接影响着操作系统的稳定性和可靠性.Linux下的文件系统通常有两种,即日志式和非日志式文件系统,常见的嵌入式文件系统有 JFFS2,CRAMFS,RAMDISK,YAFFS文件系统,嵌入式文件系统的任务是对文件进行管理,其工作包括提供对逻辑文件的操作(包括检索、新增、修改、删除、拷贝)接口,方便用户操作文件和目录.

由于本文采用的Linux内核版本为2.6.14,不支持设备文件系统,可以在 /dev目录下手动添加设备结点.本系统的根文件系统为RAMDISK(虚拟硬盘),通过修改根文件系统下的/dev目录,使用命令mknod创建 mtdblock块设备文件,以便挂载YAFFS文件系统.

4 Yaffs文件系统的介绍

YAFFS(Yet Another Flash File System)文件系统是专门针对NAND 闪存设计的嵌入式文件系统,是一种类似于 JFFS/JFFS2 的专门为 Flash 设计的嵌入式文件系统,与JFFS 相比,它减少了一些功能,因此速度更快、占用内存更少,YAFFS不支持压缩,更适合存储容量大的系统. 目前有YAFFS和YAFFS2两个版本,两个版本的主要区别在于YAFFS2 能够更好的支持大容量的NAND FLASH芯片.

YAFFS文件系统有些类似于JFFS/JFFS2 文件系统,与之不同的是JFFS1/2 文件系统最初是针对NOR FLASH的应用场合设计的,而NOR FLASH 和NAND FLASH本质上有较大的区别,所以尽管JFFS1/2 文件系统也能应用于NAND FLASH,但由于它在内存占用和启动时间方面针对NOR 的特性做了一些取舍,所以对 NAND FLASH来说通常并不是最优的方案,YAFFS和JFFS都提供了写均衡,垃圾收集等底层操作,YAFFS中是从头到尾对块搜索,所以在垃圾收集上JFFS的速度慢,但是能延长NAND FLASH的寿命.

YAFFS将文件组织成固定大小(512字节)的数据段。每个文件都有一个页面专门存放文件头,文件头保存了文件的模式、所有者id、组id、长度、文件名等信息。为了提高文件数据块的查找速度,文件的数据段被组织成树形结构。 YAFFS在文件进行改写时总是先写入新的数据块,然后将旧的数据块从文件中删除。YAFFS使用存放在页面备用空间中的ECC进行错误检测,出现错误后会进行一定次数的重试,多次重试失败后,该页面就被停止使用。

YAFFS充分利用了NAND闪存提供的每个页面16字节的备用空间,参考了 SmartMedia的设定,备用空间中6个字节被用作页面数据的ECC,2个字节分别用作块状态字和数据状态字,其余的8字节(64位)用来存放文件系统的组织信息,即元数据。由于文件系统的基本组织信息保存在页面的备份空间中,因此,在文件系统加载时只需要扫描各个页面的备份空间,即可建立起整个文件系统的结构,而不需要像JFFS 那样扫描整个介质,从而大大加快了文件系统的加载速度。 [page]

5 Linux-2.6.14内核代码的修改

1.在arch/arm/mach-s3c2410/devs.c文件中添加static struct mtd_partition partition_info[]创建分区信息,使YAFFS文件系统位于mtdblock3.
static struct mtd_partition partition_info[]={
        [0] = {
                .name   = "u-boot",
             .size   = 0x00020000,
             .offset = 0x00000000,
        },
        [1] = {
                .name   = "param",
                .size   = 0x00010000,        
 .offset = 0x00020000,
        },
        [2] = {
                .name   = "kernel",
                .size   = 0x00100000,
                .offset = 0x00030000,
        },
        [3] = {
                .name   = "root",
                .size   = 0x01900000,
                .offset = 0x00130000,
        },
        [4] = {
                .name   = "user",
                .size   = 0x025d0000,
                .offset = 0x01a30000,
        }
};注意,这里的分区信息应与U-BOOT中保持一致.

2.YAFFS 的校验算法和MTD NAND FLASH驱动的校验算法不同,如果在内核中由MTD来处理ECC,会造成MTD 认为所有的page都校验错误.所以要把要把NAND驱动中的ECC校验关闭.采用YAFFS2自带的校验算法,基于这个考虑,在drivers/mtd/nand/s3c2410.c中,将 chip->eccmode=NAND_ECC_SOFT修改为chip->eccmode=NAND_ECC_SOFT.

3.从开源网站下载YAFFS2文件系统的源码,在宿主机下用tar xzvf yaffs2.tar.gz命令解压,在移植的内核目录下建立yaffs文件夹,并将需要的文件拷贝到yaffs文件夹下.简单介绍下yaffs文件系统代码的函数功能.
# mkdir $LINUXDIR/fs/yaffs
    # cp Makefile.kernel $LINUXDIR/fs/yaffs/Makefile
    # cp Kconfig $LINUXDIR/fs/yaffs
    # cp *.c *.h  $LINUXDIR/fs/yaffs
4.修改fs/Kconfig,vi Kconfig ,添加 source "fs/ /Kconfig" 
5.修改Makefile文件:
# cd  $LINUXDIR/fs
# vi  Makefile    obj-$(CONFIG_YAFFS_FS) += yaffs/
6 配置和编译内核

1.选中对MTD(memory technology device内存技术设备)的支持.
Memory Technology Device (MTD)
support   --->                                                     
[﹡]   MTD concatenating support                                          
• MTD partitioning support                                           
[﹡]     RedBoot partition table parsing                                  
[﹡]     Command line partition table parsing                             
 User Modules And Translation Layers                                
• Direct char device access to MTD devices                           
• Caching block device access to MTD devices  
MTD 主要是用于访问memory设备(ROM、flash)的Linux的子系统.MTD可以使新的memory设备的驱动更加简单,为此它在硬件和上层之间提供了一个抽象的接口. [page]

2.选中NAND Device Support
•  NAND Device Support --->
[﹡] Verify NAND page writes
•  NAND Flash support for S3C2410/S3C2440 SoC 
•  S3C2410 NAND driver debug 
[﹡] S3C2410 NAND Hardware ECC 
这样就完成了内核对NAND FLASH的支持.

3.由于添加了YAFFS2文件系统,所以在内核的配置菜单 [File systems] 中的 [miscellaneous filesystems] 中增加了 [Yaffs2 file systems support] 选项.这个选项就是 YAFFS2的配置内容.
File systems --->     Miscellaneous filesystems ---> 
•  YAFFS2 file system support 
 --- 512 byte / page devices 
•  Lets Yaffs do its own ECC 
•  Use the same ecc byte order as Steven Hill's nand_ecc.c 
 --- 2048 byte (or larger) / page devices  
•  Autoselect yaffs2 format  
•  Disable lazy loading  
•  Turn off wide tnodes  
•  Turn off debug chunk erase check  
•  Cache short names in RAM
选择这个选项的全部内容,保存配置,然后退到终端,输入make zImage,重新编译内核,这样就就完成了对YAFFS文件系统的定制.

7 测试挂载的YAFFS文件系统

1.用imagewrite命令将YAFFS文件系统的映像文件烧写到mtdblock3分区.
2.在ramdisk根文件系统中创建挂载目录,使用命令mkdir /mnt/yaffs. 
3.  执行mount –t yaffs /dev/mtdblock/3 /mnt/yaffs来挂载YAFFS文件系统.
4.  由于内核配置了proc文件系统,用cat /proc/mounts 可以查看已经成功挂载了YAFFS文件系统,用ls /mnt/yaffs可以查看YAFFS文件系统的内容.

8 结束语

本文为开发者提供了在ARM9平台上移植YAFFS文件系统的方法和过程的参考,创新之处是在当前嵌入式应用中比较新的2.6内核上测试完成的.测试过程中 YAFFS稳定性能比JFFS2文件系统要稳定的多,而且mount分区的时间也比JFFS2文件系统少的多。需要注意一点是,即使NAND FLASH 是512+16B的,不需要使用YAFFS2,也必须将对2kpage的NAND FLASH的支持这一项选上,否则编译无法通过.由于ARM- S3C2410不支持大容量的NAND FLASH,所以flash是512+16B / page的,即使你选择的是YAFFS2文件系统,内核也会自动选择挂载为YAFFS1文件系统,由于实验系统的局限性,本文只在ARM-S3C2410平台上实现了YAFFS1文件系统的移植,在功能更强大ARM 芯片系列中已经加入了对大容量(512M)的NAND FLASH的支持,支持YAFFS2文件系统,移植方法与YAFFS文件系统移植方法大致相同.

参考文献:
[1] 杜春雷,ARM体系结构与编程[M]。北京:清华大学出版社,2003
[2] 潘巨龙,黄宁,ARM9嵌入式系统构建与应用[M]。北京:北京航空航天大学出版社,2006
[3] 陈 春,ARM9嵌入式技术及Linux高级实践教程[M]。北京:北京航空航天大学出版社,2005
[4] Wookey and Tak—Shing,Porting the Linux Kernel to a New ARM Platform,SOLUTIONS JOURNAL,2002,4:52—57
[5] 郝淑风等.基于ARM的uCLinux启动引导实现的分析[J].微计算机信息,2005,8-2:50—52

关键字:S3C2410  嵌入式文件  挂载 引用地址:基于ARM的嵌入式文件系统YAFFS的移植

上一篇:U-Boot在LPC2210上的移植分析
下一篇:基于FAT16文件系统的嵌入式温度记录器

推荐阅读最新更新时间:2024-03-16 12:56

嵌入式系统在机器人视觉中的应用
随着Internet技术与信息家电、工业控制技术等的结合日益紧密,嵌入式设备与Internet的结合已成为大势所趋。此时期新的微处理器层出不穷,要求嵌入式操作系统的设计更加便于移植,支持更多的微处理器。 嵌入式系统的开发需要强大的硬件开发工具和软件支持包。通用计算机上使用的新技术、新观念开始逐步移植到嵌入式系统中,如嵌入式数据库、移动代理、实时CORBA等。各类嵌入式Linux操作系统在全球数以百万计爱好者的合力开发下迅速发展,由于具有源代码开放、系统内核小、执行效率高、网络功能强,多媒体人机交互界面友好等特点,很适合信息家电等嵌入式系统的需要。 一 嵌入式系统的技术特点   早期的嵌入式系统设计方法,通常采用"硬件优先"原则,
[单片机]
<font color='red'>嵌入式</font>系统在机器人视觉中的应用
s3c2410--watchdog
1.什么是watchdog? watchdog,中文名称叫做“看门狗”,全称watchdog timer,从字面上我们可以知道其实它属于一种定时器。然而它与我们平常所接触的定时器在作用上又有所不同。普通的定时器一般起记时作用,记时超时 (Timer Out)则引起一个中断,例如触发一个系统时钟中断。熟悉windows开发的朋友应该用过windows的Timer,windows Timer的作用与方才所讨论的定时器在功能上是相同的,只是windows Timer属于软件定时器,当windows Timer记时超时则引起App向System发送一条消息从而触发某个事件的发生。我们从以上的描述可知不论软件定时器或硬件定时器他们的作用都是
[单片机]
基于嵌入式系统的GPRS系统的设计
  嵌入式系统就是一个具有特定功能或用途的计算机软硬件结合体,或指装入另一个设备并且控制该设备的专用计算机系统。嵌入式系统的最大特点是其具有目的性和针对性,即每一套嵌入式系统的开发都有其特殊的应用场合与特定功能。嵌入式系统包含硬件和软件两部分:硬件架构以嵌入式处理器为中心,配置存储器、I/O设备、通信模块等;软件部分以软件开发平台为核心,向上提供应用编程接口API,向下屏蔽具体硬件特性的板级支持包BSP。嵌入式系统中,软件和硬件紧密配合,协调工作,共同完成系统预定的功能。   GPRS是General Packet Radio Service的简称,即通用无线分组业务。它是基于现在运行的GSM基础上发展的数据业务,类似于固定交换
[单片机]
基于<font color='red'>嵌入式</font>系统的GPRS系统的设计
基于S3C2410处理器和IEEE802.11b实现无线温度变送器的设计
IEEE802.11是IEEE无线局域网标准,主要用于用户终端的无线接入。IEEE802.11只规定了开放式系统互联参考模型的物理层和介质访问子层,其MAC层利用载波监听多路访问/冲突避免(CSMA/CA)协议;定义了单一的MAC层和多样的物理层,其物理层标准主要有IEEE802.11b、IEEE80211a和IEEE80211g。IEEE802.11b标准是IEEE802.11协议标准的扩展,最高可以支持11 Mbps的数据速率,运行在2.4 GHz的ISM频段上,采用的调制技术是CCK,支持数据业务。 本文详细分析了采用S3C2410处理器平台具体实现运用于EPA网络的IEEE802.11b无线实时温度采集器的开发流程,并
[单片机]
基于<font color='red'>S3C2410</font>处理器和IEEE802.11b实现无线温度变送器的设计
基于S3C2410的RTC模块应用设计
摘 要:本文简要介绍了S3C2410嵌入式微处理器,分析了RTC(Real-time clock)硬件构架及其工作机理,在此基础上给出了RTC模块的应用功能开发流程及各功能模块的实现。 关键词:S3C2410;RTC 引言 本文在介绍S3C2410的基础上,对RTC内部结构及工作机理进行了分析,最后给出了专用于RTC功能的应用开发。 硬件结构 S3C2410处理器简介 S3C2410是三星公司推出的16/32位RISC微处理器,它是为应用于小型掌上设备和高性价比、低功耗、高性能的嵌入式系统应用而提供的微控制解决方案。S3C2410使用了ARM920T内核。 图1 S3C2410内部RTC模块结构图
[单片机]
移植嵌入式Linux到ARM处理器S3C2410:设备驱动
设备驱动程序是操作系统内核和机器硬件之间的接口,它为应用程序屏蔽硬件的细节,一般来说,Linux的设备驱动程序需要完成如下功能:   ·设备初始化、释放;   ·提供各类设备服务;   ·负责内核和设备之间的数据交换;   ·检测和处理设备工作过程中出现的错误。   Linux下的设备驱动程序被组织为一组完成不同任务的函数的集合,通过这些函数使得Windows的设备操作犹如文件一般。在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作,如open ()、close ()、read ()、write () 等。   Linux主要将设备分为二类:字符设备和块设备。字符设备是指设备发送和接收数据以
[单片机]
移植<font color='red'>嵌入式</font>Linux到ARM处理器<font color='red'>S3C2410</font>:设备驱动
MCU_S3C2410之ADC分析
基本概念: 1.采样定理,又称香农采样定理,奈奎斯特采样定理:即采样频率要大于模拟信号最高频率的两倍 2.A/D的位数,即A/D的分辨率,决定量化误差的大小(LSB)1LSB=1/2的N次方 3.转换速率:指一次A/D转换所需的时间,从接收转换开始控制信号到输出数字信号所花费的时间 A/D是高速还是低速皆以此为依据 4.量化误差(分辨率) 为了减小量化误差,通常输入端会加入0.5LSB的偏移量。 5.A/D的精度(DNL和INL) 用直尺来形象的描述,平常用的直尺,其最小刻度是1 毫米,然而,由于工艺等因素,使得直尺上的每个刻度并非都是精确的1 毫米,可能偏大,也可能偏小,DNL
[单片机]
MCU_<font color='red'>S3C2410</font>之ADC分析
基于ARM技术的服装舒适性检测系统的设计
随着生活水平的提高,人们对服装的舒适性有了更高的要求。服装舒适性的研究范围涉及三个基本领域:物理、生理和主观心理。现阶段,国内外的服装舒适性研究主要集中在生理舒适性领域。服装生理舒适性领域的研究主要集中在热湿舒适性、接触舒适性和压感舒适性三大领域。服装压力、温湿度的状态是评价服装生理舒适性的重要指标。不适当的服装压力会影响着装者的疲劳感和工作效率,且关系到人体的健康。一般来说,当人体皮肤温湿度处于热湿舒适性状态时,人们的智力、体力(手工)或感觉方面的表现均处于高水平状态,另外热湿舒适性是人们处于最佳健康状态的必要条件。通过对人体不同状态下不同部位的服装压力、温度湿度的测量,可以得到人体着装后的不同部位的压力、温湿度的分布状况
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved