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

2021-10-03 15:03:15 字數 1801 閱讀 3420

從今天開始,我們進行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抽象類似。

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

針對mtd驅動模型,其對上關聯檔案系統、對下則主要關聯具體的儲存驅動。它們之間的關聯圖

如下所示。

其中mtd block、mtd char均屬於mtd驅動模型的部分,而ftl、nftl則不屬於mtd驅動模型部分 ,由具體的檔案系統來實現,如ubi檔案系統掛載時,則是通過裝置檔案/dev/ubix_y進行掛載;而針對yaffs2檔案系統,其可以直接使用/dev/mtdblockx進行掛載(當然其也可以不借助mtdblock)。而針對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裝置驅動模型做乙個大致的概述(已經乙個多月沒有更新了,人忽然間就懶下來了,本篇即是開個頭,以便督促自己繼續更新)。

Linux MTD子系統學習(一)

mtd memory technology device 記憶體技術裝置,是linux用於描述rom,nand,nor等裝置的子系統的抽象,mtd裝置可以按塊讀寫也可以按位元組讀寫,也就是說mtd裝置既可以是塊裝置也可以是字元裝置,塊裝置 mtdblackx 操作針對檔案系統,字元裝置 mtdx 操...

Linux MTD系統剖析

mtd,memory technology device即記憶體技術裝置,在linux核心中,引入mtd層為nor flash和nand flash裝置提供統一介面。mtd將檔案系統與底層flash儲存器進行了隔離。如上圖所示,mtd裝置通常可分為四層,從上到下依次是 裝置節點 mtd裝置層 mtd...

linux input 子系統例項分析

一,前言 1,近日要寫乙個很特殊的鍵盤驅動,故對linux的input子系統分析了一番,寫下分析筆記,以防不日即忘。2,使用input子系統的一般流程為 input allocate device 申請乙個input dev裝置 初始化該input dev input register device...