儲存裝置市面上常見的有nandflash,norflash,emmc這三類
1.1、nandflash
nand flash式東芝在2023年的國際固態電路研討會(isscc)上發表的, 要在nandflash上面讀寫資料,要外部加主控和電路設計。。nand flash具有較快的抹寫時間, 而且每個儲存單元的面積也較小,這讓nand flash相較於nor flash具有較高的儲存密度與較低的每位元成本。同時它的可抹除次數也高出nor flash十倍。然而nand flash 的i/o介面並沒有隨機訪問外部位址匯流排,它必須以區塊性的方式進行讀取,nand flash典型的區塊大小是數百至數千位元。
1.2、norflash
nor flash需要很長的時間進行抹寫,但是它提供完整的定址與資料匯流排,並允許隨機訪問儲存器上的任何區域,這使的它非常適合取代老式的rom晶元。當時rom晶元主要用來儲存幾乎不需更新的**,例如電腦的bios或機上盒(set-top box)的韌體。nor flash可以忍受一萬到一百萬次抹寫迴圈,它同時也是早期的可移除式快快閃儲存器儲**的基礎。compactflash本來便是以nor flash為基礎的,雖然它之後跳槽到成本較低的 nand flash。
norflash可讀,可寫,同時程式可以在nor上執行。
1.3、emmc
emmc由乙個嵌入式儲存解決方案組成,帶有mmc(多**卡)介面、快快閃儲存器儲器裝置及主控制器。所有都在乙個小型的bga 封裝。介面速度高達每秒52mbytes,emmc具有快速、可公升級的效能。同時其介面電壓可以是1.8v或者是3.3v
linux的flash裝置驅動框架如下圖所示、
2.1、硬體驅動層
硬體驅動層主要完成flash的硬體操作,主要是讀,寫,擦除等操作。
2.2、mtd原始裝置層
主要提供了對flash裝置通用操作函式以及提供特定的flash操作,比如分割槽。
2.3、mtd裝置層
flash的裝置驅動層支援字元裝置驅動(major = 90,在mtdchar.c中實現)與塊裝置驅動(major = 30),
2.4、裝置節點
就是為檔案系統在/dev/下提供訪問的節點。
資料結構框圖如下所示、
猜測1:在mtd的原始裝置層肯定有乙個陣列或者鍊錶來供硬體驅動層註冊或者新增(add_mtd_device)裝置資訊.同時對於flash類裝置,肯定要提供分割槽功能(所謂分割槽,就是在整個flash上做乙個資料資訊標定),所以需要硬體驅動層將當前的分割槽資訊存在在某乙個表中,供上層來查詢,修改。
猜測2:mtd原始裝置層提供了裝置的device陣列和分割槽資訊給誰勒,當然是"使用者"了,這裡的使用者是mtd裝置層,裝置層使用這些資訊來提供乙個統一的,無須關係硬體的ops給檔案系統了。
上面猜測對不對勒,我們來**驗證一下吧。
晚上再寫。
Linux Flash驅動 1 塊裝置系統架構
塊裝置快速體驗 塊裝置是指只能以塊為單位進行訪問的裝置,塊大小一般是512個位元組的整數倍。常見的塊裝置包括硬體,sd卡,光碟等。有同學會說,加入我需要通過硬碟訪問1個位元組的資料,難道無法訪問嗎?注意這裡的512個位元組是指對硬體裝置的最小訪問單元,對應用層訪問資料的大小沒有限制。下面開始體驗一下...
Linux FLASH驅動設計二
塊裝置驅動系統分析 功能 把記憶體劃出512k,然後利用驅動程式做成塊裝置進行相應的訪問。include include include include include printk include kmalloc include everything.include error codes inc...
裝置驅動例項 字元裝置驅動
在整個linux裝置驅動學習中,字元裝置驅動較為基礎。通過對它的學習,對裝置驅動進一步加深了解 cdev 結構體struct cdev 講下比較重要的成員變數 dev t dev 定義了32位的裝置號,其中12位是主裝置號,20位是從裝置號。獲取主裝置號 major dev t dev 獲取從裝置號...