MTD(Memory Technology Device)即常說的Flash等使用存儲芯片的存儲設備,MTD子系統(tǒng)對應的是塊設備驅動框架中的設備驅動層,可以說,MTD就是針對Flash設備設計的標準化硬件驅動框架。本文基于3.14內核,討論MTD驅動框架。
MTD子系統(tǒng)框架
設備節(jié)點層:MTD框架可以在/dev下創(chuàng)建字符設備節(jié)點(主設備號90)以及塊設備節(jié)點(主設備號31), 用戶通過訪問此設備節(jié)點即可訪問MTD字符設備或塊設備。
MTD設備層: 基于MTD原始設備, Linux在這一層次定義出了MTD字符設備和塊設備, 字符設備在mtdchar.c中實現(xiàn), 塊設備則是通過結構mtdblk_dev來描述,"/drivers/mtd/mtdchar.c"文件實現(xiàn)了MTD字符設備接口; "/drivers/mtd/mtdblock.c"文件實現(xiàn)了MTD塊設備接口
MTD原始設備層: 由MTD原始設備的通用代碼+特定的Flash數(shù)據(jù)組成。mtd_info、mtd_part、mtd_partition以及mtd_partitions等對象及其操作方法就屬于這一層,對應的文件是"drivers/mtd/mtdcore.c"。類似于i2c驅動框架中的核心層。
硬件驅動層: 內核將常用的flash操作都已經(jīng)在這個層次實現(xiàn), 驅動開發(fā)只需要將相應的設備信息添加進去即可, 比如,NOR flash的芯片驅動位于"drivers/mtd/chips/", Nand flash位于"drivers/mtd/nand/"(eg s3c2410.c)
核心結構和方法簡述
為了實現(xiàn)上述的框架, 內核中使用了如下類和API, 這些幾乎是開發(fā)一個MTD驅動必須的
核心結構
mtd_info描述原始設備層的一個分區(qū)的結構, 描述一個設備或一個多分區(qū)設備中的一個分區(qū)
mtd_table管理原始設備層的mtd_info的數(shù)組
mtd_part表示一個分區(qū), 其中的struct mtd_info mtd