91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SylixOS下YAFFS掛載參數說明

發布時間:2020-05-02 13:20:37 來源:網絡 閱讀:1121 作者:jiangheng12138 欄目:編程語言
  1. 文件系統簡介

    YAFFS是第一個專門為NAND Flash存儲設計的嵌入式文件系統,適用于大容量的存儲設備,并且是在GPL協議下發布的,可在其網站免費獲得源代碼。YAFFS也是目前SylixOS下針對Flash類存儲設備的主要文件系統。

  2. YAFFS掛載參數說明

    在SylixOS中,想要在Flash類存儲設備上掛載YAFFS文件系統,需要創建struct yaffs_dev結構體,并填充一系列的啟動參數,并再將yaffs_dev結構體注冊進YAFFS,其具體流程如程序清單2. 1所示。

    程序清單2. 1 YAFFS啟動參數

     

    static struct yaffs_dev    __GyaffsDev;             /* 定義YAFFS設備結構體      */
    __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);                       /* 添加到YAFFS設備          */
    yaffs_mount(cBootDevName);                            /* 掛載YAFFS設備            */

    __GyaffsDev.param參數說明如下:

  • chunks_per_block:每塊頁數;
  • total_bytes_per_chunk:每頁字節數;
  • name:設備名稱;
  • n_reserved_block:保留塊數;
  • start_block:YAFFS起始塊號;
  • end_block:YAFFS結束塊號;
  • spare_bytes_per_chunk:Flash的OOB區大小;
  • is_yaffs2:是否使用YAFFS2;
  • use_nand_ecc:是否使用ECC校驗;
  • no_tags_ecc:YAFFS的tags數據是否使用ECC校驗;
  • n_caches:YAFFS緩沖區塊數;
  • inband_tags:tags數據的位子。

這里需要特別說明的是,掛載YAFFS文件系統后,Flash的每一頁都會存在一個tags的結構體,用來記錄YAFFS的相關信息,上面的參數inband_tags就表示tags存放的位置,tags的大小為16字節,其定義如程序清單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:頁內有效數據字節數。

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

另外,對于頁大小非512字節的Nand Flash,如果由于控制器需要記錄額外信息等原因導致OOB區不足,理論上也可以將tags存放到數據區域內,但在SylixOS中使用時會出現錯誤,原因未知,可能是YAFFS版本過低導致的,因為低版本YAFFS確實存在這個問題。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

元朗区| 繁昌县| 福鼎市| 罗江县| 伽师县| 平乐县| 光泽县| 巴彦县| 改则县| 德保县| 河北省| 东源县| 阳原县| 齐河县| 嘉义市| 临城县| 太湖县| 宁乡县| 石棉县| 合阳县| 墨脱县| 施甸县| 越西县| 建水县| 淮滨县| 新安县| 浦东新区| 新民市| 云霄县| 句容市| 青阳县| 盘山县| 同仁县| 南雄市| 佳木斯市| 郎溪县| 永宁县| 株洲市| 视频| 全南县| 石泉县|