zoukankan      html  css  js  c++  java
  • openWRT相关文件系统简介【转】

    转自:https://blog.csdn.net/xiaoqiang2080/article/details/66971542

      openWRT作为嵌入式系统,使用到了多种文件系统来实现特定的功能。其常使用的文件系统有SquashFS、JFFS2和overlayfs等,每个文件系统都具有各自的特性,openWRT也正是据此来使用不同文件系统来实现各种功能需求。下面将对openWRT常用到的文件系统进行简单的介绍,并根据具体产品所使用的文件系统与空间布局关联性出发,进一步分析各种文件系统在openWRT中所扮演的角色。

    1、openWRT主要使用的文件系统

             以下逐一简单介绍这些文件系统的主要特性,部分特性也是openWRT选择的依据。

    (1)SquahFS文件系统简介

        SquashFS 是基于GPL协议开发的只读压缩文件系统。 早期版本使用gzip算法进行压缩,由于改进后的LZMA算法具有高压缩比、解压缩时仅需少量内存、解压和压缩速度快以及支持多线程等特点,使得该算法非常适合于嵌入式系统中。openWRT中使用了LZMA算法的SquashFS文件系统,其具有如下特点:

    1)  占用更少的空间(据统计较之JFFS2文件系统可以节省20~30%的空间);

    2)  可以支持FailSafe功能,即系统出现问题可以恢复出厂配置;

    3)  只读文件系统;

    4)空间浪费,当该文件系统中的某一文件被修改时,该文件会被拷贝到另一个分区(如JFFS2)中;

    该文件系统在openWRT中主要是用于存储一些基础文件,如busybox、dropbear和iptables等,作为openWRT的只读部分以支持FailSafe模式。

    (2)JFFS2简介

    JFFS2是一种可写的日志结构文件系统,其可以使用LZMA算法进行压缩。具备如下的特点:

    1)  可写,是日志结构类型文件系统,且具有损耗平衡;

    2)  可压缩所以程序使用更少空间;

    3)  读是以页(页大小512字节)为单位进行,而擦写是以擦写块((NOR:64~128KB, NAND:8~32KB))为单位操作。该系统维护了几个链表来管理擦写块,根据擦写块上的内容,擦写块可能会在不同的链表上。

    该文件系统在openWRT中主要是用于存储可以更改的配置文件,以及安装的软件包等,作为openWRT的可写部分提供了更新升级软件不需要整体刷机的功能。

    (3)overlayfs简介

    overlayfs文件系统是由Miklos Szeredi所开发,主要目的是虚拟化系统建立在共同的基础文件系统上。其主要的特性:叠合两种不同的文件系统,一个可写,另一个只读。这样的特性对用户是透明的,可使得系统能支持恢复出厂配置等功能。目前该文件系统暂未合入到linux内核源码中,下文将详细介绍该系统的原理及相关特性。该文件系统在openWRT中主要是提供一种粘合机制,这样提高了openWRT所能采用不同文件系统实现不同功能的灵活性。
    2、openWRT文件系统与Flash布局

    由于嵌入式系统的特性限制,以及相关功能的需求导致了openWRT如果使用单一的文件系统将难以实现。所以目前openWRT根据所要实现的功能选择不同的文件系统进行组合实现,常用的文件系统以SquahFS、JFFS2和overlayfs等为主。

    在大多数路由系统中使用Flash来存储程序和数据,根据Flash和处理芯片的连接方式可以分为两种:Raw Flash,即Flash和处理芯片直接连接;FTL Flash,通过在Flash和处理芯片之间加入附加控制芯片(Flash Translation Layer)进行连接。openWRT目前采用Raw Flash方式。

    文件系统和Flash的布局具有较强的关联性,以下将根据某款路由产品所使用的文件系统及Flash的布局进行介绍。系统启动之后可以根据串口输出的打印和文件系统/proc综合分析得出具体产品的Flash布局和文件系统的使用情况。如下是一次正常启动的输出:

     

    [0.680000] Creating 5MTD partitions on "spi0.0":

    [0.690000]0x000000000000-0x000000020000 :  "u-boot"

    [0.690000]0x000000020000-0x00000011da50 :  "kernel"

    [0.710000]0x00000011da50-0x0000007f0000 :  "rootfs"

    [0.740000]0x0000003d0000-0x0000007f0000 :  "rootfs_data"

    [0.750000]0x0000007f0000-0x000000800000 :  "art"

    [0.760000]0x000000020000-0x0000007f0000 :  "firmware"

             根据上述的输出,以及在串口中使用命令“cat /proc/mtd”和“mount”可以综合得出表1。

    Flash Layout

    Layer0
        

    u-boot (mtd0)
        

    firmware 8000KB(mtd5)
        

    art (mtd4)

    Layer1
        

     
        

    kernel (mtd1)
        

    rootfs 6985KB(mtd2)
        

     

    mountpoint
        

     
        

     
        

    /
        

     

    filesystem
        

     
        

     
        

    overlayfs
        

     

    Layer2
        

     
        

     
        

     
        

    rootfs_data (mtd3)
        

     

    Size in KB
        

    128KB
        

    1014KB
        

    2561KB
        

    4424KB
        

    64KB

    mountpoint
        

     
        

     
        

    /rom
        

    /overlayfs
        

     

    filesystem
        

     
        

     
        

    SquashFS
        

    JFFS2
        

     














                                          表1  Flash布局和文件系统

     

             OpenWRT使用MTD(Memory TechnologyDevice)来标记Flash的每个分区,这样可以方便的使用名称来操作相关分区。从表中可以看出各个分区所使用的文件系统及其挂载点,如果相关项为空说明没有使用相关文件系统及挂载使用。每个分区所包含的主要内容有:

    1)u-boot(mtd0),该分区存放引导程序bootloader。

    2)kernel(mtd1),该分区存放Linux内核。

    3)rootfs(mtd2),该分区分成两部分,一部分以文件系统SquashFS的形式挂载到/rom为只读部分,该部分包括一些基础的文件,如busybox、dropbear和iptables等。也包含一些默认的配置文件可以用以openWRT的FailSafe模式。另一部分为mtd3。

    4)rootfs_data (mtd3),该分区使用文件系统JFFS2成为可写部分,包含有可以更改的配置文件,以及安装的软件包等。

    5)art (mtd4),该分区用于存储wifi的校准数据(art:Atheros Radio Test)。

    6)firmware (mtd5),该分区包含分区mtd1和mtd2。

    其中分区/rom和/overlayfs是通过overlayfs文件系统挂载到目录“/”下给用户操作,底层的处理对用户是完全透明的。在系统升级过程中常使用命令“mtd –r write xxx.bin firmware”来完成,需要更新整个分区的信息。否则如果使用命令“mtd –r write xxx.bin kernel”来升级的话,需要手动调整后面的文件系统相关信息,这可能会导致很多信息不一致的情况出现。
    ————————————————
    版权声明:本文为CSDN博主「mac-2080」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/xiaoqiang2080/article/details/66971542

  • 相关阅读:
    7.21
    7.14
    7.7
    大学生失物招领平台使用体验及改进意见
    cdh集群迁移 ip更改
    klearn.preprocessing.PolynomialFeatures学习
    二元线性回归
    python学习之numpy.ewaxis
    sklearn.linear_model.LinearRegresion学习
    一元线性回归-梯度下降法-房价预测
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/13408099.html
Copyright © 2011-2022 走看看