通过mknod在/dev子目录下建立MTD块设备节点(主设备号为31)和MTD字符设备节点(主设备号为90)
存储器技术设备(英语:Memory Technology Device,缩写为 MTD),是Linux系统中设备文件系统的一个类别,
主要用于闪存的应用,是一种闪存转换层(Flash Translation Layer,FTL)。创造MTD子系统的主要目的是提供
一个介于闪存硬件驱动程序与高端应用程序之间的抽象层。
因为具备以下特性,所以 MTD 设备和硬盘相较之下,处理起来要复杂许多:
* 具有 eraseblocks 的特微,而不是像硬盘一样使用集群。
* eraseblocks (32KiB ~ 128KiB) 跟硬盘的 sector size(512 到 1024 bytes)比起来要大很多。
* 操作上主要分作三个动作: 从 eraseblock 读取、写入 eraseblock 、还有就是清除 eraseblock 。
* 坏掉的 eraseblocks 无法隐藏,需要软件加以处理。
* eraseblocks 的寿命大约会在 104 到 105 的清除动作之后结束。
像U盘、多媒体记忆卡(MMC)、SD卡、CF卡等其他流行的可移动存储器要和MTD区分开来,虽然它们也叫"flash",但它们不是使用MTD技术的存储器[1]。
[1] http://www.linux-mtd.infradead.org/faq/general.html#L_ext2_mtd
http://www.linux-mtd.infradead.org/
在Linux内核中,引入MTD层为
NOR FLASH和NAND FLASH设备提供统一接口。MTD将文件系统与底层FLASH存储器进行了隔离。
字符设备和块设备的区别在于前者只能被顺序读写,后者可以随机访问;同时,两者读写数据的基本单元不同。
字符设备,以字节为基本单位,在Linux中,字符设备实现的比较简单,不需要缓冲区即可直接读写,
内核例程和用户态API一一对应,用户层的Read函数直接对应了内核中的Read例程,这种映射关系由字符设备的
file_operations维护。
块设备,则以块为单位接受输入和返回输出。对这种设备的读写是按块进行的,其接口相对于字符设备复杂,
read、write API没有直接到块设备层,而是直接到文件系统层,然后再由文件系统层发起读写请求。
同时,由于块设备的IO性能与CPU相比很差,因此,块设备的数据流往往会引入文件系统的Cache机制。
MTD设备既非块设备也不是字符设备,但可以同时提供字符设备和块设备接口来操作它。
MTD设备通常可分为四层
这四层从上到下依次是:设备节点、MTD设备层、MTD原始设备层和硬件驱动层。
参考: https://blog.csdn.net/lwj103862095/article/details/21545791
*