更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
mtd_partition.h 文件参考

浏览源代码.

结构体

struct  mtd_node
 通过mknod在/dev子目录下建立MTD块设备节点(主设备号为31)和MTD字符设备节点(主设备号为90) 更多...
 
struct  par_param
 分区参数描述符,一个分区既可支持按块访问也可以支持按字符访问,只要有驱动程序就阔以 更多...
 

类型定义

typedef struct mtd_node mtd_partition
 通过mknod在/dev子目录下建立MTD块设备节点(主设备号为31)和MTD字符设备节点(主设备号为90) 更多...
 
typedef struct par_param partition_param
 分区参数描述符,一个分区既可支持按块访问也可以支持按字符访问,只要有驱动程序就阔以 更多...
 

函数

partition_paramGetNandPartParam (VOID)
 
partition_paramGetSpinorPartParam (VOID)
 
mtd_partitionGetSpinorPartitionHead (VOID)
 
INT32 add_mtd_partition (const CHAR *type, UINT32 startAddr, UINT32 length, UINT32 partitionNum)
 Add a partition. 更多...
 
INT32 delete_mtd_partition (UINT32 partitionNum, const CHAR *type)
 Delete a partition. 更多...
 

类型定义说明

◆ mtd_partition

typedef struct mtd_node mtd_partition

通过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
 * 

◆ partition_param

typedef struct par_param partition_param

分区参数描述符,一个分区既可支持按块访问也可以支持按字符访问,只要有驱动程序就阔以

函数说明

◆ GetNandPartParam()

partition_param * GetNandPartParam ( VOID  )
这是这个函数的调用关系图:

◆ GetSpinorPartitionHead()

mtd_partition * GetSpinorPartitionHead ( VOID  )

在文件 mtd_partition.c86 行定义.

87{
88 return g_spinorPartitionHead;
89}

◆ GetSpinorPartParam()

partition_param * GetSpinorPartParam ( VOID  )

在文件 mtd_partition.c81 行定义.

82{
83 return g_spinorPartParam;
84}
这是这个函数的调用关系图: