NAND FLASH學習筆記之MTD下nand flash驅動(一)
轉載請註明:http://blog.csdn.net/wang_zheng_kai/article/details/18988521
有了前面的基礎,我們就可以研究MTD下的nand驅動了,我這裡用的是jz4780grus開發板,我將以下面幾個部分做一個介紹,如果有沒有涉及的或者需要詳細介紹的我還會再開幾篇部落格進行介紹,敬請參閱!!
一、MTD概述
二、MTD系統層次
三、MTD裝置節點的建立
四、MTD子系統的註冊
五、NAND FLASH驅動層
六、MTD下NAND FLASH讀操作分析
七、如何除錯新的NAND FLASH晶片
一、MTD的概述
1、MTD(memory technology device)是用於訪問memory裝置(比如NOR Flash、NAND Flash)的Linux的子系統。
2、MTD在硬體和上層之間提供了一個抽象的介面。
MTD將 Nand Flash,nor flash 和其他型別的 flash 等裝置,統一抽象成MTD 裝置來管理,根據這些裝置的特點,上層實現了常見的操作函式封裝,而底層具體的內部實現(具體的內部硬體裝置的讀/寫/擦除函式),就需要驅動設計者自己來實現了。
3、MTD的主要目的是為了使新的儲存裝置的驅動更加簡單並有通用介面函式可用。
MTD將檔案系統與底層的Flash儲存器進行了隔離,使Flash驅動工程師無須關心Flash作為字元裝置和塊裝置與Linux核心的介面。
4、MTD 的所有原始碼在kernel/drivers/mtd 子目錄下:
5、MTD子系統的層次框圖
二、linux MTD系統層次
如下圖所示:在引入MTD後,linux系統中的flash裝置驅動及介面可分為4層:裝置節點、MTD裝置層、MTD原始層和硬體驅動。
MTD的原始碼都在kernel/drivers/mtd目錄中。
裝置節點:
通過mknod在dev子目錄下建立MTD字元裝置節點(90)和MTD塊裝置節點(31)基於MTD原始裝置,由linux系統定義出MTD的塊裝置和字元裝置構成。
字元裝置的定義在mtdchar.c中實現,通過註冊一系列file_operation函式可實現對MTD裝置的讀寫和控制。
MTD的塊裝置則是定義了一個描述MTD塊裝置的結構mtd_dev,並聲明瞭一個名為mtdblks的指標陣列,該陣列中的每一個mtd_dev都與mtd_info一一對應。
完成flash的基本操作。
使用者通過訪問此裝置節點即可訪問MTD字元裝置和塊裝置
裝置層:
基於MTD原始裝置,由linux系統定義出MTD的塊裝置和字元裝置構成。
字元裝置的定義在mtdchar.c中實現,通過註冊一系列file_operation函式可實現對MTD裝置的讀寫和控制。
MTD的塊裝置則是定義了一個描述MTD塊裝置的結構mtd_dev,並聲明瞭一個名為mtdblks的指標陣列,該陣列中的每一個mtd_dev都與mtd_info一一對應。
完成flash的基本操作。
原始裝置層:
MTD原始裝置的通用程式碼(mtdcore.c),(mtdpart.c).其中mtdcore.c中定義了描述mtd裝置的核心結構mtdinfo.
硬體驅動層:
負責Flash硬體裝置的讀、寫、擦除,Linux MTD裝置的NAND型flash的
驅動程式碼位於/driver/mtd/nand子目錄下。
瞭解了上面的知識,我們就可以瞭解下他們各個層的介面關係,這樣我們能更好的熟悉程式碼,和他們之間的介面呼叫關係,介面圖如下所示: