`
cjc
  • 浏览: 680964 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在nand flash上实现JFFS2根文件文件系统

阅读更多
<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

作者:刘洪涛,华清远见嵌入式学院金牌讲师,ARM公司授权ATC讲师。

JFFS2是Flash上应用最广的一个日志结构文件系统。它提供的垃圾回收机制,不需要马上对擦写越界的块进行擦写,而只需要将其设置一个标志,标明为脏块,当可用的块数不足时,垃圾回收机制才开始回收这些节点。同时,由于JFFS2基于日志结构,在意外掉电后仍然可以保持数据的完整性,而不会丢失数据。

本文阐述如何在nand flash上实现JFFS2根文件文件系统。实验环境是:FS2410开发平台及ubantu7.04主机环境。

由于使用的ubantu7.04的环境没有安装制作JFFS2文件系统镜像的工具mkfs.jffs2,所以首先在Linux系统中安装mkfs.jffs2工具,安装的过程如下:

1.下载MTD工具包

本处使用的是mtd-snapshot-20050519.tar.bz2:

farsight#tar –jxvf mtd-snapshot-20050519.tar.bz2

farsight#cd mtd

farsight#./configure

farsight#make

farsight#make install

如果系统中没有安装ZLIB库,那么首先安装ZLIB库。具体的安装过程如下:

farsight#tar –zxvf zlib-1.2.3.tar.gz

farsight#cd zlib-1.2.3

farsight#./configure

farsight#make

farsight#make install

完成此步骤后,系统中就有了mkfs.jffs2的工具。注意:这个工具不同于mkfs.ext2工具,它只能制作相应的JFFS2文件系统的镜像,而不具有进行格式化的功能,而mkfs.ext2具备这以上两种功能。然后用这个工具就可以制作JFFS2文件系统的镜像了。

2、制作JFFS2文件镜像

实验平台用到的nand flash 是K9F1208,在制作镜像过程添加的参数需要和它对应。

farsight#mkfs.jffs2 -r /source/rootfs -o rootfs.jffs2 -e 0x4000 --pad=0x800000 -n

这样就会生成一个8M大小的rootfs.jffs2的镜像,它也正是JFFS2文件系统的镜像,关于这个命令行里的选项的内容,可以用man a mkfs.jffs2命令来查看内容。

JFFS2 维护了几个链表来管理擦写块,根据擦写块上的内容,一个擦写块会在不同的链表上。具体来说,当一个擦写块上都是合法(valid)的节点时,它会在 clean_list 上;当一个擦写块包含至少一个过时(obsolete)的节点时,它会在 dirty_list 上;当一个擦写块被擦写完毕,并被写入 CLEANMARKER 节点后,它会在 free_list 上。而当你在挂载这个文件系统的时候,如果出现CLEANMARKER node found at 0x0042c000 has totlen 0xc != normal 0x0的警告的时候,可以加一个“-n”的选项,这个主要是由于针对Nand Flash不需要在每个擦除块的开始写入CLEANMARKER 节点。

3、设置内核启动参数

本处用的bootloader是U-BOOT.所以在U-BOOT的命令终端设置如下:

FS2410#setenv bootargs root=/dev/mtdblock/2 rootfstype=jffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M

4、配置内核支持JFFS2文件系统

File systems ---> Miscellaneous filesystems --->

<*>JournallingFlash File System v2 (JFFS2) support

[*]JFFS2write-bufferingsupport

[*]AdvancedcompressionoptionsforJFFS2

[*]JFFS2ZLIBcompressionsupport

[*]JFFS2RTIMEcompressionsupport

[*] JFFS2 RUBIN compression support

5、下载rootfs.jffs2镜像

下载到Nand Flash第二个分区。

FS2410#nand erase 200000 800000

FS2410#nand write.jffs2 300008000 200000 800000

这里说明下关于nand flash操作的几个常用命令的含义

nand write:向Nand Flash写入数据,如果NandFlash相应的区域有坏块,则直接报错。

nand write.jffs2:向Nand Flash写入数据,如果NandFlash相应的区域有坏块,可以跳过坏块。

nand read:读取Nand Flash相应区域的数据,如果NandFlash相应的区域有坏块,则直接报错。

nand read.jffs2s:读取Nand Flash相应区域的数据,如果NandFlash相应的区域有坏块,将对应坏块区域的缓冲填充0xff,然后跳过此坏块继续读取。

nand read.jffs2:读取Nand Flash相应区域的数据,如果NandFlash相应的区域有坏块,直接跳过坏块。

具体的参考代码参看U-BOOT源码:common/cmd_nand.c文件。

下载完JFFS2文件系统镜像后,需要把Linux内核NandFlash的驱动关于第二个分区的大小改为8M(和镜像一样大),否则会出现类似如下错误:

Freeing init memory: 124K

Warning: unable to open an initial console.

Argh. Special inode #171 with mode 0xa1ff had more than one node

Kernel panic: No init found. Try passing init= option to kernel.

Argh. Special inode #63 with mode 0xa1ff had more than one node

Returned error for crccheck of ino #63. Expect badness...

Argh. Special inode #67 with mode 0xa1ff had more than one node

Returned error for crccheck of ino #67. Expect badness...

Argh. Special inode #68 with mode 0xa1ff had more than one node

到此,一个JFFS2文件系统的镜像制作成功。可以启动系统并测试JFFS2的性能了

还有一种制作JFFS2文件系统镜像的方法,在制作镜像的参数中可以不加—pad选项,过程如下:

farsight#mkfs.jffs2 -r /source/rootfs -o rootfs.jffs2 -e 0x4000 -n

启动开发板烧写rootfs.jffs2镜像

FS2410#nand erase 200000 800000//(注意把整个存放文件系统的分区全部给擦除)。

FS2410#nand write.jffs2 30008000 200000 31a28c//(必须是rootfs.jffs2的实际大小。如果是你写成了4M,那么分区的其余部分JFFS2文件系统将无法识别)。

分享到:
评论

相关推荐

    在nand flash上實現JFFS2根檔檔系統

    在NAND Flash上实现JFFS2根文件系统是一个关键的操作,这涉及到嵌入式设备的数据存储和系统稳定性。JFFS2(Journaling Flash File System version 2)是一种广泛应用于闪存设备的日志文件系统,特别适用于NAND Flash...

    jffs2根文件系统

    在进行AT91SAM9G45开发板的系统移植过程中,如果仅仅完成了内核的移植而未制作好根文件系统并将其烧写进NAND FLASH,那么系统启动后会出现以下错误信息: ``` VFS:Mounted root (jffs2 filesystem). Freeing init ...

    NAND FLASH文件系统

    支持 NAND flash 的 JFFS2 文件系统已经发布,但是在测试过程中发现,在 nand flash 上挂接的 JFFS2 文件系统很不稳定,经常有 CRC 错误产生。特别是在进行写操作的时候,每次复位都会产生 CRC 错误,可以说支持 ...

    jffs2-extract.rar_jffs2-extract_jffs文件解压_linux_海思 jffs2打包_解压jffs

    在嵌入式Linux系统中,jffs2(Journaling Flash File System 2)文件系统扮演着至关重要的角色,它专为闪存设备设计,提供了日志功能以确保数据完整性。本文将详细探讨如何对jffs2格式的bin文件进行打包和解压,同时...

    Linux学习系列五:Nand Flash根文件系统制作.pdf

    本文将更进一步,指导读者了解并实践如何在NAND Flash上制作根文件系统。 #### 2. 环境搭建 ##### 2.1 硬件环境 - **平台**: NUC972开发板 - **屏幕**: 建议选择4.3寸电阻屏 - **配件**: 摄像头、Wi-Fi模块(用于...

    JFFS JFFS2文件系统

    JFFS (Journalling Flash File System) 和 JFFS2 是专为嵌入式系统设计的日志型文件系统,它们主要用于基于闪存(Flash Memory)的嵌入式设备中。由于闪存具有读写次数限制的特点,为了最大化利用存储空间并提高数据...

    JFFS和YAFFS两种文件系统在嵌入式Linux平台上的运行比较.pdf

    在小型 NAND Flash 中,JFFS 文件系统可能是一个不错的选择,而在大型 NAND Flash 中,YAFFS 文件系统可能是一个更好的选择。 5. 结语 JFFS 和 YAFFS 文件系统都是嵌入式 Linux 平台上常用的文件系统,它们都有其...

    mtd-utils jffs2文件系统制作工具

    完成编译和安装后,你就可以在目标系统上使用mtd-utils工具,例如创建jffs2文件系统、擦除NAND Flash分区,以及将根文件系统映像烧录到NAND Flash上。 总之,mtd-utils与jffs2的结合使用是嵌入式Linux系统开发中...

    JFFS2文件系统分析

    在Linux系统中,JFFS2(Journaling Flash File System Version 2)是为闪存设备量身定制的一种日志结构化文件系统,由瑞典的Axis Communications AB设计,旨在解决传统文件系统在闪存介质上运行时遇到的效率和寿命...

    文件系统jffs2的镜像制作

    在嵌入式系统开发过程中,为了实现高效稳定的数据存储与读取功能,经常会用到JFFS2(Journaling Flash File System 2)这种专为闪存设计的文件系统。本文将详细介绍如何使用jffs2制作工具`mkfs.jffs2`来创建JFFS2...

    如何在LINUX下用NAND FLASH实现YAFFS文件系统的流程

    在深入探讨如何在LINUX环境下使用NAND FLASH实现YAFFS文件系统之前,我们先来了解几个关键概念:MTD(Memory Technology Devices)系统、NAND FLASH、YAFFS文件系统以及它们之间的交互机制。 ### MTD系统组织 MTD...

    JFFS2文件系统在uC linux上的实现

    ### JFFS2文件系统在uC Linux上的实现 #### 一、引言 随着Linux操作系统在嵌入式领域的广泛...通过这种方式,可以有效地在uC Linux平台上构建和实现JFFS2文件系统,进而解决嵌入式系统中对Flash存储器支持的问题。

    制作文件系统的JFFS2镜像

    - 启动U-Boot环境,使用TFTP协议将`rootfs.jffs2`文件下载到RAM中,然后将其烧写到NAND Flash的指定分区上。假设NAND Flash的分区结构如下: ``` Creating 6 MTD partitions on "NAND 64MiB 3,3V 8-bit": 0x...

    一个用于NAND flash上的文件系统--YAFFS文件系统

    YAFFS与JFFS/JFFS2文件系统有所不同,后者最初是为NOR FLASH设计的,尽管也可以应用于NAND FLASH,但在性能和效率方面不如专门为NAND设计的YAFFS。 ##### 1.2 NAND与NOR闪存的区别 NAND和NOR闪存虽然都是非易失性...

    Linux下的flash文件系统的性能比较,jffs2,yaffs2,ubifs

    - 随机读写性能上,jffs2由于采用了数据压缩技术,在读取时性能略低于其他两种文件系统;但在写入时,得益于其优化的磨损均衡算法,表现最好。 - 连续读写性能方面,ubifs凭借其高效的内存管理和先进的算法,性能...

    NANDFlash中文手册

    例如,YAFFS和JFFS2是为NAND Flash而设计的文件系统。 烧录NAND Flash通常需要使用特定的编程器。ELNEC编程器是一种广泛使用的编程器品牌,它支持多种Flash芯片的烧录,包括NAND Flash。烧录过程中通常会涉及到...

    嵌入式linux的jffs2文件系统移植

    ### 嵌入式Linux的JFFS2文件...通过上述步骤,我们不仅能够成功地在S3C2410平台上移植JFFS2文件系统,还能够深入了解嵌入式系统中文件系统的工作原理和技术细节。这对于进一步优化系统性能和提升开发效率具有重要意义。

    嵌入式Linux下JFFS2文件系统的实现

    MTD提供了基础的读写和管理功能,而JFFS2在此基础上构建了一个适合于Flash特性的高级文件系统层。通过MTD,JFFS2可以有效地管理Flash的块级操作,包括擦除、写入和读取,同时实现其独特的日志功能和故障恢复机制。 ...

    NandFlash文件系统解决方案.zip_nandflash

    在实现NAND Flash文件系统时,通常包括以下步骤: 1. **硬件抽象层(HAL)**:提供与特定NAND Flash芯片交互的接口,处理I/O操作。 2. **坏块管理模块**:检测和标记坏块,确保数据不会被写入这些区域。 3. **磨损...

Global site tag (gtag.js) - Google Analytics