通过mknod在/dev子目录下建立MTD块设备节点(主设备号为31)和MTD字符设备节点(主设备号为90) 更多...
#include <mtd_partition.h>
成员变量 | |
UINT32 | start_block |
开始块索引 更多... | |
UINT32 | end_block |
结束块索引 更多... | |
UINT32 | patitionnum |
分区编号 更多... | |
CHAR * | blockdriver_name |
块设备驱动名称 例如: /dev/spinorblk0p0 更多... | |
CHAR * | chardriver_name |
字符设备驱动名称 例如: /dev/nandchr0p2 更多... | |
CHAR * | mountpoint_name |
挂载点名称 例如: / 更多... | |
VOID * | mtd_info |
LOS_DL_LIST | node_info |
双循环节点,挂在首个分区节点上 更多... | |
LosMux | lock |
每个分区都有自己的互斥锁 更多... | |
UINT32 | user_num |
使用数量 更多... | |
通过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 *
在文件 mtd_partition.h 第 131 行定义.
CHAR* mtd_node::blockdriver_name |
块设备驱动名称 例如: /dev/spinorblk0p0
在文件 mtd_partition.h 第 135 行定义.
CHAR* mtd_node::chardriver_name |
字符设备驱动名称 例如: /dev/nandchr0p2
在文件 mtd_partition.h 第 136 行定义.
UINT32 mtd_node::end_block |
结束块索引
在文件 mtd_partition.h 第 133 行定义.
LosMux mtd_node::lock |
每个分区都有自己的互斥锁
在文件 mtd_partition.h 第 140 行定义.
CHAR* mtd_node::mountpoint_name |
挂载点名称 例如: /
在文件 mtd_partition.h 第 137 行定义.
VOID* mtd_node::mtd_info |
在文件 mtd_partition.h 第 138 行定义.
LOS_DL_LIST mtd_node::node_info |
双循环节点,挂在首个分区节点上
在文件 mtd_partition.h 第 139 行定义.
UINT32 mtd_node::patitionnum |
分区编号
在文件 mtd_partition.h 第 134 行定义.
UINT32 mtd_node::start_block |
开始块索引
在文件 mtd_partition.h 第 132 行定义.
UINT32 mtd_node::user_num |
使用数量
在文件 mtd_partition.h 第 141 行定义.