欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Yaffs文件系統結構及應用

1         Yaffs文件系統結構

 

1.1        簡(jiǎn)介

1.1.1          應用場(chǎng)合

YaffsYet Another Flash File System)文件系統是專(zhuān)門(mén)針對NAND閃存設計的嵌入式文件系統,目前有YAFFSYAFFS2兩個(gè)版本,兩個(gè)版本的主要區別之一在于YAFFS2能夠更好的支持大容量的NAND FLASH芯片。

Yaffs文件系統有些類(lèi)似于JFFS/JFFS2文件系統,與之不同的是JFFS1/2文件系統最初是針對NOR FLASH的應用場(chǎng)合設計的,而NOR FLASHNAND FLASH本質(zhì)上有較大的區別,所以盡管JFFS1/2 文件系統也能應用于NAND FLASH,但由于它在內存占用和啟動(dòng)時(shí)間方面針對NOR的特性做了一些取舍,所以對NAND來(lái)說(shuō)通常并不是最優(yōu)的方案。

1.1.2          NORNAND的比較

基本上NOR比較適合存儲程序代碼,其容量一般較?。ū热缧∮?/span>32MB),價(jià)格較高,而NAND容量可達1GB以上,價(jià)格也相對便宜,適合存儲數據。一般來(lái)說(shuō),128MB以下容量NAND FLASH 芯片的一頁(yè)大小為528字節,用來(lái)存放數據,另外每一頁(yè)還有16字節的備用空間(SpareData,OOB),用來(lái)存儲ECC校驗/壞塊標志等信息,再由若干頁(yè)組成一個(gè)塊,通常一塊為32頁(yè)16K。

NOR相比,NAND不是完全可靠的,每塊芯片出廠(chǎng)時(shí)都有一定比例的壞塊存在,對數據的存取不是使用地址映射而是通過(guò)寄存器的操作,串行存取數據。

1.2        Yaffs文件系統數據在NAND上的存儲方式

Yaffs對文件系統上的所有內容(比如正常文件,目錄,鏈接,設備文件等等)都統一當作文件來(lái)處理,每個(gè)文件都有一個(gè)頁(yè)面專(zhuān)門(mén)存放文件頭,文件頭保存了文件的模式、所有者id、組id、長(cháng)度、文件名、Parent Object ID等信息。因為需要在一頁(yè)內放下這些內容,所以對文件名的長(cháng)度,符號鏈接對象的路徑名等長(cháng)度都有限制。

前面說(shuō)到對于NAND FLASH上的每一頁(yè)數據,都有額外的空間用來(lái)存儲附加信息,通常NAND驅動(dòng)只使用了這些空間的一部分,Yaffs正是利用了這部分空間中剩余的部分來(lái)存儲文件系統相關(guān)的內容。以512+16B為一個(gè)PAGENAND FLASH芯片為例,Yaffs文件系統數據的存儲布局如下所示:

 

0..511

數據區域

512..515

YAFFS TAG

516

Data status byte

517

Block status byte 壞塊標志位

518..519

YAFFS TAG

520..522

256字節數據的ECC校驗結果

523..524

YAFFS TAG

525..527

256字節數據的ECC校驗結果

 

可以看到在這里YAFFS一共使用了8個(gè)BYTE用來(lái)存放文件系統相關(guān)的信息(yaffs_Tags)。這8個(gè)Byte的具體使用情況按順序如下:

Bits

Content

20

ChunkID,該page在一個(gè)文件內的索引號,所以文件大小被限制在2^20 PAGE 512Mb

2

2 bits serial number

10

ByteCount page內的有效字節數

18

ObjectID 對象ID號,用來(lái)唯一標示一個(gè)文件

12

Ecc, Yaffs_Tags本身的ECC校驗和

2

Unused

 

其中Serial Number在文件系統創(chuàng )建時(shí)都為0,以后每次寫(xiě)具有同一ObjectIDChunkIDpage的時(shí)候都加一,因為Yaffs在更新一個(gè)PAGE的時(shí)候總是在一個(gè)新的物理Page上寫(xiě)入數據,再將原先的物理Page刪除,所以該serial number可以在斷電等特殊情況下,當新的page已經(jīng)寫(xiě)入但老的page還沒(méi)有被刪除的時(shí)候用來(lái)識別正確的Page,保證數據的正確性。

ObjectID號為18bit,所以文件的總數限制在256K26萬(wàn)個(gè)左右。

最后以上這些是針對Yaffs1而言,對于Yaffs2因為針對chunk size大于1kNAND FLASH,在Tags各分量及總體尺寸上都做了修改,以便更快更好的處理大容量的NAND FLASH芯片。由于Tag尺寸的增大,在512+16B類(lèi)型的NAND FLASH上就一個(gè)Trunk對應一個(gè)page的情況,目前就無(wú)法使用Yaffs2文件系統了。

由于文件系統的基本組織信息保存在頁(yè)面的備份空間中,因此,在文件系統加載時(shí)只需要掃描各個(gè)頁(yè)面的備份空間,即可建立起整個(gè)文件系統的結構,而不需要像JFFS1/2 那樣掃描整個(gè)介質(zhì),從而大大加快了文件系統的加載速度。

1.3        yaffs文件系統在內存中的組織方式

1.3.1          SupperBlock

操作文件系統的第一步自然是取得SuperBlock了,Yaffs文件系統本身在NAND Flash上并不存在所謂的SuperBlock塊,完全是在文件系統mount的過(guò)程中由read_super函數填充的,不過(guò)有意思的一點(diǎn)是,由于物理上沒(méi)有存儲superblock塊,所以NAND Flash上的yaffs文件系統本身沒(méi)有存儲filesystem的魔數(MagicNum),在內存中superblock里的s_magic參數也是直接賦值的,所以存儲在NAND FLASH上的任何文件系統都能被當作yaffs文件系統mount上來(lái),只是數據都會(huì )被當作錯誤數據放在lost+found目錄中,不知道這算不算yaffs文件系統的一個(gè)bug。

通常一個(gè)具體的文件系統在VFSSuper_block結構中除了通用的數據外,還有自己專(zhuān)用的數據,Yaffs文件系統的專(zhuān)用數據是一個(gè)yaffs_DeviceStruct結構,主要用來(lái)存儲一些相關(guān)軟硬件配置信息,相關(guān)函數指針和統計信息等。

1.3.2          文件在內存中的組織方式

mount過(guò)程執行read_super的過(guò)程中,Yaffs文件系統還需要將文件系統的目錄結構在內存中建立起來(lái)。由于沒(méi)有super塊,所以需要掃描Yaffs分區,根據從OOB中讀取出的yaffs_tags信息判斷出是文件頭page還是數據page。再根據文件頭page中的內容以及數據page中的ObjectID/ChunkID/serial Number等信息在內存中為每個(gè)文件(Object)建立一個(gè)對應的yaffs_object對象。

yaffs_object結構中,主要包含了:

Ø       如修改時(shí)間,用戶(hù)ID,組ID等文件屬性;

Ø       用作yaffs文件系統維護用的各種標記位如臟(dirty)標記,刪除標記等等;

Ø       用作組織結構的,如指向父目錄的Parent指針,指向同級目錄中其他對象鏈表的siblings雙向鏈表頭結構

此外根據Object類(lèi)型的不同(目錄,文件,鏈接),對應于某一具體類(lèi)型的Object,在Yaffs_object中還有其各自專(zhuān)有的數據內容

Ø       普通文件:文件尺寸,用于快速查找文件數據塊的yaffs_Tnode 樹(shù)的指針等

Ø       目錄:目錄項內容雙向鏈表頭(children

Ø       鏈接:softlinkalias,hardlink對應的ObjectID

 

除了對應于存儲在NAND FLASH上的object而建立起來(lái)的yaffs_object以外,在read_super執行過(guò)程中還會(huì )建立一些虛擬對象(Fake Object),這些Fake ObjectNAND FLASH上沒(méi)有對應的物理實(shí)體,比如在建立文件目錄結構的最初,yaffs會(huì )建立四個(gè)虛擬目錄(Fake Directory):rootDir, unlinkedDir, deleteDir, lostNfoundDir分別用作根目錄,unlinked對象掛接的目錄,delete對象掛接的目錄,無(wú)效或零時(shí)數據塊掛接的目錄。

通過(guò)創(chuàng )建這些yaffs_object,yaffs文件系統就能夠將存儲在NAND FLASH上數據系統的組織起來(lái),在內存中維護一個(gè)完整的文件系統結構。

2         Yaffs文件系統集成及應用相關(guān)

2.1        系統移植

這里所謂移植,就是在特定的軟硬件環(huán)境里編譯出yaffs文件系統模塊了。目前最新的yaffs版本的代碼里主要是按照2.6內核的方式寫(xiě)的KconfigMakefile,對于2.4內核來(lái)說(shuō),改起來(lái)也很簡(jiǎn)單,基本上,只需要:

 

Ø       在內核中建立YAFFS目錄fs/yaffs,并把下載的YAFFS代碼復制到該目錄下面。

Ø       參考yaffs代碼中的Kconfig文件,按照2.4內核的風(fēng)格修改你自己的Config.in文件,使得可以配置YAFFS。

Ø       修改fs/makefile,加入yaffs目錄

Ø       按照2.4內核的風(fēng)格修改YAFFS目錄中的Makefile文件。

 

只是在配置YAFFS的時(shí)候需要注意一點(diǎn),即使你的NAND FLASH512+16B的,不需要使用YAFFS2,也需要將對2k pageNAND FLASH的支持這一項選上,否則編譯無(wú)法通過(guò)(因為部分代碼沒(méi)有用CONFIG宏包起來(lái)),不知道這是不是我下載的這個(gè)版本的個(gè)別現象,還是對Makefile還需要進(jìn)一步的修改。

此外就是最好把Lets Yaffs do its own ECC選上,理由后面會(huì )說(shuō),其他選項就無(wú)所謂了,主要是對性能的調整,看著(zhù)選吧,按推薦配置好了,比如Turn off debug chunk erase check,這一項,我試驗的結果選上后平均可以提高20-30%左右的擦寫(xiě)速度。

2.2        Yaffs文件系統的制作和使用

2.2.1          通過(guò)Yaffs Image文件制作yaffs文件系統

Yaffs源代碼包的utils目錄下包含了mkyaffsimage/mkyaffs2image的代碼,簡(jiǎn)單的修改一下Makefile里的內核路徑就能編譯出mkyaffsimage/mkyaffs2image工具。

運行mkyaffsimage dir imagename可以制作出yaffs1文件系統的鏡像。

但是,需要注意的是,制作出來(lái)的yaffs image文件與通常的文件系統的image文件不同,因為在image文件里除了以512字節為單位的一個(gè)pagedata數據外,同時(shí)緊跟在后還包括了16字節為單位的NAND備份數據區(OOB)的數據。所以實(shí)際上是以528個(gè)字節為單位的。就是因為包含了這額外的16字節/page的數據,所以基本上常規辦法如dd,或者通常的下載其它類(lèi)型image的工具就無(wú)法正常下載yaffs image了,需要修改你所使用的下載工具的代碼,使得它能將yaffs image中的這些額外數據也寫(xiě)入NAND FLASH OOB中。

這里還有一點(diǎn)需要注意的是,通過(guò)mkyaffsimage制做出來(lái)的imageOOB中也包含它自己計算的ECC校驗數據,其校驗算法有可能和MTD NAND驅動(dòng)的校驗算法不同,如果在內核中由MTD來(lái)處理ECC,會(huì )造成MTD認為所有的page都校驗錯誤。所以,這也是我前面說(shuō)最好把Lets Yaffs do its own ECC選上的原因,同時(shí),要把MTD NAND驅動(dòng)中的ECC校驗關(guān)閉。

2.2.2          其它方式制作yaffs文件系統

如果不考慮產(chǎn)線(xiàn)批量下載的話(huà),也可以通過(guò)mount拷貝的方式準備yaffs文件系統。用flash_eraseallNAND FLASH分區擦除,然后做為yaffs分區直接mount上來(lái),將文件系統的內容拷貝上去就可以了。這可能是在真正的NAND FLASH上試驗yaffs文件系統最簡(jiǎn)單的方式了。

2.2.3          沒(méi)有相應的NAND設備時(shí)如何測試yaffs文件系統

沒(méi)有相應的NAND FLASH設備包含兩種情況:

Ø       硬件上沒(méi)有NAND FLASH,開(kāi)發(fā)板上沒(méi)有或者想在主機環(huán)境中測試yaffs文件系統

Ø       沒(méi)有合適的page sizeNAND FLASH芯片,比如板上NAND FLASH芯片為512+16的格式,但是想要試驗Yaffs2文件系統。

Yaffs提供了兩種用來(lái)在這種情況下測試yaffs文件系統的途徑。

2.2.3.1        Nandemul

Yaffs source包里包含了mtdemul目錄,Yaffs2中該目錄下的文件主要是Nandemul2k.c用來(lái)模擬2K page sizeNAND FLASH。在Yaffs中則是Nandemul.c用來(lái)模擬512字節page sizeNAND FLASH。

稍微修改一下Makeflie將編譯出來(lái)的模塊插入內核,將在/dev/mtd /dev/mtdblock目錄下創(chuàng )建一個(gè)新的MTD設備。然后就可以將該設備當作一個(gè)物理的MTD NAND設備分區進(jìn)行相關(guān)的操作,可以在上面創(chuàng )建yaffs文件系統,mount umount等等。這種方法不僅適用于yaffs文件系統,同樣也適用于其它可用于NAND設備的文件系統。

2.2.3.2        Yaffsram

根據yaffs 官方文檔的描述,通過(guò)mount –t yaffsram none /mountpoint 可以在內存中建立一個(gè)yaffs分區,這有些類(lèi)似于ramfs。不過(guò),在試驗最新版本的Yaffs2文件系統時(shí),該功能并不可用,只有Yaffs1文件系統的代碼包里包含了相關(guān)的代碼。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
小菠蘿
在U-Boot中實(shí)現對Yaffs鏡像的支持
利用NAND Flash實(shí)現嵌入式系統的遠程更新
cramfs+yaffs2文件系統制作
2.6.14內核移植心得 - luofuchong - IT博客
在掛載yaffs2 文件系統出現的問(wèn)題和解決辦法
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久