版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第24章 Flash設(shè)備驅(qū)動(dòng)24.1 Linux Flash驅(qū)動(dòng)結(jié)構(gòu)24.2 Flash設(shè)備基礎(chǔ)24.3 內(nèi)核MTD層24.4 Flash設(shè)備框架24.5 Flash設(shè)備驅(qū)動(dòng)實(shí)例NOR Flash設(shè)備驅(qū)動(dòng)剖析24.6 Flash設(shè)備驅(qū)動(dòng)實(shí)例NAND Flash設(shè)備驅(qū)動(dòng)分析24.1 Linux Flash驅(qū)動(dòng)結(jié)構(gòu)24.1.1 什么是MTD24.1.2 MTD系統(tǒng)結(jié)構(gòu)24.1.1 什么是MTDLinux內(nèi)核設(shè)計(jì)了一個(gè)MTD(Memory Technology Device,內(nèi)存技術(shù)設(shè)備)結(jié)構(gòu)支持Flash設(shè)備,只要按照MTD的要求設(shè)置Flash設(shè)備的參數(shù)并提供驅(qū)動(dòng),就可讓Flash設(shè)備工作。MTD
2、是Linux內(nèi)核為支持閃存設(shè)備的一個(gè)驅(qū)動(dòng)中間層。對(duì)內(nèi)核其他部分來說,MTD屏蔽了閃存設(shè)備的細(xì)節(jié);對(duì)于閃存設(shè)備驅(qū)動(dòng)來說,只需要向MTD中間層提供接口就可以向內(nèi)核提供閃存設(shè)備支持。JEDECCFIOOBECCEraseSizeBusWidthNANDNOR24.1.2 MTD系統(tǒng)結(jié)構(gòu)Linux內(nèi)核MTD設(shè)備相關(guān)代碼在drivers/mtd目錄下,設(shè)計(jì)MTD的目的是讓新的閃存設(shè)備使用更簡(jiǎn)單。MTD設(shè)備可以分為4層。1設(shè)備節(jié)點(diǎn)層2MTD設(shè)備層3MTD原始設(shè)備層4硬件驅(qū)動(dòng)層1設(shè)備節(jié)點(diǎn)層通過mknod命令可以在/dev目錄下建立MTD字符設(shè)備節(jié)點(diǎn)(主設(shè)備號(hào)90)和MTD塊節(jié)點(diǎn)(主設(shè)備號(hào)31),通過設(shè)備節(jié)點(diǎn)
3、可以訪問MTD字符設(shè)備和塊設(shè)備。2MTD設(shè)備層MTD設(shè)備層基于MTD原始設(shè)備,向上一層提供文件操作函數(shù),如lseek()、open()、close()、read()、write()等。MTD塊設(shè)備定義了一個(gè)描述MTD塊設(shè)備的結(jié)構(gòu)mtdblk_dev,并且聲明了一個(gè)mtdblks數(shù)據(jù)用于存放系統(tǒng)所有注冊(cè)的MTD塊設(shè)備。MTD設(shè)備層代碼存放在drivers/mtd/mtd_blkdevs.c和drivers/mtd/mtdchar.c文件內(nèi)。3MTD原始設(shè)備層MTD原始設(shè)備層由兩部分組成,一部分包括MTD原始設(shè)備的通用代碼,另一部分包括特定的Flash數(shù)據(jù),如閃存分區(qū)等。MTD原始設(shè)備的mtd_i
4、nfo結(jié)構(gòu)描述定義了有關(guān)MTD的大量數(shù)據(jù)和操作函數(shù)。drivers/mtd/mtd_core.c 全局變量mtd_table作為MTD原始設(shè)備表drivers/mtd/mtd_part.c 全局變量mtd_part作為MTD原始設(shè)備分區(qū)結(jié)構(gòu),包含mtd_info結(jié)構(gòu)。每個(gè)分區(qū)作為一個(gè)原始設(shè)備。drivers/mtd/maps目錄 存放特定的閃存數(shù)據(jù),該目錄下每個(gè)文件對(duì)應(yīng)一種類型開發(fā)板的閃存。調(diào)用函數(shù)add_mtd_device( )可建立一個(gè)mtd_info結(jié)構(gòu)并加入到mtd_table中。del_mtd_device函數(shù)可從mtd_table中刪除一個(gè)閃存設(shè)備。4硬件驅(qū)動(dòng)層該層負(fù)責(zé)在系統(tǒng)初始
5、化的時(shí)候驅(qū)動(dòng)閃存硬件。Linux內(nèi)核的MTD設(shè)備中,NOR Flash設(shè)備遵守CFI結(jié)構(gòu)標(biāo)準(zhǔn),其驅(qū)動(dòng)代碼放在drivers/mtd/chips目錄下。NAND Flash設(shè)備驅(qū)動(dòng)代碼放在drivers/mtd/nand目錄下。一個(gè)MTD原始設(shè)備通過mtd_part結(jié)構(gòu)分成多個(gè)MTD原始設(shè)備,然后注冊(cè)到mtd_table中。 mtd_table中的每個(gè)MTD原始設(shè)備都可以注冊(cè)為一個(gè)MTD設(shè)備,字符設(shè)備的主設(shè)備號(hào)為90,次設(shè)備號(hào)奇數(shù)代表只讀設(shè)備,偶數(shù)代表可讀寫設(shè)備;塊設(shè)備的主設(shè)備號(hào)為31,次設(shè)備號(hào)為連續(xù)的自然數(shù)。4硬件驅(qū)動(dòng)層24.2 Flash設(shè)備基礎(chǔ)24.2.1 存儲(chǔ)原理24.2.2 性能比較2
6、4.2.1 存儲(chǔ)原理24.2.2 性能比較NOR閃存的特點(diǎn)是支持片內(nèi)執(zhí)行,程序可直接在上面運(yùn)行而不必加載到RAM。NOR閃存的讀取速度很快,但容量通常不大;其寫入速度很慢,不利于大量數(shù)據(jù)存儲(chǔ)。NAND閃存的特點(diǎn)是存儲(chǔ)密度高,寫入和擦除速度都比NOR Flash快,適合大數(shù)據(jù)量存儲(chǔ)。NAND閃存需要特殊的存儲(chǔ)電路控制,且只有空或擦除后的單元才能寫入數(shù)據(jù),因此必須在寫入數(shù)據(jù)之前先擦除塊。NOR閃存在擦除塊之前必須把所有的數(shù)據(jù)寫為0.NOR按照64KB128KB為一塊擦除,平均時(shí)間5SNAND閃存擦除以8KB32KB為單位擦除,時(shí)間4ms左右。NAND的寫入速度高于NOR;NOR的讀速度高于NAND
7、;NAND的擦除速度遠(yuǎn)高于NOR;NAND的擦除單元小,因此需要的擦除電路也會(huì)減小。NOR閃存帶有SRAM接口,有足夠引腳尋址,可讀取內(nèi)部每個(gè)字節(jié);NAND閃存串行讀取數(shù)據(jù),復(fù)雜復(fù)雜的I/O電路。NAND的讀寫單位通常為512字節(jié),適合替代硬盤之類的塊存儲(chǔ)設(shè)備。NAND閃存的擦寫次數(shù)為100萬次左右,NOR只有10萬次左右。NAND閃存更適合存儲(chǔ)數(shù)據(jù),NOR閃存適合存儲(chǔ)代碼。24.2.2 性能比較24.3 內(nèi)核MTD層24.3.1 mtd_info結(jié)構(gòu)24.3.2 mtd_part結(jié)構(gòu)24.3.3 mtd_partition結(jié)構(gòu)24.3.4 map_info結(jié)構(gòu)24.3.5 nand_chip
8、結(jié)構(gòu)24.3.1 mtd_info結(jié)構(gòu)mtd_info結(jié)構(gòu)是MTD原始設(shè)備層的一個(gè)重要結(jié)構(gòu),該結(jié)構(gòu)定義了大量的關(guān)于MTD的數(shù)據(jù)和操作,定義在include/linux/mtd/mtd.h頭文件中。mtd_info結(jié)構(gòu)成員主要由數(shù)據(jù)成員和操作函數(shù)兩部分組成。內(nèi)核向閃存驅(qū)動(dòng)提供了用于注冊(cè)和注銷MTD設(shè)備的函數(shù): int add_mtd_device(struct mtd_info *mtd); int del_mtd_device(struct mtd_info *mtd);24.3.2 mtd_part結(jié)構(gòu)mtd_part結(jié)構(gòu)描述分區(qū),該結(jié)構(gòu)中的mtd_info結(jié)構(gòu)成員用于描述本分區(qū),加入到mt
9、d_table全局變量中。結(jié)構(gòu)定義在drivers/mtd/mtdpart.c中。27 /* Our partition node structure */28 struct mtd_part 29 struct mtd_info mtd;/ 分區(qū)信息30 struct mtd_info *master; / 該分區(qū)所在的主分區(qū)31 u_int32_t offset;/ 該分區(qū)的偏移地址32 int index;/ 分區(qū)號(hào)33 struct list_head list;34 int registered;35 ;一個(gè)Flash存儲(chǔ)器可分成多個(gè)分區(qū),其概念類似于硬盤的分區(qū)。mtd_part中的
10、mtd成員描述當(dāng)前分區(qū),master描述當(dāng)前分區(qū)所在存儲(chǔ)器的主分區(qū)。index為當(dāng)前分區(qū)在存儲(chǔ)器中的分區(qū)編碼,offset為分區(qū)對(duì)于存儲(chǔ)器起始位置開始的偏移。24.3.3 mtd_partition結(jié)構(gòu)內(nèi)核代碼drivers/mtd/mtdpart.c文件內(nèi)定義了添加和刪除閃存分區(qū)的函數(shù),如下所示:int add_mtd_partitions(struct mtd_info *master, const struct mtd_partition *parts, int nbparts);int del_mtd_partitions(struct mtd_info *master);24.3.4
11、 map_info結(jié)構(gòu)NOR Flash驅(qū)動(dòng)使用map_info結(jié)構(gòu)作為核心數(shù)據(jù)結(jié)構(gòu)。該結(jié)構(gòu)定義了NOR Flash的基址、位寬、大小等信息以及閃存的操作函數(shù)。map_info結(jié)構(gòu)定義在include/linux/mtd/map.h頭文件中。24.3.5 nand_chip結(jié)構(gòu)NAND閃存使用nand_chip結(jié)構(gòu)描述存儲(chǔ)設(shè)備信息,該結(jié)構(gòu)定義在include/linux/mtd/ nand.h頭文件中。24.4 Flash設(shè)備框架24.4.1 NOR Flash設(shè)備驅(qū)動(dòng)框架24.4.2 NAND Flash設(shè)備驅(qū)動(dòng)框架24.4.1 NOR Flash設(shè)備驅(qū)動(dòng)框架24.4.2 NAND Flas
12、h設(shè)備驅(qū)動(dòng)框架24.5 Flash設(shè)備驅(qū)動(dòng)實(shí)例NOR Flash設(shè)備驅(qū)動(dòng)剖析24.5.1 數(shù)據(jù)結(jié)構(gòu)24.5.2 驅(qū)動(dòng)初始化24.5.3 驅(qū)動(dòng)卸載24.5.1 數(shù)據(jù)結(jié)構(gòu)該驅(qū)動(dòng)程序是SHARP某種設(shè)備驅(qū)動(dòng),程序比較簡(jiǎn)單。首先在第39行定義了一個(gè)mtd_info結(jié)構(gòu)用于描述NOR設(shè)備:39 struct map_info sharpsl_map = 40 .name = sharpsl-flash,/ 設(shè)備名稱41 .size = WINDOW_SIZE,/ 存儲(chǔ)器容量42 .bankwidth = BANK_WIDTH,/ 總線寬度43 .phys = WINDOW_ADDR44 ;24.5.2
13、驅(qū)動(dòng)初始化通過查找模塊初始化和清除宏,能得到該驅(qū)動(dòng)的初始化函數(shù)為init_sharpsl()以及清除函數(shù)cleanup_sharpsl()。24.5.3 驅(qū)動(dòng)卸載驅(qū)動(dòng)卸載調(diào)用了cleanup_sharpsl()函數(shù),主要是釋放NOR驅(qū)動(dòng)占用的資源。24.6 Flash設(shè)備驅(qū)動(dòng)實(shí)例NAND Flash設(shè)備驅(qū)動(dòng)分析24.6.1 S3C2440 NAND控制器介紹24.6.2 數(shù)據(jù)結(jié)構(gòu)24.6.3 驅(qū)動(dòng)初始化24.6.4 驅(qū)動(dòng)卸載24.6.5 初始化NAND控制器24.6.6 設(shè)置芯片操作24.6.7 電源管理24.6.1 S3C2440 NAND控制器介紹24.6.2 數(shù)據(jù)結(jié)構(gòu)S3C2410、S3
14、C2412和S3C2440這3個(gè)處理器在NAND控制器部分存在一些差異。為了在三款處理器上都可以驅(qū)動(dòng)同樣的NAND Flash閃存,在drivers/mtd/nand/s3c2410.c文件中定義了s3c2410_nand_mtd結(jié)構(gòu)和s3c2410_nand_info結(jié)構(gòu)存放相關(guān)信息。s3c2410_nand_mtd結(jié)構(gòu)定義如下:92 struct s3c2410_nand_mtd 93 struct mtd_info mtd;/ 內(nèi)核mtd_info結(jié)構(gòu)94 struct nand_chip chip;/ 內(nèi)核nand_chip結(jié)構(gòu)95 struct s3c2410_nand_set *s
15、et;/ 封裝后的mtd_partition結(jié)構(gòu),加入了S3C2440的一些屬性96 struct s3c2410_nand_info *info; / S3C2440狀態(tài)信息,私有數(shù)據(jù)97 int scan_res;98 ;24.6.3 驅(qū)動(dòng)初始化驅(qū)動(dòng)初始化調(diào)用s3c2410_nand_init()函數(shù),定義如下:796 static int _init s3c2410_nand_init(void)797 798 printk(S3C24XX NAND Driver, (c) 2004 Simtec Electronicsn);799 800 platform_driver_register(&s3c2412_nand_driver);801 platform_driver_register(&s3c2440_nand_driver);/ 注冊(cè)S3C2440平臺(tái)驅(qū)動(dòng)數(shù)據(jù)結(jié)構(gòu)802 return platform_driver_register(&s3c2410_nand_driver);803 24.6.4 驅(qū)動(dòng)卸載驅(qū)動(dòng)卸載時(shí)調(diào)用s3c2410_nand_remove()函數(shù),主要是釋放驅(qū)動(dòng)占用的資源。24.6.5 初始化NAND控制器s3c2410_nand_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 碾碎機(jī)細(xì)分市場(chǎng)深度研究報(bào)告
- 脫水機(jī)造紙工業(yè)用項(xiàng)目營(yíng)銷計(jì)劃書
- 織錦人像商業(yè)機(jī)會(huì)挖掘與戰(zhàn)略布局策略研究報(bào)告
- 反轉(zhuǎn)片出租行業(yè)相關(guān)項(xiàng)目經(jīng)營(yíng)管理報(bào)告
- 牙科用氣體市場(chǎng)發(fā)展前景分析及供需格局研究預(yù)測(cè)報(bào)告
- 工具袋產(chǎn)品供應(yīng)鏈分析
- 在線健身教育行業(yè)營(yíng)銷策略方案
- 牲畜用洗滌劑殺蟲劑市場(chǎng)發(fā)展前景分析及供需格局研究預(yù)測(cè)報(bào)告
- 物理學(xué)設(shè)備和儀器項(xiàng)目營(yíng)銷計(jì)劃書
- 拖運(yùn)設(shè)備礦井用產(chǎn)品供應(yīng)鏈分析
- 《美容藥物學(xué)》課程教學(xué)大綱
- 人教版五年級(jí)數(shù)學(xué)上冊(cè)課件滾動(dòng)練習(xí)2
- 四年級(jí)上冊(cè)數(shù)學(xué)課件-4.6 整數(shù)的四則運(yùn)算(運(yùn)算定律-加法結(jié)合律)▏滬教版 (共9張PPT)
- 人民武裝部公開招聘工作人員報(bào)名登記表
- 學(xué)校危房拆除申請(qǐng)書
- 人美版小學(xué)二年級(jí)上冊(cè)美術(shù)全冊(cè)精品課件
- 小學(xué)綜合實(shí)踐二年級(jí)上冊(cè)第3單元《主題活動(dòng)二:變化的影子》教案
- 前列腺增生病人的護(hù)理查房
- 隱蔽工程工驗(yàn)收記錄(表C5-1)
- 初中挫折教育思政課主題班會(huì)教案
- 五四制青島版2022-2023五年級(jí)科學(xué)上冊(cè)第四單元第13課《蘑菇和木耳》課件(定稿)
評(píng)論
0/150
提交評(píng)論