博客
关于我
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/

    你可能感兴趣的文章
    Liferay7 BPM门户开发之21: 理解消息总线(Message Bus)体系
    查看>>
    Light OJ 1005
    查看>>
    LightningChart 图表控件图库
    查看>>
    Lightning接口详解-ChatGPT4o作答
    查看>>
    LightOJ - 1074 Extended Traffic (SPFA+负环)
    查看>>
    LightOJ - 1077 How Many Points
    查看>>
    LightOJ - 1151概率dp+高斯消元
    查看>>
    LightOJ 1284 Lights inside 3D Grid(概率)
    查看>>
    LightOJ 1336 Sigma Function
    查看>>
    LightOJ1214 - Large Division(高精度取模 + 模板)
    查看>>
    Lighttpd
    查看>>
    Likeshop 单商户商城系统 任意文件上传漏洞复现(CVE-2024-0352)
    查看>>
    line-hieght与vertical-align的区别与联系
    查看>>
    Lineage逻辑回归分类算法
    查看>>
    Linear Tape File System (LTFS) 开源项目教程
    查看>>
    LinearLayout中的重要属性layout_weight
    查看>>
    linearlayout和RelativeLayot的区别
    查看>>
    Linear线性层
    查看>>
    linglong扫描系统 JWT密钥硬编码 登录绕过漏洞复现
    查看>>
    Link&Compile
    查看>>