文件系統(tǒng)概念
文件系統(tǒng)通常提供目錄或文件夾用于記錄文件,在很多系統(tǒng)中目錄本身也是文件,在這些系統(tǒng)中,目錄是管理文件系統(tǒng)結(jié)構(gòu)的系統(tǒng)文件。從文件組織結(jié)構(gòu)上來說,嵌入式Linux文件系統(tǒng)與普通PC/服務器上Linux的文件系統(tǒng)是一樣的,只是嵌入式Linux文件系統(tǒng)根據(jù)產(chǎn)品功能進行過裁剪,在內(nèi)容多少和體積大小上不同。進行嵌入式Linux產(chǎn)品開發(fā),構(gòu)建一個合適的文件系統(tǒng)是不可或缺的,可以基于已有文件系統(tǒng)進行裁剪或者定制,也可以從頭開始構(gòu)建。
文件系統(tǒng)類型
簡單介紹一些常用的幾種linux系統(tǒng)類型:ramdisk、cramfs、jffs2、yaffs/yaffs2、ubifs、NFS、Ext2/3/4等,ELF?1開發(fā)板使用的是Ext3文件系統(tǒng),每種文件系統(tǒng)類型都有自己的特性,下面我們逐一介紹一下。
一、Ext2/3/4
Ext全稱Linux extended file system, extfs,即Linux擴展文件系統(tǒng),Ext2代表第二代擴展文件系統(tǒng),Ext3/Ext4是Ext2的升級版,減少一致性檢查的時間,增加了日志功能,一般將Ext2稱為索引式文件系統(tǒng),Ext3/Ext4稱為日志式文件系統(tǒng)。
二、NFS文件系統(tǒng)
網(wǎng)絡文件系統(tǒng)。用于系統(tǒng)間通過網(wǎng)絡進行文件共享,NFS包括兩部分,服務端及客戶端。本地NFS客戶端可以讀寫位于遠端NFS服務器上的文件,就像訪問本地文件一樣。
三、jffs2文件系統(tǒng)
Journalling Flash File System Version 2是一個可讀寫,壓縮,日志型文件系統(tǒng)。其功能是管理在MTD設(shè)備上實現(xiàn)的日志型文件系統(tǒng)。啟動時間依賴于文件系統(tǒng)大小,通常比較長,最初只支持NOR Flash,后來添加了NAND Flash的支持但不穩(wěn)定,不推薦在NAND Flash上使用。
四、ubifs文件系統(tǒng)
Unsorted Block Image File System UBIFS文件系統(tǒng)構(gòu)建于MTD設(shè)備之上,支持write-back,其寫入的數(shù)據(jù)會被cache,直到有必要寫入時才寫到NAND Flash,這樣大大地降低分散小區(qū)塊數(shù)量并提高I/O效率。UBIFS文件支持數(shù)據(jù)壓縮。
五、YAFFS/YAFFS2文件系統(tǒng)
YAFFS/YAFFS2是一種和JFFSx類似的閃存文件系統(tǒng),它是專為嵌入式系統(tǒng)使用NAND型閃存而設(shè)計的一種日志型文件系統(tǒng)。YAFFS是第一個在GPL協(xié)議下發(fā)布的適用于大容量存儲設(shè)備的日志型文件系統(tǒng)。和JFFS2相比它減少了一些功能,所以速度更快,而且對內(nèi)存的占用比較小。此外,YAFFS自帶NAND芯片的驅(qū)動,并且為嵌入式系統(tǒng)提供了直接訪問文件系統(tǒng)的API,用戶可以直接對文件系統(tǒng)操作。YAFFS2支持大頁面的NAND設(shè)備,并且對大頁面的NAND設(shè)備做了優(yōu)化。Yaffs2更使用于NAND Flash上使用。
六、Cramfs文件系統(tǒng)
Cramfs文件系統(tǒng)以壓縮方式存儲,在運行時解壓縮,所有的應用程序要求被拷到RAM里去運行,這并不代表會需求更大的RAM空間,因為Cramfs采用分頁壓縮的方式存放檔案,在讀取檔案時,不會一下子耗用過多的內(nèi)存空間,只針對目前實際讀取的部分分配內(nèi)存,尚沒有讀取的部分不分配內(nèi)存空間,當我們讀取的檔案不在內(nèi)存時,Cramfs文件系統(tǒng)自動計算壓縮后的資料所存的位置,再即時解壓縮到RAM中。
cramfs文件系統(tǒng)速度快,效率高,其只讀的特點有利于保護文件系統(tǒng)免受破壞,提高了系統(tǒng)的可靠性。但只讀屬性同時又是它的一大缺陷,使得用戶無法對其內(nèi)容對進擴充。
七、RamDisk文件系統(tǒng)
RamDisk就是將內(nèi)存中的一塊區(qū)域作為物理磁盤來使用的一種技術(shù)。它并非一個實際的文件系統(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)存。
RamDisk是臨時性的,所以沒有帶日志的文件系統(tǒng)的必要。
文件系統(tǒng)目錄結(jié)構(gòu)
我們可以根據(jù)不同的應用場景,對嵌入式文件系統(tǒng)目錄結(jié)構(gòu)進行裁剪。下面對比較經(jīng)典的幾個文件目錄做一下介紹。
運行cd/進入文件系統(tǒng)根目錄,運行l(wèi)s -l可以看到以下目錄:
目錄 | 內(nèi)容 |
/bin | 存放常用基本命令和工具,如ls、cp等 |
/dev | 存放系統(tǒng)的設(shè)備文件,包含了所有l(wèi)inux系統(tǒng)中使用的外部設(shè)備 |
/etc | 存放系統(tǒng)的配置文件,這里面的配置文件會影響系統(tǒng)所有用戶的系統(tǒng)環(huán)境 |
/home | 用戶的家目錄,在此目錄下,每個用戶都有自己的家目錄 |
/lib | 存放非常重要的系統(tǒng)運行庫文件 |
/media | 作為外部設(shè)備的一個掛載點,比如硬盤或者可移動設(shè)備(U盤、DVD、CD)。 |
/mnt | 和/media一樣,也是一個掛載點,但是專用于掛載臨時的設(shè)備,例如網(wǎng)絡文件系統(tǒng) |
/proc | 一個虛擬文件系統(tǒng),為內(nèi)核提供向進程發(fā)送信息的機制。操作系統(tǒng)運行時,進程以及內(nèi)核信息存放路徑 |
/sbin | 包含通常只應由超級用戶使用的重要管理命令 |
/sys | 設(shè)備驅(qū)動模型中的總線、驅(qū)動、設(shè)備都可以在sysfs中找到對應的節(jié)點 |
/tmp | 臨時文件的位置 |
/usr | 包含大多數(shù)用戶命令和工具或者庫文件,包括例如 /usr/bin/ 和 /usr/lib |
/var | 致力于可變數(shù)據(jù),例如日志,數(shù)據(jù)庫,網(wǎng)站和臨時脫機(電子郵件等)文件 |
/root | root 用戶的家目錄,不在/home/中,即使/home/不可用,也允許引導系統(tǒng) |