核心新增對yaffs2檔案系統的支援

JeanCheng發表於2016-11-14
CSDN GitHub
核心新增對yaffs2檔案系統的支援 AderXCoding/system/tools/yaffs2


知識共享許可協議
本作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可, 轉載請註明出處, 謝謝合作

1 yaffs介紹


YAFFS, Yet Another Flash File System, 是一種類似於 JFFS/JFFS2 的專門為 Flash 設計的嵌入式檔案系統. 與 JFFS 相比, 它減少了一些功能, 因此速度更快、佔用記憶體更少. YAFFSJFFS 都提供了寫均衡, 垃圾收集等底層操作. 它們的不同之處在於 :

  1. JFFS 是一種日誌檔案系統, 通過日誌機制保證檔案系統的穩定性. YAFFS 僅僅借鑑了日誌系統的思想, 不提供日誌機能, 所以穩定性不如 JAFFS, 但是資源佔用少.

  2. JFFS 中使用多級連結串列管理需要回收的髒塊, 並且使用系統生成偽隨機變數決定要回收的塊, 通過這種方法能提供較好的寫均衡, 在 YAFFS 中是從頭到尾對塊搜尋, 所以在垃圾收集上 JFFS 的速度慢, 但是能延長 NAND 的壽命.

  3. JFFS 支援檔案壓縮, 適合儲存容量較小的系統; YAFFS 不支援壓縮, 更適合儲存容量大的系統.

  4. YAFFS 還帶有 NAND 晶片驅動, 併為嵌入式系統提供了直接訪問檔案系統的 API, 使用者可以不使用 Linux 中的 MTDVFS, 直接對檔案進行操作. NAND Flash 大多采用 MTD+YAFFS 的模式. MTD(Memory Technology Devices, 記憶體技術裝置)是對 Flash 操作的介面, 提供了一系列的標準函式, 將硬體驅動設計和系統程式設計分開.

YAFFS2YAFFS 的升級版, 能更好的支援 NAND FLASH, 我們採用最新的 YAFFS2檔案系統. 我們首先下載 YAFFS檔案系統.

2 核心新增對yaffs2檔案系統的支援


核心中預設是不支援 yaffs 檔案系統的, 因此我們需要為核心打上 yaffs 的補丁

File  systems  --->
    Miscellaneous  filesystems  --->
        <*>  YAFFS2  file  system  support
        [*]  Autoselect  yaffs2  format

2.1 下載yaffs原始碼


第一步, 我們需要 YAFFS2 的原始碼, 如果大家有興趣想了解 YAFFS2 檔案系統的驅動原理的話可以直接去訪問他們的官網

官網地址 : www.yaffs2.net

有原始碼下載地址, 怕大家進去後難找, 直接貼出YAFFS2的最新原始碼地址吧 http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=summary

直接點選, 點最新版本, 點選最右邊的 SNAPSHOT 下載, 這個是目前最新的YAFFS2的原始碼了.

或者直接訪問, 即可自動下載

http://aleph1.co.uk/gitweb?p=yaffs2.git;a=snapshot;h=HEAD;

下載後解壓縮 yaffs 原始碼

當然我們也可以使用git進行下載

  • 普通使用者使用
git clone git://www.aleph1.co.uk/yaffs2
  • 內部開發人員

yaffs 的開發人員會有自己的開發賬戶, 因此可以直接訪問 git 進行下載

git clone ssh://www.aleph1.co.uk/home/aleph1/git/yaffs2

下載核心原始碼

2.2 為核心打上patch


第二步, 將下載下來的 YAFFS2 最新原始碼 YAFFS2.tar.gz 放入你 LINUX 的任意一個目錄下, 執行 tar zxvf YAFFS2.tar.gz 然後進入 YAFFS2 原始碼包

yafss原始碼目錄

由於最新的原始碼再執行指令碼 patch-ker.sh 時 有四個引數, 可以追加:c,l,m,s,

./patch-ker.sh  c/l m/s kernelpath
 if c/l is c, then copy. If l then link
 if m/s is m, then use multi version code. If s then use single version code

patch幫助資訊

上面這段英文應該很好懂吧, 簡而言之, C 是複製檔案, L是連結檔案, M是多種, S是單個的,

那麼在這裡, 我們只需執行

./patch-ker.sh c m your-linux-kernel-directory

patch核心

執行完這條命令之後, 你將會發現在 kernel 原始碼目錄下發現有了 yaffs2 目錄了, 並且裡面也出現了好多檔案

  1. 修改核心 fs/Kconfig, 增加了 yaffs2 下的 Kconfig
# Patched by YAFFS
source "fs/yaffs2/Kconfig"

核心fs/Kconfig增加的資訊

  1. 修改核心 fs/Makefile, 增加了 yaffs 目錄的資訊

同時將原來的 Makefile 備份為 Makefile.pre.yaffs

# Patched by YAFFS
obj-$(CONFIG_YAFFS_FS)          += yaffs2/

fs/Makefile增加的資訊

  1. 在核心fs/目錄下建立yaffs2子目錄

    • 將yaffs2原始碼目錄下的Makefile.kernel複製為核心fs/yaffs2/Makefile檔案

    • 將yaffs2原始碼目錄下的Kconfig檔案複製到核心fs/yaffs2/目錄下

    • 將yaffs2原始碼目錄下的.c,.h檔案(不包括子目錄下的檔案)複製到核心fs/yaffs2/目錄下

yaffs2子目錄的資訊

2.3 配置核心


最後就是配置編譯核心, 讓核心支援yaffs2檔案系統

```cpp
File  systems  --->
    Miscellaneous  filesystems  --->
        <*>  YAFFS2  file  system  support
        [*]  Autoselect  yaffs2  format


配置語言選項

Native  Language  support  --->
    (iso8859-1)  Default  NLS  Option
    <*>  Codepage  437(United  States,  Canada)
    <*>  Simplified  Chinese  charset(CP936,  GB2312)
    <*>  NLS  ISO8859-1  (Latin  1;  Western  European  Language)
    <*>  NLS  UTF-8

配置核心

yaffs2 需要核心 MTD 的支援

若在 make menuconfig 中沒有出現 yaffs2 檔案系統的支援, 請檢查 MTD 的配置, yaffs2 依賴於 MTD . MTD中配置了 linux 核心對 NANDFlash 的支援.

Device Drivers --->
  Memory Technology Device (MTD) support  --->


# 進一步把其中的NAND Flase的支援開啟

mtd-support

mtd-support

核心支援 NandFlashyaffs2 檔案系統,將核心燒入 NandFlash後, 再燒入 yaffs2 檔案系統, 可以使用製作好的檔案系統, 也可以自己製作

啟動時(成功掛載檔案系統)輸出:

yaffs:  dev  is  32505858  name  is  "mtdblock2"
yaffs:  passed  flags  ""
yaffs:  Attempting  MTD  mount  on  31.2,  "mtdblock2"
yaffs:  auto  selecting  yaffs2
yaffs_read_super:  isCheckpointed  0
VFS:  Mounted  root  (yaffs  filesystem)  on  device  31:2.
Freeing  init  memory:  196K


知識共享許可協議本作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可, 轉載請註明出處, 謝謝合作.

相關文章