博客
关于我
linux kernel系列四:嵌入式系统中的文件系统以及MTD
阅读量:792 次
发布时间:2023-02-01

本文共 1845 字,大约阅读时间需要 6 分钟。

File System与MTD技术

一、File System(简称FS)

本节将介绍File System和MTD技术。

熟知的File System(FS)有ext2ext3ext4等,所有这些文件系统都是针对磁盘设备设计的。而嵌入式系统(ES)中,存储设备通常是Flash。由于Flash的特殊性,传统的磁盘文件系统对其运行效率较低,需要优化。

Flash存储的特点

  • 块大小(Block size)
    Flash存储按块(Block)进行划分,每个块的大小(BLS)通常为几十KB(对比磁盘的一个簇只有512字节)。
    问题
    • 大块的擦除操作需要耗时。
    • 操作时必须擦除整个块,即使只改动一个字节。
    • Flash块的擦写次数有限,一次操作重复使用同一块可能导致块损坏。
  • ####针对Flash设计的File System针对上述问题,设计出Journaling Flash File System(JFFS2,第二版)。其核心思想是损耗均衡(Wear Leveling),避免对同一块进行多次操作。当Flash写入数据时,JFFS2会在不同块之间轮流操作,延长Flash使用寿命。

    ####其他伪文件系统除了JFFS2,还有procsysfs等伪文件系统,常用于嵌入式系统中。例如:

    • proc:模拟文件系统,提供系统信息。
    • sysfs:提供更多设备信息,便于网络管理。
    • ramfstmpfsrootfs等基于内存的文件系统,常用于嵌入式系统的根文件系统。

    ####驱动与存储设备嵌入式系统中常用的文件存储设备包括ramdiskramfstmpfs等。这些文件系统的区别在于存储介质的特点:

  • Ram disk:基于内存创建的虚拟块设备,支持普通文件系统操作,但效率较低。
  • RamFS:基于内存的文件系统,性能优于ramdisk,但易养比较高。
  • TmpFS:类似于虚拟文件系统,支持指定内存大小,内核支持时效性较好。
  • ####如何创建虚拟块设备

  • 准备文件
    使用命令创建一个全0的文件:
    dd if=/dev/zero of=path bs=byte-size count=blocks

    例如:

    dd if=/dev/zero of=/tmp/fstest bs=1024 count=512
  • /file>

    1. 创建文件系统

      在文件中创建文件系统:

      mkfs.ext2 /tmp/fstest
    2. 挂载为块设备

      使用mount命令将文件当作块设备挂载:

      mount -t ext2 /tmp/fstest /mnt/point
    3. MTD(Memory Technology Device)技术

      MTD(Memory Technology Device,内存技术设备)是Linux内核中用于处理Flash存储的 subsystem。其目标是为多种Flash存储技术提供通用API,简化了为新硬件提供驱动的流程。

      MTD的主要特点是支持三种基础操作:读、写和擦除,并通过wear leveling算法(损耗均衡)延长Flash寿命。

      ####MTD设备与常见存储设备的区别

    4. SD/MMC卡、CF卡、USB Flash

      这些设备内部已有Flash Translation Layer(FTL),负责处理擦除和wear leveling,因此直接作为块设备使用,不再是MTD设备。

    5. NOR和NAND Flash

      NOR Flash用于代码存储,支持随机访问;NAND Flash用于数据存储,支持顺序访问。两者结构和接口有较大不同,NOR Flash更像内存。

    6. ####如何配置MTD支持

    7. 内核配置

      在内核配置中启用MTD支持,例如:

      make menuconfig

      找到并打开相关选项:

      DeviceDrivers -> MTD/oftree/unsupportedrians
    8. 编译固件

      根据硬件类型选择相应的MTD驱动,例如CFI接口的NORFlash。

    9. 分区管理

      可选基于RedBoot的RedBoot Partition Table,或者通过内核启动参数配置分区。常用方法是使用mt_EXT2命令在启动时挂载Flash分区。

    10. ####获取更多信息如需更详细的技术资料,可参考以下资源:

      希望这篇文章能帮助开发者更好地理解File System与MTD技术的实现!

    转载地址:http://ncwfk.baihongyu.com/

    你可能感兴趣的文章
    LinkedList(2):双向链表的实现
    查看>>
    LinkedList(3):并发异常
    查看>>
    LinkedList(4):多线程LinkedList 不安全情况
    查看>>
    linkin大话设计模式--适配器模式
    查看>>
    LinkSage:基于 GNN 的 Pinterest理解
    查看>>
    LinkWeChat,唯一以开源为核心的SCRM
    查看>>
    link和@import的区别
    查看>>
    link和Import区别
    查看>>
    link标签中的integrity和crossorigin字段---web前端工作笔记015
    查看>>
    link标签的rel属性
    查看>>
    Linly-Talker智能数字人实时对话系统如何部署体验
    查看>>
    Linq DataTable Group By 分组显示人员明细
    查看>>
    LINQ to DB 开源项目教程
    查看>>
    Linq to Entities不识别方法
    查看>>
    linq to entity常用操作
    查看>>
    linq to js使用汇总
    查看>>
    Linq to object 技巧、用法集锦
    查看>>
    LINQ to Objects---立即执行的Enumerable类方法
    查看>>
    linq to sql 三层架构中使用CRUD操作
    查看>>
    LINQ to SQL系列三 使用DeferredLoadingEnabled,DataLoadOption指定加载选项
    查看>>