首页 理论教育 Linux驱动程序开发实例MTD架构

Linux驱动程序开发实例MTD架构

时间:2023-10-19 理论教育 版权反馈
【摘要】:在嵌入式Linux中,MTD为底层硬件(闪存等)和上层之间提供一个统一的抽象接口,这样就可以在Flash上建立基于MTD驱动层的文件系统。使用MTD驱动程序的主要优点在于,它是专门针对各种非易失性存储器而设计的,因而它对Flash有更好的支持,并包含了基于扇区的擦除、读/写操作接口。图12-1是MTD系统的层次结构图。图12-1 MTD层次结构MTD层包含了MTD原始设备和MTD设备层。用于描述MTD原始设备的数据结构是mtd_info,它包含了大量关于MTD的操作接口函数。

Linux驱动程序开发实例MTD架构

嵌入式Linux中,MTD(Memory Technology Device)为底层硬件(闪存等)和上层(文件系统)之间提供一个统一的抽象接口,这样就可以在Flash上建立基于MTD驱动层的文件系统。使用MTD驱动程序的主要优点在于,它是专门针对各种非易失性存储器而设计的,因而它对Flash有更好的支持,并包含了基于扇区的擦除、读/写操作接口。图12-1是MTD系统的层次结构图。

978-7-111-56706-6-Chapter12-1.jpg

图12-1 MTD层次结构

MTD层包含了MTD原始设备和MTD设备层。MTD设备层基于MTD原始设备,它包括MTD字符设备与MTD块设备。用于描述MTD原始设备的数据结构是mtd_info,它包含了大量关于MTD的操作接口函数。

978-7-111-56706-6-Chapter12-2.jpg

978-7-111-56706-6-Chapter12-3.jpg

mtd_device_parse_register函数用于解析分区(mtd_partition),并注册MTD原始设备:

int mtd_device_parse_register(struct mtd_info*mtd,const char*const*types,

struct mtd_part_parser_data*parser_data,

const struct mtd_partition*parts,int nr_parts);

mtd_device_unregister函数用来注销一个MTD原始设备:

int mtd_device_unregister(struct mtd_info*master);

MTD原始设备的基本操作包括以下函数:(www.xing528.com)

int mtd_read(struct mtd_info*mtd,loff_t from,size_t len,size_t*retlen,u_char*buf);//读

int mtd_write(struct mtd_info*mtd,loff_t to,size_t len,size_t*retlen,const u_char*buf);//写

int mtd_read_oob(struct mtd_info*mtd,loff_t from,struct mtd_oob_ops*ops);//读OOB

int mtd_block_markbad(struct mtd_info*mtd,loff_t ofs);//标记坏块

int mtd_block_isbad(struct mtd_info*mtd,loff_t ofs);//是否坏块

int mtd_erase(struct mtd_info*mtd,struct erase_info*instr);//擦除块

由于Linux系统中的MTD设备包含了块设备和字符设备两个方面,对MTD设备的操作,首先要区分是以块设备方式还是以字符设备的方式。下面是MTD设备的主设备号:

#define MTD_CHAR_MAJOR 90

#define MTD_BLOCK_MAJOR 31

以下是/dev目录下的MTD设备节点,mtdn和mtdnro代表字符设备。mtdblockn代表块设备。

978-7-111-56706-6-Chapter12-4.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈