0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳細講解嵌入式Linux支持的多種文件系統(tǒng)

電子設(shè)計 ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2017-12-19 07:24 ? 次閱讀

Linux支持多種文件系統(tǒng)類型,在嵌入式開發(fā)中上常用有:ROMFS、JFFS2、NFS、CRAMFS、YAFFS、UBIFS等。

JFFS文件系統(tǒng)

JFFS文件系統(tǒng)最早是由瑞典Axis Communications公司基于Linux2.0的內(nèi)核為嵌入式系統(tǒng)開發(fā)的文件系統(tǒng)。JFFS2是RedHat公司基于JFFS開發(fā)的閃存文件系統(tǒng),最初是針對RedHat公司的嵌入式產(chǎn)品eCos開發(fā)的嵌入式文件系統(tǒng),所以JFFS2也可以用在Linux, uCLinux中。

Jffs2: 日志閃存文件系統(tǒng)版本2 (Journalling Flash FileSystem v2)

主要用于NOR型閃存,基于MTD驅(qū)動層,特點是:可讀寫的、支持數(shù)據(jù)壓縮的、基于哈希表的日志型文件系統(tǒng),并提供了崩潰/掉電安全保護,提供“寫平衡”支持等。缺點主要是當(dāng)文件系統(tǒng)已滿或接近滿時,因為垃圾收集的關(guān)系而使jffs2的運行速度大大放慢。

目前jffs3正在開發(fā)中。關(guān)于jffs系列文件系統(tǒng)的使用詳細文檔,可參考MTD補丁包中mtd-jffs-HOWTO.txt。

jffsx不適合用于NAND閃存主要是因為NAND閃存的容量一般較大,這樣導(dǎo)致jffs為維護日志節(jié)點所占用的內(nèi)存空間迅速增大,另外,jffsx文件系統(tǒng)在掛載時需要掃描整個FLASH的內(nèi)容,以找出所有的日志節(jié)點,建立文件結(jié)構(gòu),對于大容量的NAND閃存會耗費大量時間。

yaffs:Yet Another Flash File System

yaffs/yaffs2是專為嵌入式系統(tǒng)使用NAND型閃存而設(shè)計的一種日志型文件系統(tǒng)。與jffs2相比,它減少了一些功能(例如不支持數(shù)據(jù)壓縮),所以速度更快,掛載時間很短,對內(nèi)存的占用較小。另外,它還是跨平臺的文件系統(tǒng),除了Linux和eCos,還支持WinCE, pSOS和ThreadX等。

yaffs/yaffs2自帶NAND芯片的驅(qū)動,并且為嵌入式系統(tǒng)提供了直接訪問文件系統(tǒng)的API,用戶可以不使用Linux中的MTD與VFS,直接對文件系統(tǒng)操作。當(dāng)然,yaffs也可與MTD驅(qū)動程序配合使用。

yaffs與yaffs2的主要區(qū)別在于,前者僅支持小頁(512 Bytes) NAND閃存,后者則可支持大頁(2KB) NAND閃存。同時,yaffs2在內(nèi)存空間占用、垃圾回收速度、讀/寫速度等方面均有大幅提升。

Cramfs:Compressed ROM File System

Cramfs是Linux的創(chuàng)始人 Linus Torvalds參與開發(fā)的一種只讀的壓縮文件系統(tǒng)。它也基于MTD驅(qū)動程序。

在cramfs文件系統(tǒng)中,每一頁(4KB)被單獨壓縮,可以隨機頁訪問,其壓縮比高達2:1,為嵌入式系統(tǒng)節(jié)省大量的Flash存儲空間,使系統(tǒng)可通過更低容量的FLASH存儲相同的文件,從而降低系統(tǒng)成本。

Cramfs文件系統(tǒng)以壓縮方式存儲,在運行時解壓縮,所以不支持應(yīng)用程序以XIP方式運行,所有的應(yīng)用程序要求被拷到RAM里去運行,但這并不代表比Ramfs需求的RAM空間要大一點,因為Cramfs是采用分頁壓縮的方式存放檔案,在讀取檔案時,不會一下子就耗用過多的內(nèi)存空間,只針對目前實際讀取的部分分配內(nèi)存,尚沒有讀取的部分不分配內(nèi)存空間,當(dāng)我們讀取的檔案不在內(nèi)存時,Cramfs文件系統(tǒng)自動計算壓縮后的資料所存的位置,再即時解壓縮到RAM中。

另外,它的速度快,效率高,其只讀的特點有利于保護文件系統(tǒng)免受破壞,提高了系統(tǒng)的可靠性。

由于以上特性,Cramfs在嵌入式系統(tǒng)中應(yīng)用廣泛。

但是它的只讀屬性同時又是它的一大缺陷,使得用戶無法對其內(nèi)容對進擴充。

Cramfs映像通常是放在Flash中,但是也能放在別的文件系統(tǒng)里,使用loopback 設(shè)備可以把它安裝別的文件系統(tǒng)里。

Romfs

傳統(tǒng)型的Romfs文件系統(tǒng)是一種簡單的、緊湊的、只讀的文件系統(tǒng),不支持動態(tài)擦寫保存,按順序存放數(shù)據(jù),因而支持應(yīng)用程序以XIP(eXecute In Place,片內(nèi)運行)方式運行,在系統(tǒng)運行時,節(jié)省RAM空間。uClinux系統(tǒng)通常采用Romfs文件系統(tǒng)。

其他文件系統(tǒng):fat/fat32也可用于實際嵌入式系統(tǒng)的擴展存儲器(例如PDA, Smartphone, 數(shù)碼相機等的SD卡),這主要是為了更好的與最流行的Windows桌面操作系統(tǒng)相兼容。ext2也可以作為嵌入式Linux的文件系統(tǒng),不過將它用于FLASH閃存會有諸多弊端。

2. 基于RAM的文件系統(tǒng)

(1) Ramdisk

Ramdisk是將一部分固定大小的內(nèi)存當(dāng)作分區(qū)來使用。它并非一個實際的文件系統(tǒng),而是一種將實際的文件系統(tǒng)裝入內(nèi)存的機制,并且可以作為根文件系統(tǒng)。將一些經(jīng)常被訪問而又不會更改的文件(如只讀的根文件系統(tǒng))通過Ramdisk放在內(nèi)存中,可以明顯地提高系統(tǒng)的性能。

在Linux的啟動階段,initrd提供了一套機制,可以將內(nèi)核映像和根文件系統(tǒng)一起載入內(nèi)存。

(2)ramfs/tmpfs

Ramfs是Linus Torvalds開發(fā)的一種基于內(nèi)存的文件系統(tǒng),工作于虛擬文件系統(tǒng)(VFS)層,不能格式化,可以創(chuàng)建多個,在創(chuàng)建時可以指定其最大能使用的內(nèi)存大小。(實際上,VFS本質(zhì)上可看成一種內(nèi)存文件系統(tǒng),它統(tǒng)一了文件在內(nèi)核中的表示方式,并對磁盤文件系統(tǒng)進行緩沖。)

Ramfs/tmpfs文件系統(tǒng)把所有的文件都放在RAM中,所以讀/寫操作發(fā)生在RAM中,可以用ramfs/tmpfs來存儲一些臨時性或經(jīng)常要修改的數(shù)據(jù),例如/tmp和/var目錄,這樣既避免了對Flash存儲器的讀寫損耗,也提高了數(shù)據(jù)讀寫速度。

Ramfs/tmpfs相對于傳統(tǒng)的Ramdisk的不同之處主要在于:不能格式化,文件系統(tǒng)大小可隨所含文件內(nèi)容大小變化。

Tmpfs的一個缺點是當(dāng)系統(tǒng)重新引導(dǎo)時會丟失所有數(shù)據(jù)。

3. 網(wǎng)絡(luò)文件系統(tǒng)NFS (Network File System)

NFS是由Sun開發(fā)并發(fā)展起來的一項在不同機器、不同操作系統(tǒng)之間通過網(wǎng)絡(luò)共享文件的技術(shù)。在嵌入式Linux系統(tǒng)的開發(fā)調(diào)試階段,可以利用該技術(shù)在主機上建立基于NFS的根文件系統(tǒng),掛載到嵌入式設(shè)備,可以很方便地修改根文件系統(tǒng)的內(nèi)容。

以上討論的都是基于存儲設(shè)備的文件系統(tǒng)(memory-based file system),它們都可用作Linux的根文件系統(tǒng)。實際上,Linux還支持邏輯的或偽文件系統(tǒng)(logical or pseudo file system),例如procfs(proc文件系統(tǒng)),用于獲取系統(tǒng)信息,以及devfs(設(shè)備文件系統(tǒng))和sysfs,用于維護設(shè)備文件。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11207

    瀏覽量

    208713
收藏 人收藏

    評論

    相關(guān)推薦

    stm32單片機基于rt-thread 的 littlefs 文件系統(tǒng) 的使用

    簡介littlefs是ARM官方推出的,專為嵌入式系統(tǒng)設(shè)計的文件系統(tǒng),相比傳統(tǒng)的文件系統(tǒng),littlefs具有以下優(yōu)點:1、自帶擦寫均衡2、支持
    的頭像 發(fā)表于 11-06 08:04 ?148次閱讀
    stm32單片機基于rt-thread 的 littlefs <b class='flag-5'>文件系統(tǒng)</b> 的使用

    Ubuntu系統(tǒng)遷移指南:輕松駕馭國產(chǎn)3568嵌入式實驗箱

    本文基于創(chuàng)龍教儀TL3568-PlusTEB嵌入式教學(xué)實驗箱實現(xiàn)ubuntu系統(tǒng)移植。瑞芯微平臺提供的SDK支持buildroot、Debian、yocto,但Ubuntu需要自行定制文件系統(tǒng)
    的頭像 發(fā)表于 10-29 08:06 ?220次閱讀
    Ubuntu<b class='flag-5'>系統(tǒng)</b>遷移指南:輕松駕馭國產(chǎn)3568<b class='flag-5'>嵌入式</b>實驗箱

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-應(yīng)用編程示例控制LED燈之sysfs文件系統(tǒng)

    文件系統(tǒng)概念sysfs是Linux2.6以上的內(nèi)核在發(fā)展迭代過程中衍生出來的一個功能,它的作用是通過一個內(nèi)存文件系統(tǒng)將信息導(dǎo)出到用戶進程空間。文件系統(tǒng)的目錄層次結(jié)構(gòu)組織嚴格,并且是基于
    發(fā)表于 10-21 09:52

    飛凌嵌入式ElfBoard ELF 1板卡-應(yīng)用編程示例控制LED燈之sysfs文件系統(tǒng)

    sysfs文件系統(tǒng)概念 sysfs是Linux2.6以上的內(nèi)核在發(fā)展迭代過程中衍生出來的一個功能,它的作用是通過一個內(nèi)存文件系統(tǒng)將信息導(dǎo)出到用戶進程空間。文件系統(tǒng)的目錄層次結(jié)構(gòu)組織嚴
    發(fā)表于 10-18 09:31

    Linux文件系統(tǒng)的掛載過程

    Linux文件系統(tǒng)(rootfs)是Linux系統(tǒng)中所有其他文件系統(tǒng)和目錄的起點,它是內(nèi)核啟動時掛載的第一個
    的頭像 發(fā)表于 10-05 16:50 ?232次閱讀

    如何構(gòu)建Linux文件系統(tǒng)

    構(gòu)建Linux文件系統(tǒng)是一個涉及多個步驟和概念的過程,它對于Linux系統(tǒng)的啟動和運行至關(guān)重要。
    的頭像 發(fā)表于 10-05 16:47 ?198次閱讀

    小型文件系統(tǒng)如何選擇?FatFs和LittleFs優(yōu)缺點比較

    01? 概述 文件系統(tǒng)嵌入式系統(tǒng)中的作用不可或缺,它提供了對非易失性存儲設(shè)備(如閃存、SD卡等)上的數(shù)據(jù)進行有效組織和管理的能力。通過文件系統(tǒng)
    的頭像 發(fā)表于 09-29 16:14 ?748次閱讀
    小型<b class='flag-5'>文件系統(tǒng)</b>如何選擇?FatFs和LittleFs優(yōu)缺點比較

    嵌入式linux開發(fā)的基本步驟有哪些?

    嵌入式Linux開發(fā)是一個復(fù)雜的過程,涉及到硬件選擇、操作系統(tǒng)移植、驅(qū)動開發(fā)、應(yīng)用程序開發(fā)等多個方面。以下是嵌入式Linux開發(fā)的基本步驟,
    的頭像 發(fā)表于 09-02 09:11 ?345次閱讀

    嵌入式linux開發(fā)板芯片的工作原理

    嵌入式Linux開發(fā)板是一種基于Linux操作系統(tǒng)嵌入式系統(tǒng)開發(fā)平臺,它廣泛應(yīng)用于工業(yè)控制、智
    的頭像 發(fā)表于 09-02 09:07 ?302次閱讀

    嵌入式機電一體化系統(tǒng)設(shè)計與實現(xiàn)》讀后感

    的應(yīng)用。曾教授詳細講解了如何為嵌入式系統(tǒng)構(gòu)建Linux環(huán)境,以及在Linux中進行程序設(shè)計的方法
    發(fā)表于 08-21 08:45

    linux--sysfs文件系統(tǒng)

    sysfs文件系統(tǒng) sysfs,全稱為System Filesystem,是一個由Linux內(nèi)核實現(xiàn)的虛擬文件系統(tǒng)。它扮演著一個橋梁的角色,將內(nèi)核中的設(shè)備和驅(qū)動程序信息以文件的形式呈現(xiàn)
    的頭像 發(fā)表于 07-08 11:37 ?669次閱讀
    <b class='flag-5'>linux</b>--sysfs<b class='flag-5'>文件系統(tǒng)</b>

    嵌入式SD NAND】基于FATFS/Littlefs文件系統(tǒng)的日志框架實現(xiàn)

    文章目錄 【嵌入式】基于FATFS/Littlefs文件系統(tǒng)的日志框架實現(xiàn) 1. 概述 2. 設(shè)計概要 3. 設(shè)計實現(xiàn) 3.1 初始化 `init` 3.2 日志寫入 `write` 3.3 日志
    的頭像 發(fā)表于 03-14 18:13 ?996次閱讀
    【<b class='flag-5'>嵌入式</b>SD NAND】基于FATFS/Littlefs<b class='flag-5'>文件系統(tǒng)</b>的日志框架實現(xiàn)

    嵌入式SD NAND】基于FATFS/Littlefs文件系統(tǒng)的日志框架實現(xiàn)

    文章目錄【嵌入式】基于FATFS/Littlefs文件系統(tǒng)的日志框架實現(xiàn)1.概述2.設(shè)計概要3.設(shè)計實現(xiàn)3.1初始化`init`3.2日志寫入`write`3.3日志讀取`read`3.4注銷
    的頭像 發(fā)表于 03-14 18:12 ?1101次閱讀
    【<b class='flag-5'>嵌入式</b>SD NAND】基于FATFS/Littlefs<b class='flag-5'>文件系統(tǒng)</b>的日志框架實現(xiàn)

    嵌入式學(xué)習(xí)——ElfBoard ELF1板卡 之文件系統(tǒng)的介紹

    文件系統(tǒng)通常提供目錄或文件夾用于記錄文件,在很多系統(tǒng)中目錄本身也是文件,在這些系統(tǒng)中,目錄是管理
    發(fā)表于 11-24 10:02

    i.MX6ULL——ElfBoard ELF1板卡 之文件系統(tǒng)目錄的介紹

    文件系統(tǒng)通常提供目錄或文件夾用于記錄文件,在很多系統(tǒng)中目錄本身也是文件,在這些系統(tǒng)中,目錄是管理
    發(fā)表于 11-24 09:59