<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 對ROMFS文件系統的分析和改進(jìn)

對ROMFS文件系統的分析和改進(jìn)

作者: 時(shí)間:2012-03-26 來(lái)源:網(wǎng)絡(luò ) 收藏

romfs_read_super()用來(lái)讀取的首部,并利用該首部初始化一個(gè)超級塊對象作為相應的超級塊,具體流程如下

1 初始化超級塊。

A 設置一次讀取的塊大小并初始化超級塊對象某些域。

B 從指定中讀取第0塊到一個(gè)緩沖區。bh=sb_bread(s, 0),其中s是的超級塊對象。ROMFS的結構被保存到緩沖區bh中。

C 取出ROMFS的文件系統結構,rsb = (struct romfs_super_block *)bh->b_data,rsb是一個(gè)romfs_super_block結構,用以保存該ROMFS的文件系統結構的數據。然后對該數據進(jìn)行檢驗,確定其文件系統類(lèi)型,檢驗和,文件系統大小。

D 繼續初始化超級塊對象某些域,比較重要的是s_magic = ROMFS_MAGIC和s_flags |= MS_RDONLY,分別表明了該超級塊的magic簽名和s_flags參數,此處它們分別表示該文件系統類(lèi)型為romfs,并且是只讀文件系統。

2 給超級塊對象的操作表賦值(s->s_op = romfs_ops)

3 為根目錄分配目錄項 s->s_root = d_alloc_root(iget(s,sz), sz為文件系統開(kāi)始偏移。

超級塊操作表中romfs文件系統實(shí)現了兩個(gè)函數

static struct super_operations romfs_ops = {

read_inode: romfs_read_inode,

statfs: romfs_statfs,};

函數romfs_read_inode是從ROMFS中讀取一個(gè)inode索引節點(diǎn)對象并進(jìn)行一些初始化工作,具體流程如下:

1 根據inode參數尋找對應的索引節點(diǎn)。

2 初始化索引節點(diǎn)某些域

3 根據該inode對應的文件的訪(fǎng)問(wèn)權限和類(lèi)別來(lái)設置索引節點(diǎn)的相應操作表

A 如果是目錄文件則將索引節點(diǎn)操作表設為i_>i_op=romfs_dir_inode_operations;文件操作表設置為i->i_fop=romfs_dir_operations。

B 如果是常規文件,則將文件操作表設置為i->i_fop=generic_ro_fops;將頁(yè)高訴緩存表設置為i-> i_data.a_ops=romfs_aops;由于romfs是只讀文件系統,它在對常規文件操作時(shí)不需要索引節點(diǎn)操作,如 mknod,link等,因此不用設置索引節點(diǎn)操作表。

對常規文件的操作也只需要使用內核提供的通用函數表generic_ro_fops ,它包含基本的三種常規文件操作:

llseek: generic_file_llseek,

read: generic_file_read,

mmap: generic_file_mmap,

這幾種函數是塊設備讀取的通用函數,它們可以實(shí)現對ROMFS中常規文件的讀取,尋址等操作。

C 如果是符號鏈接文件,則將索引節點(diǎn)操作表設置為
 i->i_op = page_symlink_inode_operation;
page_symlink_inode_operations是通用的符號鏈接操作表。同時(shí)還需要實(shí)現頁(yè)高速緩
存操作,因此將頁(yè)高訴緩存表設置為i->i_data.a_ops=romfs_aops。

D 如果是套接字或管道則進(jìn)行特殊文件初始化操作init_special_inode(I,ino,nextfh);

函數romfs_statfs用于提取一些ROMFS的基本信息,包括文件系統大小,卷名等。相對而言非常簡(jiǎn)單。

5.對ROMFS的改進(jìn)

5.1 改進(jìn)思路

ROMFS有緊湊,小巧等優(yōu)點(diǎn),但是也存在一些明顯的不足。作為一個(gè)只讀的文件系統,ROMFS的中文件最大只能達到256M。因此難以在 ROMFS中保存較大的文件。在實(shí)際工作中我們常常會(huì )碰到超過(guò)256M的大文件,因此本人對ROMFS做了一些改進(jìn),使它能夠容納超過(guò)256M的文件。

ROMFS中限制文件大小的原因在于ROMFS的文件結構。ROMFS采用連續存放數據的策略,每個(gè)文件都必須放在連續空間內,故文件尋址只能是一級尋址,不能通過(guò)增減數據塊來(lái)改變文件大小。雖然ROMFS使用32位地址進(jìn)行文件的尋址操作,但該32位地址的后4位留做它用,因此ROMFS實(shí)際用于文件尋址的地址只有28位,這就造成ROMFS的任意兩個(gè)文件頭之間地址相差不能超過(guò)256M,這就是ROMFS中文件大小不能超過(guò)256M的原因。



關(guān)鍵詞: ROMFS 文件系統

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>