• 文件系统深入


    问题一:根文件系统与文件系统的区别(以EXT4文件系统为例)

    扩展1:我们使用的设备在 rcS---S25ambrwfs脚本中完成的操作:
    1. 为 /dev/mmcblk0px 建立软链接:比如 data对应于mmcblk0p15; 建立其软链接:   /dev/data  注意,建立的软链接还在dev目录下

    2. 在根文件系统中建立6个目录,然后用mount命令将部分上述/dev/mmcblkpxx设备挂载到各个目录下,比如将/dev/mtd_data  挂载到 /data 目录下,

    3. 尤其需要注意的是,每个节点的挂载都是有一定操作顺序的:
        1)首先在根文件系统中新建对应的目录
        2)检查/dev/下的节点,用fsck.ext4 命令-p检查,
        3)如果检查不通过,则使用 fsck.ext4 -fy 对/dev/mmcblkpxx进行修复,注意这个修复过程是需要一定时间的
        4)使用mount命令将dev下的节点 挂载到1)中新建的目录

    注意上述的挂载可以用mount命令查看到,mount命令可以显示当前挂载的各个文件系统

    扩展2:上述的S25ambrwfs中的操作实际是将/dev下的mmcblkpxx 节点挂载到跟文件系统下,而且通过rcS可以得知,在rcS阶段,跟文件系统就已经挂载:

    ::sysinit:/bin/mount -a 2>/dev/null  (该句是rcS中的一个进程)说明rcS阶段运行的时候已经有跟文件系统了,

    扩展3: rcS再往上追查,会发现在 内核的 init/main.c中的 kernel_init 接口里面就已经是用到根文件系统了(该函数会遍历查找哪个目录下有 init命令,找到后即运行)

    扩展3: 实际上跟文件系统的挂载在 内核加载的末尾的阶段,会挂载根文件系统,然后访问第一个用户进程 init

    1. 内核init的末尾,会挂载根文件系统,然后访问文件系统中的第一个用户进程 init:
    2. start_kernel --- rest_init --- kernel_init --- kernel_init_freeable --prepare_namespace

    扩展4:根文件系统的制作:多个跟文件系统制作的手册都不约而同的说到了用busybox制作根文件系统(信盈达,海思)。

    1) 海思手册对于busybox在文件系统的制作中起的作用为:busybox配置编译安装后,需要将编译生成的文件拷贝至rootfs的特定路径下,但实际产品中一般是仅将busybox(bin)拷贝至设备的rootfs/bin目录下,该目录下存在很多软链接,

    2) 信盈达手册中的描述:

    扩展5:海思手册中对不同文件系统的介绍:

    常用的文件系统包括: cramfs, JFFS2, ysffs2,  ubifs, ext4  

    1. carmfs文件系统的优缺点:

    1)优点:将文件以压缩形式存储,需要用时进行解压,可以节省flash空间。

    2)缺点:由于上述的压缩,所以里面的程序不能直接运行,而且使用时需解压数据,效率会降低,此外,该文件系统是只读的。

    3)要想使用cramfs, 需要在内核配置中打开 如下选项:

          < >   Compressed ROM file system support (cramfs)    

    4) mkfs.cramfs工具是用来制作cramfs文件系统镜像的,具体使用为:

    mkfs.cramfs  ./rootfs  .cramfs-root.img  。其中cramfs-root.img即生成的镜像文件。

    5) cramfs的关键词是 压缩 和 只读,容量上限为256MB。

    2. JFFS2文件系统:

    1)之所以有2的后缀,是因为这种文件系统是从JFFS改进而来的。

    2)JFFS2的关键词为: 压缩但可读写       日志结构化的可读写的文件系统

    3) 优点:压缩,同时可读写

    4)缺点: 挂载时需要扫描整个文件系统,所以如果文件系统比较大,有可能耗时较长

                     文件系统接近满的时候,运行速度会迅速降低

    5)内核配置: < >   Journalling Flash File System v2 (JFFS2) support  

    6) 制作方法: mkfs.jffs2  -d  ./rootfs -l -e  0x20000  -o  rootfs.jfff2

    -d  文件系统源目录的路径

    -l  little-end 小端格式

    -e flash 块大小

    3. yaffs2 文件系统:

    1) 专门为nand flash设计的一种文件系统,(包括SPI nand flash 以及 并行nand)

    2) 关键词: 日志结构文件系统   提供损耗平衡和掉电保护,有效避免因掉电引起的一些列问题

    3) 优点:专门针对nand,软件结构得到对应优化,速度块

                  文件的组织信息放在专门的硬件(spare area)中,启动时仅扫描该硬件即可,启动快

                  采用多策略的垃圾回收算法,从而达到损耗平衡

    4)缺点:不是以压缩的形式存储内容,即包含的内容相同时,yaffs2比jffs2大。

    5) 制作: mkfs.yaffs2  ./rootfs  image  pagesize  ecctype 

            其中的 pagesize 即NAND器件的页大小

            ecctype是NAND器件的ecc类型。

    -----------------------------------------------------------------------------

    4. UBIFS文件系统:

    1)UBI(unsorted block Imgae)是一种新型flash文件系统。主要针对flash的特有属性,通过软件的方式实现日志管理,坏块管理,损益均衡等技术。

    2)内核配置:

            (1)<*>   Enable UBI - Unsorted block images  --->   使能UBI设备驱动

            (2)< >   UFS file system support (read only)    使能UBIFS文件系统。

            (3)MTD_UBI_WL_THRESHOLD: UBI wear-leveling threshold: UBI 系统记录每个擦除块发生擦书操作的次数。此配置表示所有擦除操作次数中,最小值和最大值之间允许的最大间隔,此值默认为4096,对于寿命比较段的MLC器件,应配置的小一点(256之类)

            (4) < >   MTD devices emulation driver (gluebi): 模拟MTD驱动,选中此配置时,当创建一个卷时,UBI将同事模拟一个MTD设备,该功能提供了一个接口,供其他文件系统使用UBI。

    ------------------------------------------------------------------------------

    5. Squashfs文件系统:基于linux内核使用的压缩只读文件系统,压缩率高。

    1) 关键词: 基于linux内核    压缩率高    只读文件系统

    2) 特点:

            (1)数据(data)节点(inode)目录(directory)均被压缩

            (2)保存了全部的32位UID/GIDS和文件的创建时间

            (3)最大支持4G文件系统

            (4)检测并删除重复文件。

    3) 制作squashfs内核镜像:

            (1)<*>   SquashFS 4.0 - Squashed file system support 打开配置项

    4)制作squashfs镜像: mksquashfs  ./rootfs  squa.img -b 64K -comp xz 

    -b 64K:  指定squashfs的块大小为64k(取决于flash块大小)

    -comp xz : 指定文件系统的压缩方式为xz, 

    扩展6:信盈达手册中对根文件系统的制作的描述:

    1. 根文件系统中目录的大致作用:

    目录内容
    bin        不太重要的指令,比如more;以及busybox
    sbin       系统管理员的命令,比较关键,比如insmod  ifconfig
    dev设备节点
    etc系统配置 环境变量profile 启动脚本(init.d)
    libc库文件,内核ko
    home
    rootroot管理员用户的主目录
    usr/bin
    var日志文件
    proc与内核交互的虚拟文件系统(内存中)
    sys与内核交互的虚拟文件系统(内存中)
    mnt文件系统挂载点 比如sd卡的挂载
    tmp临时性文件之类

    2. etc下文件的重要作用:

    1)inittab: 内核的start_kernel中会挂载根文件系统,然后执行init命令,该命令会解析inittab;其中inittab中每一行为一个进程,一般会调用rcS,继而调用init.d中的脚本

    2)profile: 其中的PATH即bin文件的默认路径, LD_LIBRARY_PATH 为so的默认路径

    3)fstab:

            (1)应用程序仅读取该文件,不修改该文件。

            (2)该文件的每一行用于描述一个文件系统的信息,每条的不同字段用 tab分割。

            (3)注释以#开头

            (4)mount  unmount  fsck等命令执行时会 顺序 访问该文件,

    3. busybox是一个可裁剪的,集成了100多个linux命令的软件bin,

    遍历后发现没有多大的参考意义。

  • 相关阅读:
    sql基础语法
    Python文件操作及光标移动介绍
    CANFD数据记录仪在汽车电子上的具体应用
    js基础API初学
    Mybatis 动态SQL – 使用choose标签动态生成条件语句
    “我们把最扎心的话,说给了自己最亲近的人” 何解?| IDCF
    JavaScript数据类型学习脑图
    系列六、多线程集合不安全
    【Excel】使用 SpringBoot 实现 Excel 文件的导入与导出
    23种设计模式之访问者模式(Visitor Pattern)
  • 原文地址:https://blog.csdn.net/maliangwen_12138/article/details/125461393