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