http://www.eetop.cn/blog/html/98/510998-20964.html

作者:刘洪涛,华清远见嵌入式学院高级讲师,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文件系统将无法识别)。

jffs2根文件系统制作的更多相关文章

  1. linux根文件系统制作

    在嵌入式中移植的内核下载到开发板上,是没有办法真正的启动Linux操作系统的,会出现无法加载文件系统的错误. 那么根文件系统在系统启动中到底是什么时候挂载的呢?先将/dev/ram0挂载,而后执行/l ...

  2. 嵌入式linux内核制作、根文件系统制作

    嵌入式系统构成: 主要由bootloader.kernel.以及根文件系统三部分组成. 内核制作步骤: 制作嵌入式平台使用的linux内核制作方法与pc平台上的linux内核基本一致 1.清除原有配置 ...

  3. S5PV210的根文件系统制作

    一.移植BusyBox1.下载BusyBox的源代码下载地址:http://www.busybox.net/downloads/,此处下载busybox-1.20.2.tar.bz2.2.解压并进入目 ...

  4. Yaffs2根文件系统制作

    Yaffs2根文件系统制作 环境: 交叉编译环境:4.4.6 开发平台:s3c2416 1,编译busybox 获取busybox源码busybox-1.17.2.tar (http://www.bu ...

  5. 内核移植和文件系统制作(4):UBIFS根文件系统制作总结

    UBIFS文件系统简介: 无排序区块图像文件系统(UnsortedBlock Image File System, UBIFS)是用于固态硬盘存储设备上,并与LogFS相互竞争,作为JFFS2的后继文 ...

  6. rootfs -根文件系统制作

    目录 目录 目录 概述 概念 根文件系统是什么 根文件系统中有什么 根文件系统的形式 Busybox 简介 什么是 linuxrc VFS 简介 Busybox 工具 Busybox 目录结构 Men ...

  7. linux根文件系统制作,busybox启动流程分析

    分析 busybox-1.1.6 启动流程,并 制作一个小的根文件系统 源码百度云链接:https://pan.baidu.com/s/1tJhwctqj4VB4IpuKCA9m1g 提取码 :l10 ...

  8. 根文件系统制作、NFS配置与安装及利用NFS挂载根文件系统

    最近打算从头开始制作根文件系统,下面是开发过程. 一.根文件系统的制作 0.FHS(Filesystem Hierarchy Standard)标准介绍 该标准规定了根目录下各个子目录的名称及其存放的 ...

  9. linux根文件系统制作之busybox编译和系统构建【转】

    转自:http://blog.chinaunix.net/uid-29401328-id-5019660.html 介绍完相关文件后我们开始构建文件系统,涉及到的文件等到具体用到的时候再讲. 一.编译 ...

随机推荐

  1. SpringMVC中的Controller默认单例

    众所周知,Servlet是单例的. 在struts中,Action是多例的,每一个请求都会new出来一个action来处理. 在Spring中,Controller默认是单例的,多个请求都会访问同一个 ...

  2. 【LeetCode】164. Maximum Gap (2 solutions)

    Maximum Gap Given an unsorted array, find the maximum difference between the successive elements in ...

  3. 【LeetCode】79. Word Search

    Word Search Given a 2D board and a word, find if the word exists in the grid. The word can be constr ...

  4. Android开发之模仿UC浏览器的菜单

    这个内容内容涉及到的了两个知识点: PopupWindow:使用PopupWindow创建一个简单的菜单 使用TabHost创建标签:这个网上好多教程随便看看就好. 实现思路: 观察一下UC浏览器的菜 ...

  5. OAF_OAF控件系列4 - HGrid的实现(案列)

    2014-06-02 Created By BaoXinjian

  6. Java将数据库数据导入EXCEL

    一般的数据库数据怎么导入excel中呢??这让人非常疑惑,今天我找到了一个方法能够实现 须要导入一个第三方包下载地址 详细内容例如以下: 里面含有指导文档,index.html里面含有怎样读取数据库文 ...

  7. javascript怎么禁用浏览器后退按钮

    1. <script language="JavaScript">    javascript:window.history.forward(1); </scri ...

  8. oracle Database link 创建

    http://www.cnblogs.com/yhason/p/3735319.html

  9. MAR 27 解决华为手机访问Google Play:从服务器检索信息时出错。[DF-DFERH-01]

    虽然路由器已经设置了梯子,但是用华为手机访问Google Play时,还是提示:从服务器检索信息时出错.[DF-DFERH-01].   虽然在手机上把梯子设置成全局模式,连接Google Play后 ...

  10. 江南白衣 Java性能优化PPT

    会后江南白衣花费数日整理PPT,到1.4版本共66页,内容翔实且旁征博引,不断校正且力求做到极致的匠艺精神值得尊敬! 技术大牛飒然Hang如是说到: “技术大神中,除了陈皓就是白衣了,四十岁还能钻研. ...