基于mtd的nandflash設(shè)備驅(qū)動(dòng)底層實(shí)現(xiàn)原理分析

基于mtd的nandflash設(shè)備驅(qū)動(dòng)底層實(shí)現(xiàn)原理分析

ID:5838291

大?。?.05 MB

頁(yè)數(shù):61頁(yè)

時(shí)間:2017-12-25

基于mtd的nandflash設(shè)備驅(qū)動(dòng)底層實(shí)現(xiàn)原理分析_第1頁(yè)
基于mtd的nandflash設(shè)備驅(qū)動(dòng)底層實(shí)現(xiàn)原理分析_第2頁(yè)
基于mtd的nandflash設(shè)備驅(qū)動(dòng)底層實(shí)現(xiàn)原理分析_第3頁(yè)
基于mtd的nandflash設(shè)備驅(qū)動(dòng)底層實(shí)現(xiàn)原理分析_第4頁(yè)
基于mtd的nandflash設(shè)備驅(qū)動(dòng)底層實(shí)現(xiàn)原理分析_第5頁(yè)
資源描述:

《基于mtd的nandflash設(shè)備驅(qū)動(dòng)底層實(shí)現(xiàn)原理分析》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。

1、基于MTD的NANDFLASH設(shè)備驅(qū)動(dòng)底層實(shí)現(xiàn)原理分析(一)經(jīng)過UBOOT初步的移植,Linux內(nèi)核初步的移植,Linux內(nèi)核總線設(shè)備模型的分析,等一系列痛苦的折騰,目的就是想更好的來分析下NANDFLASH的驅(qū)動(dòng)。。大概一共歷經(jīng)了半個(gè)月的時(shí)間,慢慢的對(duì)NANDFLASH驅(qū)動(dòng)程序有感覺了。。。一、MTD體系結(jié)構(gòu):Linux內(nèi)核提供MTD子系統(tǒng)來建立FLASH針對(duì)Linux的統(tǒng)一、抽象接口。MTD將文件系統(tǒng)與底層的FLASH存儲(chǔ)器進(jìn)行隔離。?????引入MTD后Linux系統(tǒng)中對(duì)FLASH的設(shè)備驅(qū)

2、動(dòng)分為4層???設(shè)備節(jié)點(diǎn):用戶在/dev目錄下使用mknod命令建立MTD字符設(shè)備節(jié)點(diǎn)(主設(shè)備號(hào)為90),或者M(jìn)TD塊設(shè)備節(jié)點(diǎn)(主設(shè)備號(hào)為31),使用該設(shè)備節(jié)點(diǎn)即可訪問MTD設(shè)備。MTD設(shè)備層:基于MTD原始設(shè)備層,系統(tǒng)將MTD設(shè)備可以定義為MTD字符(在/mtd/mtdchar.c中實(shí)現(xiàn),設(shè)備號(hào)90)和MTD塊設(shè)備(在/mtd/mtdblock.c中實(shí)現(xiàn),設(shè)備號(hào)31)。MTD原始設(shè)備層:MTD原始設(shè)備層由兩部分構(gòu)成,一部分是MTD原始設(shè)備的通用代碼,另一部分是各個(gè)特定Flash的數(shù)據(jù),如分區(qū)。

3、???????????????主要構(gòu)成的文件有:????????????????????drivers/mtd/mtdcore.c支持mtd字符設(shè)備????????????????????driver/mtd/mtdpart.c支持mtd塊設(shè)備Flash硬件驅(qū)動(dòng)層:Flash硬件驅(qū)動(dòng)層負(fù)責(zé)對(duì)Flash硬件的讀、寫和擦除操作。MTD設(shè)備的NorFlash芯片驅(qū)動(dòng)位于drivers/mtd/chips/子目錄下,NandFlash芯片的驅(qū)動(dòng)則位于drivers/mtd/nand/子目錄下。二、Lin

4、ux內(nèi)核中基于MTD的NANDFLASH驅(qū)動(dòng)代碼布局:在Linux2.6.35內(nèi)核中,MTD源代碼放在driver/mtd目錄中,該目錄中包含chips、devices、maps、nand、onenand、lpdrr、tests和ubi八個(gè)子目錄。其中只有nand和onenand目錄中的代碼才與NAND驅(qū)動(dòng)相關(guān),不過nand目錄中的代碼比較通用,而onenand目錄中的代碼相對(duì)于nand中的代碼而言則簡(jiǎn)化了很多,它是針對(duì)三星公司開發(fā)的另一類Flash芯片,即OneNANDFlash。本文我們需要

5、關(guān)注的代碼是linux-2.6.35/drivers/mtd/nand目錄中,在該目錄中我們關(guān)心的文件如下:1、?nand_base.c:定義了NAND驅(qū)動(dòng)中對(duì)NAND芯片最基本的操作函數(shù)和操作流程,如擦除、讀寫page、讀寫oob等。當(dāng)然這些函數(shù)都只是進(jìn)行一些default的操作,若你的系統(tǒng)在對(duì)NAND操作時(shí)有一些特殊的動(dòng)作,則需要在你自己的驅(qū)動(dòng)代碼中進(jìn)行定義,然后Replace這些default的函數(shù)。2、?nand_bbt.c:定義了NAND驅(qū)動(dòng)中與壞塊管理有關(guān)的函數(shù)和結(jié)構(gòu)體。3、?nan

6、d_ids.c:定義了兩個(gè)全局類型的結(jié)構(gòu)體:structnand_flash_devnand_flash_ids[]和structnand_manufacturersnand_manuf_ids[]。其中前者定義了一些NAND芯片的類型,后者定義了NAND芯片的幾個(gè)廠商。NAND芯片的ID至少包含兩項(xiàng)內(nèi)容:廠商ID和廠商為自己的NAND芯片定義的芯片ID。當(dāng)NAND驅(qū)動(dòng)被加載的時(shí)候,它會(huì)去讀取具體NAND芯片的ID,然后根據(jù)讀取的內(nèi)容到上述定義的nand_manuf_ids[]和nand_fla

7、sh_ids[]兩個(gè)結(jié)構(gòu)體中去查找,以此判斷該NAND芯片是那個(gè)廠商的產(chǎn)品,以及該NAND芯片的類型。若查找不到,則NAND驅(qū)動(dòng)就會(huì)加載失敗,因此在開發(fā)NAND驅(qū)動(dòng)前必須事先將你的NAND芯片添加到這兩個(gè)結(jié)構(gòu)體中去(其實(shí)這兩個(gè)結(jié)構(gòu)體中已經(jīng)定義了市場(chǎng)上絕大多數(shù)的NAND芯片,所以除非你的NAND芯片實(shí)在比較特殊,否則一般不需要額外添加)。值得一提的是,nand_flash_ids[]中有三項(xiàng)屬性比較重要,即pagesize、chipsize和erasesize,驅(qū)動(dòng)就是依據(jù)這三項(xiàng)屬性來決定對(duì)NAN

8、D芯片進(jìn)行擦除,讀寫等操作時(shí)的大小的。其中pagesize即NAND芯片的頁(yè)大小,一般為256、512或2048;chipsize即NAND芯片的容量;erasesize即每次擦除操作的大小,通常就是NAND芯片的block大小。4、?nand_ecc.c:定義了NAND驅(qū)動(dòng)中與softewareECC有關(guān)的函數(shù)和結(jié)構(gòu)體,若你的系統(tǒng)支持hardwareECC,且不需要softwareECC,則該文件也不需理會(huì)。上面這些內(nèi)容我是Copy別人的我覺得寫得太好了,因?yàn)橐婚_始我真的很迷茫,在nand目錄

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。