日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

YAFFS2移植到AliOS Things指南

發(fā)布時(shí)間:2024/8/23 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 YAFFS2移植到AliOS Things指南 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

摘要: YAFFS2介紹 YAFFS(Yet Another Flash File System)是第一個(gè)專門為NAND Flash存儲器設(shè)計(jì)的嵌入式文件系統(tǒng),適用于大容量的存儲設(shè)備。YAFFS 是基于日志的文件系統(tǒng),提供磨損平衡和掉電恢復(fù)的健壯性。

點(diǎn)此查看原文:http://click.aliyun.com/m/41950/

YAFFS2介紹

YAFFS(Yet Another Flash File System)是第一個(gè)專門為NAND Flash存儲器設(shè)計(jì)的嵌入式文件系統(tǒng),適用于大容量的存儲設(shè)備。YAFFS 是基于日志的文件系統(tǒng),提供磨損平衡和掉電恢復(fù)的健壯性。它還為大容量的Flash 芯片做了很好的調(diào)整,針對啟動時(shí)間和RAM 的使用做了優(yōu)化。它適用于大容量的存儲設(shè)備,Yaffs代碼已成功用于許多不同的32位和64位CPU,包括MIPS,68000,ARM,ColdFire,PowerPC和x86,甚至被用于各種DSP架構(gòu)芯片。

目前有YAFFS和YAFFS2兩個(gè)版本,YAFFS1和YAFFS2主要差異在于PAGE讀寫size的大小,YAFFS2可支持到2K Bytes page, 遠(yuǎn)高于YAFFS的512 Bytes, 因此對大容量NAND Flash更具優(yōu)勢。YAFFS2是目前NAND Flash的首選文件系統(tǒng)。

YAFFS2具有如下特點(diǎn):

  • 使用C代碼編寫,支持大端和小端處理器,易于移植。
  • 提供nand flash壞塊處理機(jī)制和ECC校驗(yàn)算法,可發(fā)現(xiàn)并糾正一定量的位翻轉(zhuǎn)。
  • 采用日志式文件系統(tǒng)設(shè)計(jì),異常掉電不會造成文件系統(tǒng)破壞,掉電后恢復(fù)速度快。
  • 擁有高度優(yōu)化和可預(yù)測的垃圾收集策略,具有優(yōu)異的性能和高度的確定性。
  • 比大多數(shù)日志式文件系統(tǒng)具有更低的內(nèi)存占用。
  • 支持POSIX接口,易于使用。
  • YAFFS2移植

    1. YAFFS2源碼獲取

    官方網(wǎng)站:https://yaffs.net/get-yaffs

    代碼分為如下幾部分:

    A、核心文件系統(tǒng)代碼,位于yaffs2目錄下

    文件說明
    yaffs_allocator.c分配Yaffs對象和tnode結(jié)構(gòu)
    yaffs_bitmap.cblock和chunk相關(guān)處理
    yaffs_ecc.cecc校驗(yàn)相關(guān)代碼
    yaffs_guts.cyaffs主要算法
    affs_nameval.c用于處理擴(kuò)展屬性(xattr)的名稱/值代碼。
    yaffs_nand.cnand flash抽象接口文件
    yaffs_packedtags1.cyaffs1的tag相關(guān)定義代碼
    yaffs_packedtags2.cyaffs2的tag相關(guān)定義代碼
    yaffs_summary.c處理塊信息相關(guān)代碼
    yaffs_tagscompat.c兼容yaffs1模式的tag相關(guān)代碼
    yaffs_tagsmarshall.c標(biāo)記編組代碼
    yaffs_verify.c校驗(yàn)相關(guān)代碼
    yaffs_yaffs1.cyaffs1模式相關(guān)代碼
    yaffs_yaffs2.cyaffs2模式相關(guān)代碼

    B、直接接口文件,位于yaffs2/direct目錄下

    文件說明
    yaffs_attribs.c屬性處理代碼
    yaffs_error.c錯(cuò)誤報(bào)告代碼
    yaffsfs.cYaffs直接接口封裝代碼
    yaffs_hweight.c字節(jié)使用頻率統(tǒng)計(jì)代碼
    yaffs_qsort.cyaffs2掃描使用到的qsort代碼

    C、flash驅(qū)動程序示例,以及用于測試的模擬器和配置,位于yaffs2/direct/ test-framework目錄下

    D、相關(guān)測試用例,位于其他目錄下

    詳見官方文檔:https://yaffs.net/documents/yaffs-direct-interface

    2. 添加文件

    將如下文件拷貝到AliOS-Things/kernel/modules/fs/yaffs2目錄下,并編寫相應(yīng)makefile或者添加到相應(yīng)的工程。

    a) 這些文件在位于源碼的yaffs2和yaffs2/direct目錄下。
    b) yportenv.h、yaffs_attribs.c文件有多個(gè),前者使用direct目錄下版本,后者使用yaffs2目錄下版本。
    c) yaffs_alios.c、yaffs_install_drv.c、yaffs_install_drv.h這三個(gè)文件用于適配AliOS-Things和驅(qū)動,見kernel/modules/fs/yaffs2目錄。

    3. 代碼適配

    3.1 增加相應(yīng)數(shù)據(jù)和函數(shù)定義

    a) yportenv.h
    增加如下代碼:

    #define CONFIG_YAFFS_DIRECT #define CONFIG_YAFFS_PROVIDE_DEFS #define CONFIG_YAFFSFS_PROVIDE_VALUES #define CONFIG_YAFFS_DEFINES_TYPES#define inline RHINO_INLINEtypedef long off_t; typedef unsigned long loff_t; typedef long dev_t; typedef int mode_t;

    b) yaffsfs.c
    增加如下代碼:

    unsigned int yaffs_trace_mask = 0;unsigned int strnlen(const char *s, unsigned int max) {register const char *p;for(p = s; *p && max--; ++p);return(p - s);}

    c) yaffs_list.h
    增加如下代碼:

    #define inline RHINO_INLINE

    3.2 對接操作系統(tǒng)

    與AliOS-Things適配的操作系統(tǒng)接口已經(jīng)實(shí)現(xiàn)好,直接包含yaffs_alios.c即可。

    該文件中實(shí)現(xiàn)了yaffsfs_Lock、yaffsfs_Unlock、yaffsfs_CurrentTime、yaffsfs_malloc、yaffsfs_free等函數(shù)的對接,另外還創(chuàng)建了一個(gè)用于yaffs的后臺任務(wù)。

    yaffsfs_CheckMemRegion函數(shù)用于檢查內(nèi)存地址是否有效,需用戶自己根據(jù)具體硬件補(bǔ)充實(shí)現(xiàn)。

    操作系統(tǒng)接口函數(shù)列表如下:

    void yaffsfs_Lock(void)void yaffsfs_Unlock(void); u32 yaffsfs_CurrentTime(void)int yaffsfs_GetLastError(void)void yaffsfs_SetError(int err)void *yaffsfs_malloc(size_t size)void yaffsfs_free(void *ptr)void yaffsfs_OSInitialisation(void)void yaffs_bug_fn(const char *file_name, int line_no)int yaffsfs_CheckMemRegion(const void *addr, size_t size, int write_request)

    3.3 對接nand flash驅(qū)動

    yaffs_install_drv.c用于yaffs對接nand flash驅(qū)動,用戶需根據(jù)硬件配置param中的參數(shù),并實(shí)現(xiàn)如下驅(qū)動函數(shù):

    static int nand_WriteChunk(struct yaffs_dev *dev, int nand_chunk,const u8 *data, int data_len,const u8 *oob, int oob_len); static int nand_ReadChunk(struct yaffs_dev *dev, int nand_chunk,u8 *data, int data_len,u8 *oob, int oob_len,enum yaffs_ecc_result *ecc_result); static int nand_EraseBlock(struct yaffs_dev *dev, int block_no); static int nand_MarkBad(struct yaffs_dev *dev, int block_no); static int nand_CheckBad(struct yaffs_dev *dev, int block_no); static int nand_Initialise(struct yaffs_dev *dev);

    完成以上步驟即完成YAFFS2的移植。

    掃碼獲取更多資訊:



    總結(jié)

    以上是生活随笔為你收集整理的YAFFS2移植到AliOS Things指南的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。