Linux mtd子系統專欄分析之一概述

從今天開始,我們進行linux mtd子系統的分析。mtd子系統即為內存技術設備子系統,主要包括nor flash、nand flash等閃存設備相關的子系統模塊,而針對sd、tf等存儲設備,則主要由mmc子系統模塊進行管理並創建對應的塊設備。而針對mtd子系統,則會基於mtd原始設備,創建mtd字符設備與mtd塊設備,從而在上層與vfs系統進行關聯。


針對mtd子系統,主要涉及如下幾個方面的介紹:

一、MTD子系統概述

二、MTD設備驅動模型相關數據結構說明

三、MTD塊設備與字符設備

四、MTD上層接口與nor/nandflash驅動的關聯關係

五、nandflash驅動介紹

六、norflash驅動簡要介紹

七、spi nor flash驅動簡要介紹

八、應用層完成對flash中存儲的鏡像升級功能


本篇主要介紹MTD子系統的概念,並簡要說明mtd子系統的架構,主要包括mtd子系統與上層文

件系統、與底層驅動間的關聯等。


設備間的邏輯關聯圖與抽象

下圖是norflash 、nandflash與cpu之間的關聯。針對norflash,可直接與cpu關聯,也可通過spi controller與cpu相連;而針對nandflash,即可以通過nandflash controller、spi controlloer與cpu相連。 而針對spi controller、spi device、spi driver的抽象及關聯,已在之前的專欄中介紹。而針對nandflash controller,我們在後面會詳細說明。

而mtd驅動模型則通過對nor flash、nandflash等閃存設備進行抽象,對上層模塊抽象成統一成設備模型(mtd_info),對下則通過mtd_info完成與具體閃存設備驅動的綁定,從而完成對閃存設備的訪問操作。此處mtd的抽象,就和vfs抽象類似。


Linux mtd子系統專欄分析之一概述

MTD設備驅動模型與VFS及FLASH驅動的關聯

如下為mtd設備驅動模型、vfs、flash設備驅動之間的關聯圖。


Linux mtd子系統專欄分析之一概述

針對mtd驅動模型,其對上關聯文件系統、對下則主要關聯具體的存儲驅動。其中mtd block、mtd char均屬於mtd驅動模型的部分,而FTL、NFTL則不屬於mtd驅動模型部分 ,由具體的文件系統來實現,如ubi文件系統掛載時,則是通過設備文件/dev/ubiX_Y進行掛載;而針對yaffs2文件系統,其可以直接使用/dev/mtdblockX進行掛載(當然其也可以不借助mtdblock)。

Mtd char 的作用

而針對mtd char,主要實現對相應的flash設備進行順序訪問,那mtd char可具體實現什麼功能

呢?

可能的應用一:當我們想在文件系統下實現對bootloader、kernel、文件系統鏡像的升級操作時,則可以通過讀寫/dev/mtdX(mtd 字符設備),實現針對bootloader、kernel、filesystem的升級操作。


針對mtd block、mtd char,其均是同調用mtd_info(即mtd設備),實現對具體flash芯片的讀寫操作的。而mtd_info則代表一個flash芯片或一個flash芯片的分區,當flash設備(nandflash設備、nor flash設備)的驅動初始化時,則會根據分區劃分,創建對應的mtd_info,並完成mtd_info與該芯片驅動的綁定操作。而在mtd_info的創建過程中,則會創建對應的mtd char、mtd block,從而完成與vfs的關聯。


本篇主要對mtd設備驅動模型做一個大致的概述(已經一個多月沒有更新了,人忽然間就懶下來了,本篇即是開個頭,以便督促自己繼續更新)。


分享到:


相關文章: