SylixOS下YAFFS掛載參數(shù)說明

  1. 文件系統(tǒng)簡介

    YAFFS是第一個(gè)專門為NAND Flash存儲設(shè)計(jì)的嵌入式文件系統(tǒng),適用于大容量的存儲設(shè)備,并且是在GPL協(xié)議下發(fā)布的,可在其網(wǎng)站免費(fèi)獲得源代碼。YAFFS也是目前SylixOS下針對Flash類存儲設(shè)備的主要文件系統(tǒng)。

    讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、曲麻萊網(wǎng)站維護(hù)、網(wǎng)站推廣。

  2. YAFFS掛載參數(shù)說明

    在SylixOS中,想要在Flash類存儲設(shè)備上掛載YAFFS文件系統(tǒng),需要?jiǎng)?chuàng)建struct yaffs_dev結(jié)構(gòu)體,并填充一系列的啟動(dòng)參數(shù),并再將yaffs_dev結(jié)構(gòu)體注冊進(jìn)YAFFS,其具體流程如程序清單2. 1所示。

    程序清單2. 1 YAFFS啟動(dòng)參數(shù)

     

    static struct yaffs_dev    __GyaffsDev;             /* 定義YAFFS設(shè)備結(jié)構(gòu)體      */
    __GyaffsDev.param.name	                     = cBootDevName;                                                                                        __GyaffsDev.param.total_bytes_per_chunk	     = pmtdinfoMtd->writesize;
    __GyaffsDev.param.chunks_per_block           =
    pmtdinfoMtd->erasesize/pmtdinfoMtd->writesize;
    __GyaffsDev.param.n_reserved_blocks          = 10;
    __GyaffsDev.param.start_block         	     = NAND_N0_SATRT_BLOCK;
    __GyaffsDev.param.end_block 		     =		
    __GyaffsDev.param.start_block +NAND_N0_BLOCK_NUM;
    __GyaffsDev.param.spare_bytes_per_chunk	     = pmtdinfoMtd->oobsize;
    __GyaffsDev.param.is_yaffs2                  = 1;
    __GyaffsDev.param.use_nand_ecc               = 1;
    __GyaffsDev.param.no_tags_ecc                = 0;
    __GyaffsDev.param.n_caches                   = 10;
    __GyaffsDev.driver_context                   = (void *)pmtdinfoMtd;
    __GyaffsDev.os_context                       = (void *)&__GyaffsDev;
    __GyaffsDev.param.inband_tags                = 1;
    
    yaffs_mtd_drv_install(&__GyaffsDev);
    yaffs_add_device(&__GyaffsDev);                       /* 添加到Y(jié)AFFS設(shè)備          */
    yaffs_mount(cBootDevName);                            /* 掛載YAFFS設(shè)備            */

    __GyaffsDev.param參數(shù)說明如下:

  • chunks_per_block:每塊頁數(shù);
  • total_bytes_per_chunk:每頁字節(jié)數(shù);
  • name:設(shè)備名稱;
  • n_reserved_block:保留塊數(shù);
  • start_block:YAFFS起始塊號;
  • end_block:YAFFS結(jié)束塊號;
  • spare_bytes_per_chunk:Flash的OOB區(qū)大??;
  • is_yaffs2:是否使用YAFFS2;
  • use_nand_ecc:是否使用ECC校驗(yàn);
  • no_tags_ecc:YAFFS的tags數(shù)據(jù)是否使用ECC校驗(yàn);
  • n_caches:YAFFS緩沖區(qū)塊數(shù);
  • inband_tags:tags數(shù)據(jù)的位子。

這里需要特別說明的是,掛載YAFFS文件系統(tǒng)后,F(xiàn)lash的每一頁都會(huì)存在一個(gè)tags的結(jié)構(gòu)體,用來記錄YAFFS的相關(guān)信息,上面的參數(shù)inband_tags就表示tags存放的位置,tags的大小為16字節(jié),其定義如程序清單2. 2所示。

程序清單2. 2 tags信息

 

struct yaffs_packed_tags2_tags_only {
	unsigned 	seq_number;
	unsigned 	obj_id;
	unsigned 	chunk_id;
	unsigned	 n_bytes;
};

  • seq_number:本頁所屬塊序列號;
  • obj_id:對象ID;
  • chunk_id:該頁在文件中的位置;
  • n_bytes:頁內(nèi)有效數(shù)據(jù)字節(jié)數(shù)。

inband_tags參數(shù)的值為0時(shí),表示tags存放在Flash頁的OOB區(qū)域內(nèi),值為1時(shí),表示tags存放在Flash頁的數(shù)據(jù)區(qū)域內(nèi),值得注意的是,對于頁大小為512字節(jié)的Nand Flash,它的OOB區(qū)域大小只有16字節(jié),并且這些字節(jié)需要用于記錄壞塊、ECC校驗(yàn)等信息,不足以保存YAFFS的tags信息,因此頁大小為512字節(jié)的Nand Flash需要將inband_tags參數(shù)設(shè)置為1。

另外,對于頁大小非512字節(jié)的Nand Flash,如果由于控制器需要記錄額外信息等原因?qū)е翺OB區(qū)不足,理論上也可以將tags存放到數(shù)據(jù)區(qū)域內(nèi),但在SylixOS中使用時(shí)會(huì)出現(xiàn)錯(cuò)誤,原因未知,可能是YAFFS版本過低導(dǎo)致的,因?yàn)榈桶姹綴AFFS確實(shí)存在這個(gè)問題。

分享標(biāo)題:SylixOS下YAFFS掛載參數(shù)說明
本文來源:http://bm7419.com/article16/gijcgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、外貿(mào)網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)、靜態(tài)網(wǎng)站、做網(wǎng)站電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化