更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
mtd_node结构体 参考

通过mknod在/dev子目录下建立MTD块设备节点(主设备号为31)和MTD字符设备节点(主设备号为90) 更多...

#include <mtd_partition.h>

成员变量

UINT32 start_block
 开始块索引 更多...
 
UINT32 end_block
 结束块索引 更多...
 
UINT32 patitionnum
 分区编号 更多...
 
CHARblockdriver_name
 块设备驱动名称 例如: /dev/spinorblk0p0 更多...
 
CHARchardriver_name
 字符设备驱动名称 例如: /dev/nandchr0p2 更多...
 
CHARmountpoint_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.h131 行定义.

结构体成员变量说明

◆ blockdriver_name

CHAR* mtd_node::blockdriver_name

块设备驱动名称 例如: /dev/spinorblk0p0

在文件 mtd_partition.h135 行定义.

◆ chardriver_name

CHAR* mtd_node::chardriver_name

字符设备驱动名称 例如: /dev/nandchr0p2

在文件 mtd_partition.h136 行定义.

◆ end_block

UINT32 mtd_node::end_block

结束块索引

在文件 mtd_partition.h133 行定义.

◆ lock

LosMux mtd_node::lock

每个分区都有自己的互斥锁

在文件 mtd_partition.h140 行定义.

◆ mountpoint_name

CHAR* mtd_node::mountpoint_name

挂载点名称 例如: /

在文件 mtd_partition.h137 行定义.

◆ mtd_info

VOID* mtd_node::mtd_info

在文件 mtd_partition.h138 行定义.

◆ node_info

LOS_DL_LIST mtd_node::node_info

双循环节点,挂在首个分区节点上

在文件 mtd_partition.h139 行定义.

◆ patitionnum

UINT32 mtd_node::patitionnum

分区编号

在文件 mtd_partition.h134 行定义.

◆ start_block

UINT32 mtd_node::start_block

开始块索引

在文件 mtd_partition.h132 行定义.

◆ user_num

UINT32 mtd_node::user_num

使用数量

在文件 mtd_partition.h141 行定义.


该结构体的文档由以下文件生成: