99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于嵌入式Linux系統(tǒng)實(shí)現(xiàn)YAFFS2文件系統(tǒng)存儲(chǔ)方案的設(shè)計(jì)

電子設(shè)計(jì) ? 來(lái)源:現(xiàn)代電子技術(shù) ? 作者:韋峰,盧再奇,劉偉 ? 2020-09-28 10:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

隨著嵌入式技術(shù)的不斷發(fā)展,嵌入式系統(tǒng)的應(yīng)用越來(lái)越廣泛,人們對(duì)于嵌入式系統(tǒng)功能的要求也越來(lái)越高,相應(yīng)地其大容量數(shù)據(jù)存儲(chǔ)和管理變得越來(lái)越重要。相對(duì)硬盤而言,F(xiàn)LASH等非易失性存儲(chǔ)器具有體積小、功耗低、成本低、抗震強(qiáng)等優(yōu)點(diǎn),已在嵌入式系統(tǒng)中被大量作為存儲(chǔ)設(shè)備使用,而大容量非易失數(shù)據(jù)存儲(chǔ)方案的應(yīng)用還存在成本和軟件支持方面的問題需要克服。大頁(yè)NAND FLASH具有寫入速度快、容量大、成本低等優(yōu)點(diǎn),適合于需要進(jìn)行數(shù)據(jù)存儲(chǔ)的場(chǎng)合。YAFFS2作為專門支持大頁(yè)NAND FLASH的文件系統(tǒng)在U-Boot和嵌入式Linux上一直沒有得到正式支持。本文結(jié)合部隊(duì)?wèi)?yīng)用實(shí)際,在嵌入式Linux系統(tǒng)中實(shí)現(xiàn)了大頁(yè)NAND FLASH和YAFFS2文件系統(tǒng)的結(jié)合,為裝備的數(shù)據(jù)存儲(chǔ)處理搭建起了小型的智能化平臺(tái)。本文內(nèi)容安排如下,首先介紹系統(tǒng)存儲(chǔ)方案特點(diǎn)和YAFFS2數(shù)據(jù)在大頁(yè)NAND FLASH上的儲(chǔ)存方式,然后詳細(xì)敘述系統(tǒng)移植和文件系統(tǒng)制作過(guò)程,最后對(duì)移植結(jié)果進(jìn)行測(cè)試。

1 系統(tǒng)存儲(chǔ)方案設(shè)計(jì)

某國(guó)產(chǎn)化設(shè)備用于取代隨裝多臺(tái)套設(shè)備,除完成原設(shè)備的數(shù)據(jù)記錄功能外,還需進(jìn)行數(shù)據(jù)翻譯、判讀,數(shù)據(jù)分析處理,二維顯示和三維動(dòng)態(tài)復(fù)現(xiàn)等功能;同時(shí),需存儲(chǔ)裝備長(zhǎng)時(shí)間工作輸出的所有原始數(shù)據(jù)信息,類似黑匣子功能,以供事后分析使用。具有程序量大,數(shù)據(jù)需實(shí)時(shí)存儲(chǔ),且數(shù)據(jù)存儲(chǔ)量大的特點(diǎn)。板上存儲(chǔ)設(shè)備包括SDRAM和FLASH,SDRAM為易失性存儲(chǔ)器,作為程序的運(yùn)行空間和記錄數(shù)據(jù)的緩存空間;FLASH為非易失性存儲(chǔ)器,用于存儲(chǔ)系統(tǒng)軟件程序和記錄數(shù)據(jù)。

嵌入式系統(tǒng)中應(yīng)用的FLASH主要有NORFLASH和NAND FLASH兩種。NOR FLASH的塊大小范圍為64~128 KB,其容量一般為l~32 MB,可作為嵌入式設(shè)備的啟動(dòng)設(shè)備,適合于代碼存儲(chǔ)。NAND FLASH的塊大小范圍為8~64 KB,容量一般為8~512 MB,適合于數(shù)據(jù)存儲(chǔ)。它們之間的主要差別有以下幾點(diǎn)。

(1)速度。在寫數(shù)據(jù)和擦除數(shù)據(jù)時(shí),NANDFLASH支持整塊擦寫操作,其速度比NOR FLASH要快得多,兩者相差近千倍;讀取時(shí),NAND FLASH要先向芯片發(fā)送地址信息進(jìn)行尋址才能開始讀寫數(shù)據(jù),而NOR FLASH的操作則是以字或字節(jié)為單位進(jìn)行的,直接讀取,所以讀取數(shù)據(jù)時(shí),NOR FLASH效率更高。

(2)容量和成本。NOR FLASH的每個(gè)存儲(chǔ)單元與位線相連,增加了芯片內(nèi)位線的數(shù)量,不利于存儲(chǔ)密度的提高。在面積和工藝相同的情況下,NANDFLASH的容量比NOR FLASH要大得多,生產(chǎn)成本更低。

(3)易用性。NAND FLASH的I/O端口采用復(fù)用的數(shù)據(jù)線和地址線,必須先通過(guò)寄存器串行地進(jìn)行數(shù)據(jù)存取,各個(gè)產(chǎn)品或廠商對(duì)信號(hào)的定義不同,增加了應(yīng)用的難度;NOR FLASH有專用的地址引腳來(lái)尋址,較容易與其他芯片進(jìn)行連接,另外還支持片上執(zhí)行XIP(eXecute In Place),應(yīng)用程序可以直接在FLASH內(nèi)部運(yùn)行,簡(jiǎn)化了產(chǎn)品設(shè)計(jì)。

(4)可靠性。由于FLASH的電器特性,在讀/寫數(shù)據(jù)過(guò)程中,會(huì)產(chǎn)生比特位反轉(zhuǎn),造成一位或幾位數(shù)據(jù)錯(cuò)誤。NAND FLASH位反轉(zhuǎn)的幾率比NOR FLASH高,在使用時(shí)需要使用EDC/ECC算法。NANDFLASH還可能會(huì)隨機(jī)分布?jí)膲K。

(5)耐久性。FLASH由于寫入和擦除數(shù)據(jù)時(shí)會(huì)導(dǎo)致介質(zhì)的氧化降解,導(dǎo)致芯片老化,所以并不適合頻繁地擦寫,NAND FLASH的擦寫次數(shù)是100萬(wàn)次,而NOR FLASH只有10萬(wàn)次。

基于以上分析,為了滿足經(jīng)常性的進(jìn)行實(shí)時(shí)快速大容量數(shù)據(jù)存儲(chǔ)和較長(zhǎng)使用壽命的要求,采用NANDFLASH來(lái)存儲(chǔ)操作系統(tǒng)和數(shù)據(jù),其復(fù)雜操作、比特位反轉(zhuǎn)和壞塊等問題可以通過(guò)文件系統(tǒng)解決。NORFLASH因?yàn)槌霈F(xiàn)位反轉(zhuǎn)和壞塊的幾率小,并且讀取速度快,用來(lái)存儲(chǔ)啟動(dòng)程序,能保證正常啟動(dòng)系統(tǒng)的前提下提高設(shè)備反應(yīng)時(shí)間。整個(gè)系統(tǒng)的存儲(chǔ)空間分配如圖1所示。

嵌入式Linux系統(tǒng)實(shí)現(xiàn)YAFFS2文件系統(tǒng)存儲(chǔ)方案的設(shè)計(jì)

整個(gè)系統(tǒng)存儲(chǔ)空間由SDRAM,NOR FLASH,NAND FLASH組成。其中,sDRAM分成程序空間(Prog Space)和數(shù)據(jù)空間(Data Space)。NORFLASH存儲(chǔ)系統(tǒng)啟動(dòng)程序U-Boot;NAND FLAsH分成程序空間(Prog Space)和數(shù)據(jù)空間(Data Space),程序空間中固化存儲(chǔ)Linux操作系統(tǒng)和YAFFS2文件系統(tǒng)及相應(yīng)的應(yīng)用程序,在U-Boot的控制下,通過(guò)頁(yè)傳輸方式讀入SDRAM程序空間中;數(shù)據(jù)空間中存儲(chǔ)來(lái)自前端的原始數(shù)據(jù),該數(shù)據(jù)在SDR-AM中打包,以頁(yè)方式將數(shù)據(jù)寫入NAND FLASH中,提高數(shù)據(jù)寫入速度。

對(duì)小頁(yè)NAND FLASH的文件系統(tǒng)支持已有比較多的編程實(shí)例可借鑒,而對(duì)本文使用的大頁(yè)NANDFLASH的編程支持還沒有完整的說(shuō)明。因此,移植嵌入式操作系統(tǒng),以建立對(duì)大頁(yè)NAND FLASH支持的文件系統(tǒng)是該存儲(chǔ)方案需解決的關(guān)鍵問題。

2 YAFFS/YAFFS2文件系統(tǒng)分析

目前廣泛應(yīng)用的嵌入式文件系統(tǒng)有JFFS/JFFS2(JournaIling FLASH File Systern) 和 YAFFS/YAFFS2(Yet Another FLASH File Syst-em)。JFFS/JFFS2文件系統(tǒng)主要針對(duì)NOR FLASH設(shè)計(jì),在NAND FLASH上性能不佳。YAFFS/YAFFS2文件系統(tǒng)是專門針對(duì)NAND FLASH設(shè)計(jì),其具有可寫入、修改并能永久保存文件的特性,并提供了損耗平衡和掉電保護(hù)。與JFFS相比,它減少了一些功能,因此速度更快、占用內(nèi)存更少。此外YAFFS自帶NANDFLASH芯片驅(qū)動(dòng),并為嵌入式系統(tǒng)提供了直接訪問文件系統(tǒng)的API,用戶可以不使用Linux中的MTD和VFS,直接對(duì)文件進(jìn)行操作。

YAFFS文件系統(tǒng)已發(fā)展為兩個(gè)版本,YAFFS和YAFFS2。YAFFS版本只支持512 B的小頁(yè)NANDFLASH。而YAFFS2作為YAFFS的升級(jí)版,在向下兼容小頁(yè)NAND FLASH的同時(shí)也能夠更好地支持2 KB的大頁(yè)NAND FLASH。YAFFS2的性能與YAFFS相比有很大提高,表1為YAFFS,YAFFS2(512 B×8),YAFFS2(2 KB×8)三者性能比較,從測(cè)試結(jié)果可以看出,YAFFS2和2 KB大頁(yè)NANDFLASH的結(jié)合更好地提高了存儲(chǔ)器操作效率。

YAFFS2文件系統(tǒng)在設(shè)計(jì)時(shí)就充分考慮了大頁(yè)NAND FLASH的結(jié)構(gòu),根據(jù)大頁(yè)NAND FLASH以頁(yè)面為單位存取的特點(diǎn),將文件組織成固定大小的頁(yè),利用大頁(yè)NAND FLASH提供的每個(gè)頁(yè)面(2 112 B,其中前2 048 B存儲(chǔ)數(shù)據(jù))64 B的備用空間(SpareData,OOB)來(lái)存放ECC和文件系統(tǒng)的組織信息,這樣不僅能夠?qū)崿F(xiàn)錯(cuò)誤檢測(cè)和壞塊處理,還能夠提高文件系統(tǒng)的加載速度。以三星公司的K9F1G08UOA的NANDFLASH為例,它的單片存儲(chǔ)容量為128 MB,由1 024 block組成,每個(gè)塊包含64 page,每個(gè)頁(yè)均包含一個(gè)2 048 B的數(shù)據(jù)區(qū)和64 B的備用空間,總共包含2 112 B。結(jié)構(gòu)如圖2所示。

表2說(shuō)明了YAFFS2文件系統(tǒng)數(shù)據(jù)在NANDFLASH的備用空間內(nèi)的存儲(chǔ)布局。

blockState:描述該塊的狀態(tài)。如果不是OxFF,就說(shuō)明是壞塊。相對(duì)應(yīng)的是,所有正常的塊,里面所有數(shù)據(jù)都是OxFF的。

chunkld:描述該頁(yè)在一個(gè)文件內(nèi)的索引,所以文件大小被限制在232×2 KB。chunkld為O,說(shuō)明此頁(yè)面保存的是文件頭。不為O,說(shuō)明是數(shù)據(jù)頁(yè)面。文件內(nèi)偏移量為0,即放在第一個(gè)頁(yè)面的文件,其chunkId為1,后面的以此類推。

ObjectID:描述對(duì)象ID號(hào),用來(lái)惟一標(biāo)示一個(gè)文件。所以YAFFS2文件系統(tǒng)支持的文件總數(shù)限制在232個(gè)。

nBytes:記錄該頁(yè)面內(nèi)的有效字節(jié)數(shù)。

blockSequence:記錄著各塊被分配出去的先后順序,每分配出去一塊,就加1。在YAFFS2文件系統(tǒng)建立的時(shí)候,塊的掃描順序就是由它決定的,而不是FLASH的物理介質(zhì)順序。在垃圾收集的時(shí)候也會(huì)以此作為參考之一,判斷該塊是否適合回收。

tagsEcc:Ecc,YAFFS Tags區(qū)域的ECC校驗(yàn)數(shù)據(jù)。

ECC:數(shù)據(jù)區(qū)的ECC校驗(yàn)數(shù)據(jù)。讀/寫數(shù)據(jù)區(qū)的數(shù)據(jù)時(shí),每256 B生成3 B ECC校驗(yàn)和,一頁(yè)面2 KB數(shù)據(jù)就會(huì)生成24 B的校驗(yàn)數(shù)據(jù)。

3 系統(tǒng)移植

此次開發(fā)采用宿主機(jī)+目標(biāo)系統(tǒng)的開發(fā)模式。宿主機(jī)為PC+Fedora9,F(xiàn)edora9安裝在PC的虛擬機(jī)內(nèi)。目標(biāo)系統(tǒng)軟硬件組成為目標(biāo)板(CPU為S3C2440A)+U-Boot+嵌入式Linux,Linux版本為2.6.29.4。交叉編譯工具為arm-linux-gcc-4.3.2。

選用嵌入式Linux系統(tǒng)是因?yàn)樗兄夹g(shù)上先進(jìn),健壯、安全;是多任務(wù)系統(tǒng),支持ARM體系結(jié)構(gòu);源碼開放,驅(qū)動(dòng)程序及其他資源非常豐富,良好的可移植性等優(yōu)點(diǎn)。嵌入式系統(tǒng)的移植從軟件角度可以分為以下四個(gè)步驟。如圖3所示。

(1)引導(dǎo)加載程序的移植,包括固化在固件(Fireware)中的boot代碼和Bootloader兩大部分。大多數(shù)嵌入式系統(tǒng)中并沒有固件,Bootlo-ader是上電后執(zhí)行的第一個(gè)程序。它主要用來(lái)初始化處理器及外設(shè),然后調(diào)用Linux內(nèi)核。

(2)嵌入式Linux內(nèi)核移植。特定于嵌入式處理系統(tǒng)的定制內(nèi)核以及內(nèi)核的啟動(dòng)參數(shù)。內(nèi)核的啟動(dòng)參數(shù)可以是內(nèi)核默認(rèn)的,或是由Bootlo-ader傳遞給它的。

(3)文件系統(tǒng)制作。包括根文件系統(tǒng)和建立于FLASH內(nèi)存設(shè)備之上的文件系統(tǒng)。里面包含了Linux系統(tǒng)配置文件和運(yùn)行應(yīng)用軟件所需要的庫(kù)等。

(4)用戶應(yīng)用程序編寫。特定于用戶的應(yīng)用程序,它所實(shí)現(xiàn)的功能通常就是設(shè)計(jì)該嵌入式系統(tǒng)所要達(dá)到的目標(biāo),它們也存儲(chǔ)在文件系統(tǒng)內(nèi)。

3.1 Bootloader移植

對(duì)于支持ARM架構(gòu)的Bootloader有U-Boot,Vivi等。U-Boot(Universal Boot Loader)即通用Bootloader,是遵循GPL條款的開放源代碼項(xiàng)目。它可以引導(dǎo)Linux,VxWorks,LynxOS等多種操作系統(tǒng)。支持PowerPC,x86,ARM等多種架構(gòu)的CPU,具有豐富的設(shè)備驅(qū)動(dòng)源碼,如串口、以太網(wǎng)、SDRAM,F(xiàn)LASH等。系統(tǒng)采用U-Boot的版本為1.1.6,它已支持SMDK2410開發(fā)板,在其基礎(chǔ)上進(jìn)行修改。U-Boot 1.1.6中對(duì)NAND FLASH的支持有新舊兩套代碼,新代碼在drivers/nand目錄下,舊代碼在driver/nand_legacy目錄下。本次移植選用新代碼,它移植自Lin-ux2.6.12,更加智能。移植過(guò)程分以下幾步。

(1)根據(jù)具體輸入時(shí)鐘,修改時(shí)鐘定義參數(shù)。SMDK2410開發(fā)板的默認(rèn)時(shí)鐘為12 MHz。

(2)依照實(shí)際開發(fā)板的內(nèi)存地址分配情況修改lowlevel init.S文件。

(3)針對(duì)S3C2410,S3C2440 NAND FLASH控制器的不同,修改接口參數(shù)。

(4)仿照內(nèi)核支持NAND FLASH的文件來(lái)編寫片選函數(shù)。命令和控制函數(shù),查詢狀態(tài)函數(shù)。

(5)根據(jù)具體NAND FLASH芯片設(shè)置時(shí)序參數(shù)。

(6)增加從NAND FLASH燒寫,讀取YAFFS2文件系統(tǒng)映像功能。

(7)修改Makefile文件,將新建文件編入U(xiǎn)-Boot中。

在編寫燒寫YAFFS2文件系統(tǒng)映像的命令時(shí),要注意YAFFS2文件系統(tǒng)映像里除了2 KB的數(shù)據(jù)外,后面還包括了64 B的OOB數(shù)據(jù),所以映像文件大小是以2 112 B為單位。OOB中已經(jīng)包含了ECC,在燒寫時(shí)不需要再計(jì)算ECC校驗(yàn)碼。燒寫時(shí),首先檢查是否為壞塊,是就跳過(guò),然后寫入2 KB的數(shù)據(jù),最后寫入64 B的OOB數(shù)據(jù)。還要增加對(duì)skipfirstblk參數(shù)的支持。使燒寫YAFFS2文件系統(tǒng)映像時(shí),跳過(guò)分區(qū)上第一個(gè)塊,這是由YAFFS2文件系統(tǒng)特性決定的。

由于不使用ECC校驗(yàn)碼,燒寫過(guò)程中會(huì)不斷提示以下信息:

Writing data without ECC to NAND-FLASH is not reeom-mended

可以修改driver/mtd/nand/nand base.C文件的nand_write_page函數(shù),將輸出這條信息的命令去掉。

最后執(zhí)行make XX_config和make all命令,生成的U-Boot.bin文件即可以運(yùn)行與目標(biāo)板上了。將它燒入NOR FLASH后啟動(dòng),在串口工具中能夠看到提示信息。輸入nand info命令即可查看到NAND FLASH的信息,說(shuō)明U-Boot識(shí)別出了NAND FLASH。

3.2 嵌入式Linux內(nèi)核移植

目前Linux內(nèi)核還沒有正式支持YAFFS文件系統(tǒng),所以需要通過(guò)補(bǔ)丁修改Linux內(nèi)核,另外YAFFS文件系統(tǒng)也需要MTD設(shè)備驅(qū)動(dòng)的支持。首先下載最新版本的2.6內(nèi)核,這里以linux-2.6.29.4為例。盡管Linux 2.6并不是一個(gè)真正的實(shí)時(shí)操作系統(tǒng),但其改進(jìn)的特性能夠滿足系統(tǒng)響應(yīng)需求。再下載YAFFS代碼包。內(nèi)有YAFFS和YAFFS 2兩個(gè)文件夾。其中YAFFS已經(jīng)不再維護(hù),進(jìn)入YAFFS2。文件夾內(nèi)有patch-ker.sh補(bǔ)丁文件,使用以下命令將YAFFS2加入到Linux內(nèi)核。

以上命令完成了三件事情:

(1)修改內(nèi)核fs/Kconfig。增加一行:source”fs/YAFFS2/Kconfig”。

(2)修改內(nèi)核fs/Kconfig。增加一行:ojb-MYM(CONFIG_YAFFS_FS)+=YAFFS2/。

(3)在內(nèi)核fs/目錄下創(chuàng)建YAFFS2目錄;將YAFFS2源碼目錄下面的Makefile.kernel文件復(fù)制為內(nèi)核fs/YAFFS2/Makefie;將YAFFS2源碼目錄的Kconfig文件復(fù)制到內(nèi)核fs/YAFFS2目錄下;將YAFFS2源碼目錄下的*.C*.h文件復(fù)制到內(nèi)核fs/YAFFS2目錄下。

進(jìn)入內(nèi)核目錄,修改makefile,并對(duì)內(nèi)核進(jìn)行默認(rèn)配置進(jìn)行修改,使其支持本開發(fā)板。

結(jié)合U-Boot信息修改NAND FLASH分區(qū),使其兩者結(jié)構(gòu)大小保持一致。注意分區(qū)的大小要以128 kB為單位。

根據(jù)具體NAND FLASH芯片特性,修改tacls,twrph0,twrphl的值。

修改arch/arm/tools/math-types文件,使其Linux內(nèi)核的機(jī)器號(hào)與Bootloader傳遞來(lái)的參數(shù)一致。建立好交叉編譯環(huán)境,在環(huán)境變量PATH中添加交叉編譯工具路徑。或者直接在makefile文件內(nèi)添加修改也可以。使用make s3c2410_defconfig命令,將2410的默認(rèn)配置文件寫到當(dāng)前目錄下的.config。使用make me-nuconfig命令配置內(nèi)核模塊的功能,要選中MTD和YAFFS2支持。在Boot options選項(xiàng)中增加以下語(yǔ)句。

使用make zImage命令,生成是zlmage映像文件。再用mkimage工具制作ulmage,uImage是U-Boot專用的映像文件,它在zImage之前加上一個(gè)長(zhǎng)度為0x40的“頭”,說(shuō)明這個(gè)映像文件的類型、加載位置、生成時(shí)間、大小等信息。

3.3 制作文件系統(tǒng)

嵌入式Linux系統(tǒng)都需要構(gòu)建根文件系統(tǒng),構(gòu)建根文件系統(tǒng)的規(guī)則在文件系統(tǒng)層次標(biāo)準(zhǔn)(Filesystem Hi-erarchy Standard,F(xiàn)HS)文檔中。首先建立根文件系統(tǒng)目錄和動(dòng)態(tài)鏈接庫(kù),然后使用Busybox工具可以生成根文件系統(tǒng)所需的bin,sbin,usr目錄和linuxrc文件。Bosybox是一個(gè)遵循GPL v2協(xié)議的開源項(xiàng)目,它在編寫過(guò)程總對(duì)文件大小進(jìn)行優(yōu)化,并考慮了系統(tǒng)資源有限(比如內(nèi)存等)的情況,為嵌入式系統(tǒng)提供了一個(gè)比較完整的工具集。

YAFFS2源代碼包內(nèi)除了本身文件系統(tǒng)代碼外,utils 目 錄下還包含了 mkYAFFSimage/mkYAFFS2image的代碼,修改Makefile里的內(nèi)核路徑編譯出mkYAFFSimage/mkYAFFS2image工具。其中mkYAFFSimage用于制作512 B的小頁(yè)YAFFS文件系統(tǒng),mkYAFFS2image用于制作2 KB以上的大頁(yè)YAFFS2文件系統(tǒng)。輸入以下格式命令,制作出支持大頁(yè)的YAFFS2文件系統(tǒng)映像。

mkYAFFS2image MYM{PRJROOT}rootfs rootfs.YAFFS

通過(guò)mkYAFFS2image制做出來(lái)的映像文件其OOB中包含的ECC是使用YAFFS2/YAFFS ecc.c文件中的YAFFS ECCCaimJlate函數(shù)計(jì)算出來(lái)的

ECC校驗(yàn)碼,其校驗(yàn)算法和nand ecc.c文件內(nèi)的nand_calculate_ecc函數(shù)校驗(yàn)算法不同,如果在內(nèi)核中由MTD來(lái)處理ECC,當(dāng)讀取NAND FLASH中的數(shù)據(jù)時(shí),會(huì)通過(guò)nand_calculate_ecc函數(shù)的算法再生成一個(gè)新的ECC校驗(yàn)和,校驗(yàn)的時(shí)候,將從OOB區(qū)中讀出的原ECC校驗(yàn)和新ECC校驗(yàn)和按位異或,其錯(cuò)誤的結(jié)果會(huì)造成系統(tǒng)認(rèn)為所有的頁(yè)面都是錯(cuò)誤的。解決辦法有兩種,一是在內(nèi)核編譯時(shí)把Lets YAFFS do itsown ECC選上,同時(shí)修改內(nèi)核把MTD驅(qū)動(dòng)中的ECC校驗(yàn)關(guān)閉;二是修改mkYAFFS2image.c文件,使其制作image時(shí)使用nand_caleulate_ecc函數(shù)的校驗(yàn)算法,在內(nèi)核編譯時(shí)不要把Lets YAFFS do its own ECC選上,同時(shí)打開MTD驅(qū)動(dòng)中的ECC校驗(yàn)。

3.4 系統(tǒng)測(cè)試

啟動(dòng)系統(tǒng)后,Bootloader首先運(yùn)行,然后它將內(nèi)核復(fù)制到內(nèi)存中,并且在內(nèi)存某個(gè)固定的地址設(shè)置好要傳遞給內(nèi)核的參數(shù),最后運(yùn)行內(nèi)核。內(nèi)核啟動(dòng)之后,它會(huì)將文件系統(tǒng)掛載為根文件系統(tǒng),接著啟動(dòng)文件系統(tǒng)中的應(yīng)用程序。啟動(dòng)途中會(huì)顯示如下信息:

以上信息說(shuō)明系統(tǒng)已經(jīng)找到NAND FLASH設(shè)備,并識(shí)別出分區(qū)。進(jìn)入系統(tǒng)后,輸入下面命令。

在輸出結(jié)果中,顯示了YAFFS2的相關(guān)信息,說(shuō)明Linux內(nèi)核已經(jīng)支持YAFFS2文件系統(tǒng)。

建立掛載點(diǎn),掛載blockdevice設(shè)備。

查看mount上的目錄,可以看到該目錄下有剛才拷貝的文件,將其umount后,再次mount上來(lái),發(fā)現(xiàn)拷貝的文件仍然存在,這時(shí)刪除該文件然后umount,再次mount后,發(fā)現(xiàn)拷貝的文件已經(jīng)被刪除,說(shuō)明該分區(qū)能正常讀/寫。

在FLASH上建立根文件系統(tǒng):

重新啟動(dòng),改變啟動(dòng)參數(shù):

重新啟動(dòng),內(nèi)核可以從NAND FLASH啟動(dòng)根文件系統(tǒng)。

4 結(jié)語(yǔ)

大頁(yè)NAND FLASH的快速擦除、讀/寫性能滿足了系統(tǒng)對(duì)實(shí)時(shí)性的要求,YAFFS2可靠的掉電保護(hù)和高效率的讀寫以及對(duì)NAND FLASH存儲(chǔ)設(shè)備的保護(hù)等優(yōu)勢(shì)增加了整個(gè)系統(tǒng)的安全性和健壯性,兩者的結(jié)合達(dá)到了裝備對(duì)數(shù)據(jù)的大容量存儲(chǔ)和管理的需求。目前,該系統(tǒng)已裝備于某部,用于實(shí)時(shí)監(jiān)測(cè)裝備的戰(zhàn)技術(shù)狀況,以及長(zhǎng)時(shí)間實(shí)時(shí)記錄裝備工作數(shù)據(jù),用于事后分析評(píng)估裝備性能和操作手水平,在部隊(duì)作訓(xùn)中發(fā)揮了重大作用。

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5149

    文章

    19651

    瀏覽量

    317220
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4529

    瀏覽量

    87394
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7140

    瀏覽量

    125527
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    嵌入式Linux啟動(dòng)時(shí)間優(yōu)化的秘密之二文件系統(tǒng)

    我們繼續(xù)上篇沒有講完的嵌入式Linux啟動(dòng)時(shí)間優(yōu)化方法,本文主要會(huì)講文件系統(tǒng)。想看上一篇的請(qǐng)查看本文結(jié)尾的鏈接。 1. 文件系統(tǒng) 不同的存儲(chǔ)
    發(fā)表于 04-03 17:28 ?5462次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>啟動(dòng)時(shí)間優(yōu)化的秘密之二<b class='flag-5'>文件系統(tǒng)</b>

    【PDF】基于S3C2440的Linux內(nèi)核移植和yaffs2文件系統(tǒng)制作

    `【PDF】基于S3C2440的Linux內(nèi)核移植和yaffs2文件系統(tǒng)制作`
    發(fā)表于 03-11 09:56

    移植yaffs2的問題?。。∏笾?/a>

    制作的2個(gè)根文件系統(tǒng)yaffs2/jffs2yaffs2不能被引導(dǎo)啟動(dòng)。但是可以通過(guò)jffs2開啟lin
    發(fā)表于 12-07 17:59

    關(guān)于yaffs2文件系統(tǒng)

    我用的nand flash是三星的S34ML08G2。其 Page Size: (2048 + 128) bytes; 128-byte spare area。內(nèi)核已確定支持yaffs2文件系統(tǒng)
    發(fā)表于 12-10 23:19

    移植yaffs2 文件系統(tǒng)問題

    之前移植的2.6.32的內(nèi)核,做的yaffs2文件系統(tǒng),可以用,但是移植linux3.2.36的內(nèi)核,移植yaffs2 后,卻遇到NAND geometry problems:chun
    發(fā)表于 06-13 05:45

    如何使用Yaffs2自身的ecc函數(shù)讀取文件

    我的Linux移植了yaffs2文件系統(tǒng)。mkyaffs2img工具使用的yaffs2自身的ecc函數(shù),在
    發(fā)表于 07-15 05:45

    busybox制作yaffs2文件系統(tǒng)提示出錯(cuò)該怎么辦?

    我的情況是這樣的:我現(xiàn)在移植的linux是4.14.3,用arm-linux-gcc4.4.3編譯的,添加了yaffs2的支持,掛接光盤的yaffs2
    發(fā)表于 09-09 01:10

    YAFFS文件系統(tǒng)嵌入式Linux上怎么實(shí)現(xiàn)

    NAND閃存是什么什么是YAFFS文件系統(tǒng)?YAFFS文件系統(tǒng)嵌入式Linux上的
    發(fā)表于 04-26 06:37

    嵌入式linux系統(tǒng)中常用的文件系統(tǒng)有哪些

    嵌入式linux系統(tǒng)中常用的文件系統(tǒng):閃存主要有NOR和NAND兩種技術(shù);因?yàn)镕lash存儲(chǔ)器的擦寫次數(shù)是有限的,NAND閃存還有特殊的硬件
    發(fā)表于 11-04 08:18

    分析YAFFS文件系統(tǒng)Linux系統(tǒng)中的構(gòu)建

    介質(zhì)上的嵌入式Linux中構(gòu)造YAFFS時(shí),YAFFS存在掛載時(shí)間過(guò)長(zhǎng)和損耗均衡性不足兩方面的缺點(diǎn),需要進(jìn)一步改進(jìn)和優(yōu)化。 1 YAFFS
    發(fā)表于 10-21 10:56 ?0次下載
    分析<b class='flag-5'>YAFFS</b><b class='flag-5'>文件系統(tǒng)</b>在<b class='flag-5'>Linux</b><b class='flag-5'>系統(tǒng)</b>中的構(gòu)建

    超大容量NANDFlash文件系統(tǒng)-YAFFS2Linux下的實(shí)現(xiàn)

    超大容量NANDFlash文件系統(tǒng)-YAFFS2Linux下的實(shí)現(xiàn)
    發(fā)表于 10-27 10:31 ?11次下載
    超大容量NANDFlash<b class='flag-5'>文件系統(tǒng)</b>-<b class='flag-5'>YAFFS2</b>在<b class='flag-5'>Linux</b>下的<b class='flag-5'>實(shí)現(xiàn)</b>

    YAFFS文件系統(tǒng)嵌入式Linux系統(tǒng)中的構(gòu)建與改進(jìn)

    介質(zhì)上的嵌入式Linux中構(gòu)造YAFFS時(shí),YAFFS存在掛載時(shí)間過(guò)長(zhǎng)和損耗均衡性不足兩方面的缺點(diǎn),需要進(jìn)一步改進(jìn)和優(yōu)化。 1 YAFFS
    發(fā)表于 11-30 07:50 ?1390次閱讀
     <b class='flag-5'>YAFFS</b><b class='flag-5'>文件系統(tǒng)</b>在<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>系統(tǒng)</b>中的構(gòu)建與改進(jìn)

    Linux最新UBI文件系統(tǒng)介紹

    嵌入式linux中文站關(guān)注嵌入式linux文件系統(tǒng)的發(fā)展。在linux-2.6.27以前,談到F
    發(fā)表于 04-27 19:37 ?6567次閱讀

    如何實(shí)現(xiàn)Linux內(nèi)核移植和yaffs2文件系統(tǒng)制作

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何實(shí)現(xiàn)Linux內(nèi)核移植和yaffs2文件系統(tǒng)制作。
    發(fā)表于 03-24 09:12 ?9次下載

    嵌入式linux系統(tǒng)中常用的文件系統(tǒng)

    原文:https://blog.csdn.net/li_wen01/article/details/80090624嵌入式linux系統(tǒng)中常用的文件系統(tǒng):閃存主要有NOR和NAND兩種
    發(fā)表于 11-01 16:56 ?12次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b><b class='flag-5'>系統(tǒng)</b>中常用的<b class='flag-5'>文件系統(tǒng)</b>