“MTD overview”的版本间的差异

来自百问网嵌入式Linux wiki
第9行: 第9行:
  
 
==System overview==
 
==System overview==
===For {{EcosystemRelease | revision=1.1.0 | range=and after}}===
+
 
 
[[File:MTD v1.1.0.png|center]]
 
[[File:MTD v1.1.0.png|center]]
  
 
<div class="mw-collapsible mw-collapsed">
 
<div class="mw-collapsible mw-collapsed">
  
===For {{EcosystemRelease | revision=1.0.0}}===
+
 
 
<div class="mw-collapsible-content">
 
<div class="mw-collapsible-content">
 
[[File:mtd.png|center]]
 
[[File:mtd.png|center]]
第26行: 第26行:
  
 
* '''mtdchar''' (内核空间)
 
* '''mtdchar''' (内核空间)
Usually referred to as /dev/mtdX. For MTD character devices, please refer to the MTD overview documentation <ref>[http://www.linux-mtd.infradead.org/doc/general.html#L_overview MTD overview]</ref>.
+
通常称为/ dev / mtdX。 对于MTD字符设备,请参考MTD概述文档 <ref>[http://www.linux-mtd.infradead.org/doc/general.html#L_overview MTD overview]</ref>.
  
 
* '''mtdblock''' (内核空间)
 
* '''mtdblock''' (内核空间)
Usually referred to as /dev/mtdblockX. Do not use mtdblock unless you know exactly what you are doing. For MTD block devices, please refer to the MTD block documentation <ref>[http://www.linux-mtd.infradead.org/doc/general.html#L_mtdblock MTD block]</ref>.
+
通常称为/ dev / mtdblockX。 除非您确切知道自己在做什么,否则不要使用mtdblock。 对于MTD块设备,请参考MTD块文档<ref>[http://www.linux-mtd.infradead.org/doc/general.html#L_mtdblock MTD block]</ref>.
  
 
* '''JFFS2''' (内核空间)
 
* '''JFFS2''' (内核空间)
Journally Flash File System. Please refer to the MTD JFFS2 documentation <ref>[http://www.linux-mtd.infradead.org/doc/jffs2.html MTD JFFS2]</ref>.
+
日记Flash文件系统。 请参考MTD JFFS2文档 <ref>[http://www.linux-mtd.infradead.org/doc/jffs2.html MTD JFFS2]</ref>.
  
 
* '''UBI''' (内核空间)
 
* '''UBI''' (内核空间)
Unsorted Block Images. Please refer to the MTD UBI documentation <ref>[http://www.linux-mtd.infradead.org/doc/ubi.html MTD UBI]</ref>.
+
未分类的块图像。 请参考MTD UBI文档 <ref>[http://www.linux-mtd.infradead.org/doc/ubi.html MTD UBI]</ref>.
  
 
* '''UBIFS''' (内核空间)
 
* '''UBIFS''' (内核空间)
UBI File System. Please refer to the MTD UBIFS documentation <ref>[http://www.linux-mtd.infradead.org/doc/ubifs.html MTD UBIFS]</ref>.
+
UBI文件系统。 请参考MTD UBIFS文档<ref>[http://www.linux-mtd.infradead.org/doc/ubifs.html MTD UBIFS]</ref>.
  
 
* '''MTD core''' (内核空间)
 
* '''MTD core''' (内核空间)
The MTD core provides an abstraction layer for raw Flash memories.
+
MTD内核为原始闪存提供了一个抽象层。
  
 
* '''Raw NAND subsystem''' (内核空间)
 
* '''Raw NAND subsystem''' (内核空间)
The Raw NAND protocol is used in the MTD subsystem for interfacing NAND Flash memories.
+
MTD子系统中使用Raw NAND协议来连接NAND闪存。
  
 
* '''SPI-MEM subsystem''' (内核空间)
 
* '''SPI-MEM subsystem''' (内核空间)
The SPI-MEM protocol is used in the MTD subsystem for interfacing all kinds of SPI memories (NORs, NANDs)
+
SPI-MEM协议在MTD子系统中用于连接各种SPI存储器(NOR,NAND)
  
 
* '''SPI-NAND subsystem''' (内核空间)
 
* '''SPI-NAND subsystem''' (内核空间)
The SPI-NAND protocol is used in the MTD subsystem for interfacing SPI NAND Flash memories.
+
SPI-NAND协议在MTD子系统中用于连接SPI NAND闪存。
  
 
* '''SPI-NOR subsystem''' (内核空间)
 
* '''SPI-NOR subsystem''' (内核空间)
The SPI-NOR protocol is used in the MTD subsystem for interfacing SPI NOR Flash memories.
+
MTD子系统中使用SPI-NOR协议来连接SPI NOR闪存。
  
 
* '''FMC driver''' (内核空间) / '''FMC''' (硬件)  
 
* '''FMC driver''' (内核空间) / '''FMC''' (硬件)  
Please refer to the [[FMC internal peripheral]].
+
请参阅[[FMC internal peripheral]].
  
 
* '''QUADSPI driver''' (Kernel space) / '''QUADSPI''' (Hardware)
 
* '''QUADSPI driver''' (Kernel space) / '''QUADSPI''' (Hardware)
Please refer to the [[QUADSPI internal peripheral]].
+
请参阅[[QUADSPI internal peripheral]].
  
 
===API description===
 
===API description===
For the Linux MTD API description, please refer to the MTD API documentation <ref>[http://www.linux-mtd.infradead.org/doc/general.html#L_mtd_api MTD API]</ref>.
+
有关Linux MTD API的描述,请参阅MTD API文档 <ref>[http://www.linux-mtd.infradead.org/doc/general.html#L_mtd_api MTD API]</ref>.
  
 
==Configuration ==
 
==Configuration ==

2020年11月11日 (三) 11:33的版本

SUMMARY
MTD(内存技术设备)子系统为原始闪存提供抽象层。 在使用不同的Flash类型和技术(例如,Flash)时,可以使用相同的API。 SLC NAND,SPI NOR,...

Framework purpose

本文的目的是介绍MTD Linux子系统:

  • 一般信息
  • 主要组成部分/利益相关者
  • 如何使用MTD API

System overview

MTD v1.1.0.png

Component description

  • 执行“文件I / O”的用户空间应用程序需要像对待磁盘一样查看闪存,而希望完成“原始I / O”的程序就像访问磁盘一样访问该存储器。 是一个角色设备。
  • VFS (内核空间)

虚拟文件系统。 请参考VFS文档 [1].

  • mtdchar (内核空间)

通常称为/ dev / mtdX。 对于MTD字符设备,请参考MTD概述文档 [2].

  • mtdblock (内核空间)

通常称为/ dev / mtdblockX。 除非您确切知道自己在做什么,否则不要使用mtdblock。 对于MTD块设备,请参考MTD块文档[3].

  • JFFS2 (内核空间)

日记Flash文件系统。 请参考MTD JFFS2文档 [4].

  • UBI (内核空间)

未分类的块图像。 请参考MTD UBI文档 [5].

  • UBIFS (内核空间)

UBI文件系统。 请参考MTD UBIFS文档[6].

  • MTD core (内核空间)

MTD内核为原始闪存提供了一个抽象层。

  • Raw NAND subsystem (内核空间)

MTD子系统中使用Raw NAND协议来连接NAND闪存。

  • SPI-MEM subsystem (内核空间)

SPI-MEM协议在MTD子系统中用于连接各种SPI存储器(NOR,NAND)

  • SPI-NAND subsystem (内核空间)

SPI-NAND协议在MTD子系统中用于连接SPI NAND闪存。

  • SPI-NOR subsystem (内核空间)

MTD子系统中使用SPI-NOR协议来连接SPI NOR闪存。

  • FMC driver (内核空间) / FMC (硬件)

请参阅FMC internal peripheral.

  • QUADSPI driver (Kernel space) / QUADSPI (Hardware)

请参阅QUADSPI internal peripheral.

API description

有关Linux MTD API的描述,请参阅MTD API文档 [7].

Configuration

Kernel configuration

MTD is activated by default in ST deliveries. Nevertheless, if a specific configuration is needed, this section indicates how MTD can be activated/deactivated in the kernel.

Activate MTD in the kernel configuration with the Linux Menuconfig tool: Menuconfig or how to configure kernel.

SLC NAND Flash memory

[*] Device Drivers --->
    <*> Memory Technology Device (MTD) support --->
        <*> RAW/Parallel NAND Device Support --->
            <*> Support for NAND controller on STM32MP Socs.

SPI NOR/NAND Flash memory

[*] Device Drivers --->
    <*> Memory Technology Device (MTD) support --->
        Self-contained MTD device drivers --->
            <*> Support most SPI Flash chips (AT26DF, M25P, W25X, ...)      
        <*> SPI NAND device Support
        <*> SPI-NOR device support
    <*> SPI support --->
        -*- SPI memory extension
        <*> STMicroelectronics STM32 QUAD SPI controller

Device tree configuration

The DT configuration can be done thanks to STM32CubeMX.

NAND Flash memory

Please refer to the FMC device tree configuration.

SPI NOR/NAND Flash memory

Please refer to the QUADSPI device tree configuration.

How to use the framework

A file system, which handles read/write/erase operations, can be used over the MTD Framework. Please refer to the UBIFS support through MTD.

You can also interact with the MTD subsystem using the MTD utilities. The MTD utilities[8] are a set of tools that can be used to perform operations on Flash memories through the MTD character interface.

The most common utilities used are:

  • mtdinfo
  • flash_erase
  • flashcp
  • nandwrite
  • nanddump
 root:~# mtdinfo -a
 Count of MTD devices:           9
 Present MTD devices:            mtd0, mtd1, mtd2, mtd3, mtd4, mtd5, mtd6, mtd7, mtd8
 Sysfs interface supported:      yes
mtd0 Name: fsbl Type: nand Eraseblock size: 262144 bytes, 256.0 KiB Amount of eraseblocks: 8 (2097152 bytes, 2.0 MiB) Minimum input/output unit size: 4096 bytes Sub-page size: 4096 bytes OOB size: 224 bytes Character device major/minor: 90:0 Bad blocks are allowed: true Device is writable: true
mtd1 Name: ssbl Type: nand Eraseblock size: 262144 bytes, 256.0 KiB Amount of eraseblocks: 8 (2097152 bytes, 2.0 MiB) Minimum input/output unit size: 4096 bytes Sub-page size: 4096 bytes OOB size: 224 bytes Character device major/minor: 90:2 Bad blocks are allowed: true Device is writable: true
mtd2 Name: UBI Type: nand Eraseblock size: 262144 bytes, 256.0 KiB Amount of eraseblocks: 4078 (1069023232 bytes, 1019.5 MiB) Minimum input/output unit size: 4096 bytes Sub-page size: 4096 bytes OOB size: 224 bytes Character device major/minor: 90:4 Bad blocks are allowed: true Device is writable: true
mtd3 Name: fsbl1 Type: nor Eraseblock size: 65536 bytes, 64.0 KiB Amount of eraseblocks: 4 (262144 bytes, 256.0 KiB) Minimum input/output unit size: 1 byte Sub-page size: 1 byte Character device major/minor: 90:6 Bad blocks are allowed: false Device is writable: true
mtd4 Name: fsbl2 Type: nor Eraseblock size: 65536 bytes, 64.0 KiB Amount of eraseblocks: 4 (262144 bytes, 256.0 KiB) Minimum input/output unit size: 1 byte Sub-page size: 1 byte Character device major/minor: 90:8 Bad blocks are allowed: false Device is writable: true
mtd5 Name: ssbl Type: nor Eraseblock size: 65536 bytes, 64.0 KiB Amount of eraseblocks: 32 (2097152 bytes, 2.0 MiB) Minimum input/output unit size: 1 byte Sub-page size: 1 byte Character device major/minor: 90:10 Bad blocks are allowed: false Device is writable: true
mtd6 Name: logo Type: nor Eraseblock size: 65536 bytes, 64.0 KiB Amount of eraseblocks: 4 (262144 bytes, 256.0 KiB) Minimum input/output unit size: 1 byte Sub-page size: 1 byte Character device major/minor: 90:12 Bad blocks are allowed: false Device is writable: true
mtd7 Name: nor_user Type: nor Eraseblock size: 65536 bytes, 64.0 KiB Amount of eraseblocks: 980 (64225280 bytes, 61.2 MiB) Minimum input/output unit size: 1 byte Sub-page size: 1 byte Character device major/minor: 90:14 Bad blocks are allowed: false Device is writable: true
mtd8 Name: 58003000.qspi Type: nor Eraseblock size: 65536 bytes, 64.0 KiB Amount of eraseblocks: 1024 (67108864 bytes, 64.0 MiB) Minimum input/output unit size: 1 byte Sub-page size: 1 byte Character device major/minor: 90:16 Bad blocks are allowed: false Device is writable: true

How to trace and debug the framework

How to monitor

The sysfs interface provides detail information on each mtd device.

 root:~# cat /sys/class/mtd/mtd0/name
 fsbl
 root:~# cat /sys/class/mtd/mtd0/type
 nand
 root:~# cat /sys/class/mtd/mtd0/erasesize
 262144
 root:~# cat /sys/class/mtd/mtd0/ecc_strength
 8
 root:~# cat /sys/class/mtd/mtd0/bad_blocks
 0
 root:~# cat /sys/class/mtd/mtd0/ecc_failures
 0

How to trace

A detail dynamic trace is available here How to use the kernel dynamic debug.

 root:~# echo "file drivers/mtd/* +p" > /sys/kernel/debug/dynamic_debug/control

Source code location

The MTD framework is drivers/mtd | |}} here .

To go further

Please refer to the MTD FAQs documentation [9].

References

Please refer to the following links for full description:


<securetransclude src="ProtectedTemplate:ArticleBasedOnModel" params="Framework overview article model"></securetransclude>