“MTD overview”的版本间的差异
(未显示2个用户的12个中间版本) | |||
第1行: | 第1行: | ||
− | [[ | + | '''SUMMARY '''<br> |
− | + | MTD(内存技术设备)子系统为原始闪存提供抽象层。 在使用不同的Flash类型和技术(例如,Flash)时,可以使用相同的API。 SLC NAND,SPI NOR,... | |
− | + | ||
+ | == Framework purpose == | ||
+ | 本文的目的是介绍MTD Linux子系统: | ||
+ | * 一般信息 | ||
+ | * 主要组成部分/利益相关者 | ||
+ | * 如何使用MTD API | ||
+ | |||
+ | ==System overview== | ||
+ | |||
+ | [[File:MTD v1.1.0.png|center]] | ||
+ | |||
+ | <div class="mw-collapsible mw-collapsed"> | ||
+ | |||
+ | |||
+ | <div class="mw-collapsible-content"> | ||
+ | [[File:mtd.png|center]] | ||
+ | </div></div> | ||
+ | |||
+ | ===Component description=== | ||
+ | * 执行“文件I / O”的用户空间应用程序需要像对待磁盘一样查看闪存,而希望完成“原始I / O”的程序就像访问磁盘一样访问该存储器。 是一个角色设备。 | ||
+ | |||
+ | * '''VFS''' (内核空间) | ||
+ | 虚拟文件系统。 请参考VFS文档 <ref>{{CodeSource | Linux kernel | Documentation/filesystems/vfs.txt | VFS}} </ref>. | ||
+ | |||
+ | * '''mtdchar''' (内核空间) | ||
+ | 通常称为/ dev / mtdX。 对于MTD字符设备,请参考MTD概述文档 <ref>[http://www.linux-mtd.infradead.org/doc/general.html#L_overview MTD overview]</ref>. | ||
+ | |||
+ | * '''mtdblock''' (内核空间) | ||
+ | 通常称为/ dev / mtdblockX。 除非您确切知道自己在做什么,否则不要使用mtdblock。 对于MTD块设备,请参考MTD块文档<ref>[http://www.linux-mtd.infradead.org/doc/general.html#L_mtdblock MTD block]</ref>. | ||
+ | |||
+ | * '''JFFS2''' (内核空间) | ||
+ | 日记Flash文件系统。 请参考MTD JFFS2文档 <ref>[http://www.linux-mtd.infradead.org/doc/jffs2.html MTD JFFS2]</ref>. | ||
+ | |||
+ | * '''UBI''' (内核空间) | ||
+ | 未分类的块图像。 请参考MTD UBI文档 <ref>[http://www.linux-mtd.infradead.org/doc/ubi.html MTD UBI]</ref>. | ||
+ | |||
+ | * '''UBIFS''' (内核空间) | ||
+ | UBI文件系统。 请参考MTD UBIFS文档<ref>[http://www.linux-mtd.infradead.org/doc/ubifs.html MTD UBIFS]</ref>. | ||
+ | |||
+ | * '''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文档 <ref>[http://www.linux-mtd.infradead.org/doc/general.html#L_mtd_api MTD API]</ref>. | ||
+ | |||
+ | ==Configuration == | ||
+ | ===Kernel configuration=== | ||
+ | ST交货中默认激活MTD。 但是,如果需要特定的配置,则本节说明如何在内核中激活/停用MTD。 | ||
+ | |||
+ | 使用Linux Menuconfig工具在内核配置中激活MTD:[[Menuconfig or how to configure kernel]]. | ||
+ | |||
+ | ==== SLC NAND Flash memory ==== | ||
+ | <pre> | ||
+ | [*] Device Drivers ---> | ||
+ | <*> Memory Technology Device (MTD) support ---> | ||
+ | <*> RAW/Parallel NAND Device Support ---> | ||
+ | <*> Support for NAND controller on STM32MP Socs. | ||
+ | </pre> | ||
+ | |||
+ | ==== SPI NOR/NAND Flash memory ==== | ||
+ | <pre> | ||
+ | [*] 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 | ||
+ | </pre> | ||
+ | |||
+ | ===Device tree configuration=== | ||
+ | 借助[[STM32CubeMX]]可以完成DT配置。 | ||
+ | |||
+ | ==== NAND Flash memory ==== | ||
+ | 请参考 [[FMC_device_tree_configuration| FMC device tree configuration]]. | ||
+ | |||
+ | ==== SPI NOR/NAND Flash memory ==== | ||
+ | 请参考 [[QUADSPI_device_tree_configuration| QUADSPI device tree configuration]]. | ||
+ | |||
+ | == How to use the framework == | ||
+ | 可以在MTD框架上使用处理读/写/擦除操作的文件系统。 请参考[[How to support UBIFS through MTD|UBIFS support through MTD]]. | ||
+ | |||
+ | 您还可以使用MTD实用程序与MTD子系统进行交互。 | ||
+ | MTD实用程序<ref>[http://www.linux-mtd.infradead.org MTD utils]</ref> 是一组工具,可用于通过MTD字符接口对闪存执行操作。 | ||
+ | 最常用的实用程序是: | ||
+ | * 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<br> | ||
+ | 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<br> | ||
+ | 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<br> | ||
+ | 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<br> | ||
+ | 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<br> | ||
+ | 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<br> | ||
+ | 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<br> | ||
+ | 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<br> | ||
+ | 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<br> | ||
+ | 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=== | ||
+ | |||
+ | sysfs界面提供有关每个mtd设备的详细信息。 | ||
+ | |||
+ | 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=== | ||
+ | 详细动态跟踪可在此处 [[How to use the kernel dynamic debug]]. | ||
+ | |||
+ | root:~# echo "file drivers/mtd/* +p" > /sys/kernel/debug/dynamic_debug/control | ||
+ | |||
+ | ==Source code location== | ||
+ | MTD框架为{{CodeSource | Linux kernel | drivers/mtd | here}}. | ||
+ | |||
+ | ==To go further== | ||
+ | 请参阅MTD常见问题解答文档 <ref>[http://www.linux-mtd.infradead.org/faq/general.html MTD FAQs]</ref>. | ||
+ | |||
+ | ==References== | ||
+ | 有关完整说明,请参阅以下链接: | ||
+ | |||
+ | <references /> |
2020年11月11日 (三) 11:51的最新版本
SUMMARY
MTD(内存技术设备)子系统为原始闪存提供抽象层。 在使用不同的Flash类型和技术(例如,Flash)时,可以使用相同的API。 SLC NAND,SPI NOR,...
目录
Framework purpose
本文的目的是介绍MTD Linux子系统:
- 一般信息
- 主要组成部分/利益相关者
- 如何使用MTD API
System overview
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 (硬件)
- QUADSPI driver (Kernel space) / QUADSPI (Hardware)
API description
有关Linux MTD API的描述,请参阅MTD API文档 [7].
Configuration
Kernel configuration
ST交货中默认激活MTD。 但是,如果需要特定的配置,则本节说明如何在内核中激活/停用MTD。
使用Linux Menuconfig工具在内核配置中激活MTD: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
How to use the framework
可以在MTD框架上使用处理读/写/擦除操作的文件系统。 请参考UBIFS support through MTD.
您还可以使用MTD实用程序与MTD子系统进行交互。 MTD实用程序[8] 是一组工具,可用于通过MTD字符接口对闪存执行操作。 最常用的实用程序是:
- 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
sysfs界面提供有关每个mtd设备的详细信息。
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
详细动态跟踪可在此处 How to use the kernel dynamic debug.
root:~# echo "file drivers/mtd/* +p" > /sys/kernel/debug/dynamic_debug/control
Source code location
MTD框架为drivers/mtd | |}} here .
To go further
请参阅MTD常见问题解答文档 [9].