• flash文件系统介绍


    一、前言

      主要讲述针对 Flash 设备而发展的两种文件系统JFFS2和cramfs。依然以实操为主,理论为辅,所有的数据都通过本人验证。

    JFFS2和cramfs都是基于MTD驱动程序。JFFS2文件系统是第二代日志闪存文件系统,主要应用在NOR flash,并提供耗损均衡技术。缺点是当文件系统变满时,因为垃圾收集的增多导致运行速度会受影响。JFFS2文件系统挂载时会扫描整个flash中的内容。

    Cramfs文件系统是一个简单小巧的文件系统,可以对文件进行压缩,很适合放到小容量的ROM中,Cramfs属于一种只读压缩文件系统。Cramfs速度快效率高,由于只读特性可以保护文件系统免受破坏。

    在下一章介绍网络文件系统NFS,NFS是在嵌入式开发过程必备的技术手段。

     

    二、实操JFFS2文件系统

    在工作站(unbutn)构建JFFS2镜像,需要mkfs.jffs2工具,该工具需要在工作站上安装。在工作站安装mkfs.jffs2工具,生成的jffs2镜像在mtd子系统中使用。

    1、工作站安装mkfs.jffs2工具

    2、构建JFFS2镜像

    rootfs_mini6410文件夹是目标板默认的根文件系统,JFFS2镜像是从一个目录构建而来,目录中包含我们想放到这个文件系统镜像中的所有文件。当这个目录放置了合适的运行文件后,就可以作为mkfs.jffs2目录的模板了。mkfs.jffs2命令会从一个目录树生成一个格式化好的JFFS2文件系统镜像。-d表示文件系统模板位置,-o表示指定输出文件的文件名,最终的JFFS2镜像会被写入jffs2.bin文件中。

    3、配置目标板内核以支持JFFS2文件系统

    目标板内核需要配置开启MTD的命令行分区表解析,具体位置“Device Drivers”->” Memory Technology Device (MTD) support”->” Command line partition table parsing”,将该功能编译进内核。

     

     

    配置JFFS2文件系统驱动为模块,可以动态加载到目标板内核中测试。配置位置“File systems”->”Miscellaneous filesystems”,将“Journalling Flash File System v2(JFFS2) support”配置为动态模块,其他配置为编译进内核。

     

     

     

    4、编译内核(工作站上编译)

    5、更换内核和加载JFFS2文件系统驱动(在目标板上操作)

    将新编译出来的zImage拷贝到SD卡启动盘中进行内核升级。如何对mini6410进行内核烧写请自行解决。更换完内核后,加载JFFS2文件系统,如下图所示。

     

    JFFS2镜像jffs2.bin在本节没有进行挂载,会在后续MTD子系统系列章节中介绍,挂载的命令为“mount -t jffs2 /dev/sdb1 /mnt/app_ext/”。

    三、实操cramfs文件系统

    在工作站(unbutn)构建cramfs镜像,需要cramfs工具,该工具需要在工作站上安装。

    1、工作站安装cramfs工具

    先安装需要的ruby和zlib1g-dev库,再下载Cramfs源码解压进行编译安装。Cramfs源码可以在sourceforge上下载

     

    进行编译,编译通过后会在当前目录下生成cramfsck和mkcramfs两个可执行文件。

     

    将生成的可执行二进制文件拷贝到sbin目录下,可以在任何目录下调用。

     

     

    2、制作cramfs文件系统

    这里依然使用目标板默认的根文件系统目录作为模板,这个模板有大小限制,指定cramfs.image文件为目标文件。将生成的目标文件cramfs.image拷贝到上一节制作的ext3类型的分区中,即sda3分区。

     

    3、配置目标板内核支持cramfs文件系统

    将cramfs文件系统驱动编译为模块,可以动态加载。

     

    4、编译内核

     

    5、加载cramfs文件系统驱动并挂载

    使用第三章“「嵌入式文件系统(三)」ext3和ext4”教授的ftp方法,将cramfs.ko文件从工作站传输到目标板上。

    将TF卡媒介插入目标板上,首先挂载sda3分区到/mnt/ext3_test挂载点下,因为cramfs文件系统在这个分区存放。最后使用mount挂载ext3_test文件夹下的cramfs文件系统到/mnt/cramfs挂载点下,进入/mnt/cramfs文件夹发现根文件系统都解压了出来。

    “loop是mount用来加载loop设备的选项,不是文件系统类型。loop:用来把一个文件当成硬盘分区挂接上系统”。

     

    自此JFFS2和cramfs类型文件系统实操结束。JFFS2和cramfs类型文件系统生成的目标文件可以通过下载器烧写到flash中,嵌入式系统启动时挂载上。

    参考链接https://author.baidu.com/home?from=bjh_article&app_id=1717766052434706

  • 相关阅读:
    java.lang.NoClassDefFoundError: org/jaxen/JaxenException解决方法
    SVN被锁定的几种解决方法
    URL传参时中文参数乱码的解决方法
    Log4j.properties配置详解
    如何在Oracle中向Collection类型的变量中逐条插入数据
    oracle中比较两表表结构差异和数据差异的方法
    报错,但不影响运行ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
    JavaScript访问修改CSS样式表
    有关缓存
    emacs使用记录
  • 原文地址:https://www.cnblogs.com/yuanqiangfei/p/15847546.html
Copyright © 2020-2023  润新知