良许Linux教程网 干货合集 详解Linux MTD层次

详解Linux MTD层次

MTD(memory technology device内存技术设备)是Linux中的一个子系统,用于访问memory设备(如ROM、flash)。MTD的主要目的是简化新memory设备的驱动开发,为此,它在硬件和上层之间提供了一个抽象的接口。MTD的所有源代码都在/drivers/mtd子目录下。CFI接口的MTD设备可以分为四层(从设备节点直到底层硬件驱动),这四层从上到下分别为:设备节点、MTD设备层、MTD原始设备层和硬件驱动层。

一、Flash硬件驱动层:

硬件驱动层负责在init时驱动Flash硬件。Linux MTD设备的NOR Flash芯片驱动遵循CFI接口标准,其驱动程序位于/drivers/mtd/chips子目录下。NAND型Flash的驱动程序则位于/drivers/mtd/nand子目录下。

二、MTD原始设备:

原始设备层由两部分组成。一部分是MTD原始设备的通用代码,另一部分是各个特定Flash的数据,例如分区。用于描述MTD原始设备的数据结构是mtd_info。其中定义了大量与MTD相关的数据和操作函数。mtd_table(mtdcore.c)则是所有MTD原始设备的列表,mtd_part(mtd_part.c)是用于表示MTD原始设备分区的结构。其中包含了mtd_info,因为每个分区都被看成一个MTD原始设备加在mtd_table中。mtd_part.mtd_info中的大部分数据都从该分区的主分区mtd_part->master中获得。存放特定Flash数据的文件位于/drivers/mtd/maps/子目录下。每个文件都描述了板子上的一块Flash。其中,调用add_mtd_device()、del_mtd_device()函数建立或删除mtd_info结构,并将其加入或删除mtd_table。或者调用add_mtd_partition()、del_mtd_partition()函数(mtdpart.c)建立或删除mtd_part结构,并将mtd_part.mtd_info加入或删除mtd_table中。

三、MTD设备层:

基于MTD原始设备,Linux系统可以定义出MTD的块设备(主设备号31)和字符设备(设备号90)。MTD字符设备的定义在mtdchar.c中实现,通过注册一系列file operation函数(如lseek、open、close、read、write)。MTD块设备则定义了一个描述MTD块设备的结构mtdblk_dev,并声明了一个名为mtdblks的指针数组。该数组中的每个mtdblk_dev都与mtd_table中的每个mtd_info一一对应。

四、设备节点:

通过mknod在/dev子目录下建立MTD字符设备节点(主设备号为90)和MTD块设备节点(主设备号为31),通过访问此设备节点即可访问MTD字符设备和块设备。

五、根文件系统:

在Bootloader中将JFFS(或JFFS2)的文件系统映像jffs.image(或jffs2.img)烧到flash的 某一个分区中,在/arch/arm/mach-your/arch.c文件的your_fixup函数中将该分区作为根文件系统挂载。

六、文件系统:

内核启动后,通过mount 命令可以将flash中的其余分区作为文件系统挂载到mountpoint上。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部