MTD(Memory Technology Device)即常說的Flash等使用存儲(chǔ)芯片的存儲(chǔ)設(shè)備,MTD子系統(tǒng)對(duì)應(yīng)的是塊設(shè)備驅(qū)動(dòng)框架中的設(shè)備驅(qū)動(dòng)層,可以說,MTD就是針對(duì)Flash設(shè)備設(shè)計(jì)的標(biāo)準(zhǔn)化硬件驅(qū)動(dòng)框架。本文基于3.14內(nèi)核,討論MTD驅(qū)動(dòng)框架。

MTD子系統(tǒng)框架

移動(dòng)開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

  • 設(shè)備節(jié)點(diǎn)層:MTD框架可以在/dev下創(chuàng)建字符設(shè)備節(jié)點(diǎn)(主設(shè)備號(hào)90)以及塊設(shè)備節(jié)點(diǎn)(主設(shè)備號(hào)31), 用戶通過訪問此設(shè)備節(jié)點(diǎn)即可訪問MTD字符設(shè)備或塊設(shè)備。

  • MTD設(shè)備層: 基于MTD原始設(shè)備, Linux在這一層次定義出了MTD字符設(shè)備和塊設(shè)備, 字符設(shè)備在mtdchar.c中實(shí)現(xiàn), 塊設(shè)備則是通過結(jié)構(gòu)mtdblk_dev來描述,"/drivers/mtd/mtdchar.c"文件實(shí)現(xiàn)了MTD字符設(shè)備接口; "/drivers/mtd/mtdblock.c"文件實(shí)現(xiàn)了MTD塊設(shè)備接口

  • MTD原始設(shè)備層: 由MTD原始設(shè)備的通用代碼+特定的Flash數(shù)據(jù)組成。mtd_info、mtd_part、mtd_partition以及mtd_partitions等對(duì)象及其操作方法就屬于這一層,對(duì)應(yīng)的文件是"drivers/mtd/mtdcore.c"。類似于i2c驅(qū)動(dòng)框架中的核心層。

  • 硬件驅(qū)動(dòng)層: 內(nèi)核將常用的flash操作都已經(jīng)在這個(gè)層次實(shí)現(xiàn), 驅(qū)動(dòng)開發(fā)只需要將相應(yīng)的設(shè)備信息添加進(jìn)去即可, 比如,NOR flash的芯片驅(qū)動(dòng)位于"drivers/mtd/chips/", Nand flash位于"drivers/mtd/nand/"(eg s3c2410.c)

核心結(jié)構(gòu)和方法簡(jiǎn)述

為了實(shí)現(xiàn)上述的框架, 內(nèi)核中使用了如下類和API, 這些幾乎是開發(fā)一個(gè)MTD驅(qū)動(dòng)必須的

核心結(jié)構(gòu)