Linux文件系统的移植-JFFS2

JFFS2是JFFS的后继者,由Red Hat重新改写而成。JFFS2的全名为JournallingFlash File System Version 2(闪存日志型文件系统第2版),其功能就是管理在MTD设备上实现的日志型文件系统。与其他的存储设备存储方案相比,JFFS2并不准备提供让传统文件系统也可以使用此类设备的转换层。它只会直接在MTD设备上实现日志结构的文件系统。JFFS2会在安装的时候,扫描MTD设备的日志内容,并在RAM中重新建立文件系统结构本身。

除了提供具有断电可靠性的日志结构文件系统,JFFS2还会在它管理的MTD设备上实现“损耗平衡”和“数据压缩”等特性。

JFFS2 功能如下:

Ø  支持NAND Flash。

Ø  硬连结(Hardlinks),这是JFFS 碍于文件格式所无法支援的功能。

Ø  压缩,有三种算法:zlib, rubin 以及 rtime.

Ø  更佳的效能。

缺点:

Ø  JFFS2挂载时需要扫描整块Flash,来确定节点的合法性以及建立必要的数据结构,这使得JFFS2挂载时间比较长。

Ø  JFFS2是将节点信息保存在内在中的,使得它所占用的内存量和节点数目成正比。

Ø  JFFS2是通过随机方式来实现磨损平衡的,它不能保证磨损平衡的确定性。

Ø JFFS2没有write-back机制,不能将资料暂存于缓存(cache),以致于flash I/O的动作频繁。

移植环境:

Ubuntu 16.04-64

u-boot.bin

目标板:AT91SAM9x25

交叉编译器 arm-none-linux-gnueabi-gcc 4.4.3

内核的支持

也就是说您的内核必须支持jffs2。

zlib的编译

解压zlib-1.2.11.tar.gz并进入zlib-1.2.11配置编译安装

$ tar zxf zlib-1.2..tar.gz

$ cd zlib-1.2.

$ ./configure

$ make

$ make install

MTD工具编译

解压mtd-snapshot-20050519.tar.bz2 并进入mtd/util编译安装

$ tar xvf  mtd-snapshot-.tar.bz2
$ cd mtd/util
$ make
$ make install

这样我们的系统里就有了mkfs.jffs2这个工具了,可以自行检查一下。

 

Jffs2文件系统镜像制作

mkfs.jffs2 -r fsmount -orootfs_new.jffs2 -e 0x20000 --pad=0x800000 -n

ü  -r选项指定输入的文件和目录路径,不指定则为当前路径

ü  -e, --eraseblock=SIZE,设定擦除块大小为SIZE,缺省为64KB,如果你使用的擦除块与MTD设备的实际擦除块大小不一致,则JFFS2表现不会很好,如果SIZE设置小于4096,则假定单位为KB。

ü  -p, --pad[=SIZE],用16進制來表示所要輸出檔案的大小,也就是root.jffs2 很重要的是, 為了不浪費flash空間, 這個值最好符合flash driver所規劃的區塊大小。如果不足则使用0xff来填充补满。

JFFS2文件系统的移植的更多相关文章

  1. 1.移植3.4内核-分析内核启动过程,重新分区,烧写jffs2文件系统

    1.在上章-移植uboot里.我们来分析下uboot是如何进入到内核的 首先,uboot启动内核是通过bootcmd命令行实现的,在我们之前移植的bootcmd命令行如下所示: bootcmd=nan ...

  2. JFFS2 文件系统及新特性介绍

    简介: JFFS2 是一个开放源码的项目(www.infradead.org). 它是在闪存上使用非常广泛的读/写文件系统,在嵌入式系统中被普遍的应用.这篇文章首先分析了在闪存上使用 JFFS2 的必 ...

  3. jffs2文件系统制作

    内核:                linux-3.0 uboot:             2010.09 开发板:             fl2440 交叉编译器:         2011. ...

  4. 从零开始制作jffs2文件系统

    JFFS2 是一个开放源码的项目(www.infradead.org). 它是在闪存上使用非常广泛的读/写文件系统,在嵌入式系统中被普遍的应用. 1.       安装mkfs工具 MTD主页:htt ...

  5. 已有 JFFs2文件系统的修改

    项目应用中,对于前人留下的JFFS2的文件,有时候我们需要修改,但是苦于没有源文件,实际操作很多时候无所适从.每次支持生产之后再进行人为的升级.这样费时费力,也给生产人员增加了负担. 为了解决这个问题 ...

  6. hi3531 SDK已编译文件系统制作jffs2文件系统镜像并解决问题 .

    一, 安装SDK 1.Hi3531 SDK包位置 在"Hi3531_V100R001***/01.software/board"目录下,您可以看到一个 Hi3531_SDK_Vx. ...

  7. hi3531 SDK已编译文件系统制作jffs2文件系统镜像并解决这个问题 .

    一, 安装SDK 1.Hi3531 SDK包位置 在"Hi3531_V100R001***/01.software/board"文件夹下,您能够看到一个 Hi3531_SDK_Vx ...

  8. Busybox文件系统的移植

    相关软件下载地址:http://pan.baidu.com/s/16yo8Y fsc100开发板 交叉编译器:arm-cortex_a8-linux-gnueabi-gcc busybox-1.17. ...

  9. Linux3.4内核 Yaffs2文件系统的移植

    作者:李老师,华清远见嵌入式学院讲师. [实验目的] Yaffs2文件系统是嵌入式系统中常用到的一种文件系统,是也是移植Android所必须的.通过向FS_S5PC100平台移植Yaffs文件系统,了 ...

随机推荐

  1. panic和recover的使用规则

    转自个人博客 chinazt.cc 在上一节中,我们介绍了defer的使用. 这一节中,我们温习一下panic和recover的使用规则. 在golang当中不存在tye ... catch 异常处理 ...

  2. 数据结构之网络流入门(Network Flow)简单小节

    网络流的相关定义: 源点:有n个点,有m条有向边,有一个点很特殊,只出不进,叫做源点. 汇点:另一个点也很特殊,只进不出,叫做汇点. 容量和流量:每条有向边上有两个量,容量和流量,从i到j的容量通常用 ...

  3. Java基础(6)- 面向对象解析

    java面向对象 对象 知识点 java 的方法参数是按值调用,是参数的一份拷贝 封装 使用private将 属性值/方法 隐藏,外部只能调用 get,set方法/非private 的接口 获取 重载 ...

  4. 在使用<script>嵌入JavaScript代码时,不要在代码中的任何地方出现"</script>"字符串

    在使用<script>嵌入JavaScript代码时,记住不要在代码中的任何地方出现"</script>"字符串.例如浏览器执行下面代码会报错: <s ...

  5. window.onload的使用心得

    如果我问你window.onload是什么意思,恐怕你会回答我:"这不是页面加载完就执行吗".  但是答案是不一定,得看你怎么用.看一下例子吧 例1:  代码如下:   <! ...

  6. ASP.NET Core MVC 控制器创建与依赖注入

    本文翻译自<Controller activation and dependency injection in ASP.NET Core MVC>,由于水平有限,故无法保证翻译完全准确,欢 ...

  7. 算法设计与分析 上机题Mergesort

    #include <iostream>using namespace std; #define N 100 int g_array[N];     //存放输入的数字static int ...

  8. C实现dos图文菜单程序实例

      前言 公司一台服务器是novell环境,文件管理是基于dos6.22的,客户端启动需要一个图文菜单.   实现    编程环境:汉化版TC2.0 菜单基本功能:显示提示项.显示dbf中的行情信息. ...

  9. MySQL实现自动使用uuid作为主键以及解决不能调用触发器的一点思路

    这里使用触发程序实现此功能. 触发程序语法如下: Create trigger <tri_name> {before|after} {insert|update|delete} On &l ...

  10. HTML5中a标签的锚点使用

    前几天有个用户问我关于在线手册功能里的锚点问题.因为他通过代码发现,在编辑手册内容时,锚点的设置是通过id选择器来制定的,而不是带有name属性的a标签.其实这是HTML5和HTML4(XHTML)等 ...