- 論壇徽章:
- 0
|
認(rèn)識(shí)romfs文件系統(tǒng)
1.1 什么是romfs
romfs是一個(gè)只讀文件系統(tǒng),主要用在 mainly for initial RAM disks of installation disks.使用romfs文件系統(tǒng)可以構(gòu)造出一個(gè)最小的內(nèi)核,并且很節(jié)省內(nèi)存。相比而言,早期的minix和xiafs(現(xiàn)在已經(jīng)過(guò)時(shí))文件系統(tǒng)如果編譯為模塊的形式則大小超過(guò)20000字節(jié)(在x86機(jī)器上大小為38502字節(jié)),而romfs卻小于一頁(yè)(在linux系統(tǒng)中,一頁(yè)大小為PAGE_OFFSET,一般為4K),大約4000字節(jié)(在x86機(jī)器上大小為10479字節(jié))。在相同的條件下,msdos文件系統(tǒng)模塊大約30K(并且不支持設(shè)備節(jié)點(diǎn)和符號(hào)鏈接,在x86機(jī)器上大小為12K)。ntfs和nfsroot文件系統(tǒng)模塊大約57K(在x86機(jī)器上大小為102K)。
注:上面敘述中的數(shù)值都是針對(duì)i586機(jī)器,括號(hào)中敘述的數(shù)值是在現(xiàn)在的x86機(jī)器上的大小,針對(duì)2.6.28內(nèi)核。
1.2 romfs的用途
romfs本設(shè)計(jì)的主要目標(biāo)是構(gòu)造一個(gè)最小內(nèi)核,在內(nèi)核中只鏈接romfs文件系統(tǒng),這樣就可以使用romfs在稍后加載其他模塊。romfs也可以用來(lái)運(yùn)行一些程序,從而決定你是否需要SCSI設(shè)備,或者IDE設(shè)備,或者如果你使用的是"initrd"結(jié)構(gòu)的內(nèi)核,romfs也可以用來(lái)在之后加載軟驅(qū)驅(qū)動(dòng)。romfs的另一個(gè)用途是在你使用romfs文件系統(tǒng)的時(shí)候,你可以關(guān)閉ext2或者minix甚至affs文件系統(tǒng)直到你確信需要的時(shí)候再開(kāi)啟。
1.3 romfs的性能
romfs的操作是基于塊設(shè)備的,它的底層結(jié)構(gòu)非常簡(jiǎn)單。為了快速訪問(wèn),每個(gè)單元被設(shè)計(jì)為起始于16字節(jié)邊界。一個(gè)最小的文件為32字節(jié)(文件內(nèi)容為空,并且文件名長(zhǎng)度小于16字節(jié))。對(duì)于一個(gè)非空文件的最大的開(kāi)銷是位于文件內(nèi)容前面的文件頭和其后的16字節(jié)的文件名(因?yàn)榇蠖鄶?shù)的文件名長(zhǎng)度大于3字節(jié)并且小于15字節(jié),所以預(yù)置文件名長(zhǎng)度為16字節(jié))。
1.4 如何使用romfs映像
要使用一個(gè)制作好的romfs格式的映像,是將其掛載在其他文件系統(tǒng)的某個(gè)節(jié)點(diǎn)上。并且還有一個(gè)很重要的前提,就是內(nèi)核要支持romfs文件系統(tǒng)。這一點(diǎn)可以通過(guò)配置內(nèi)核實(shí)現(xiàn),有兩個(gè)方法:
1.將romfs配置成直接編譯進(jìn)內(nèi)核,方法為使用make menuconfig命令進(jìn)入內(nèi)核配置界面,選擇"File systems"并進(jìn)入,選擇“Miscellaneous filesystems”并進(jìn)入,選擇“ROM file system support(ROMFS)”,將其配置成"*"(直接編譯進(jìn)內(nèi)核)。這樣生成的內(nèi)核就直接包含對(duì)romfs文件系統(tǒng)的支持。
2.將romfs配置成模塊的形式,步驟和前面一樣,只是在最后選擇"ROM file system support(ROMFS)"的時(shí)候?qū)⑵渑渲贸?quot;M"(編譯為內(nèi)核模塊)。這樣編譯好的內(nèi)核并不包含對(duì)romfs文件系統(tǒng)的支持,只是生成了romfs.ko模塊(fs/romfs/romfs.ko),需要在啟動(dòng)系統(tǒng)后將其加載進(jìn)內(nèi)核才能使內(nèi)核支持romfs文件系統(tǒng)。
有了內(nèi)核對(duì)romfs文件系統(tǒng)的支持,就可以直接掛載romfs格式的映像了,掛載方法為:
niutao@niutao:~/kernel/romfs$ ls
hello.img
niutao@niutao:~/kernel/romfs$ file hello.img
hello.img: romfs filesystem, version 1 208 bytes, named rom 49e05ac0.
niutao@niutao:~/kernel/romfs$ sudo mount -o loop hello.img /mnt
niutao@niutao:~/kernel/romfs$ cd /mnt/
niutao@niutao:/mnt$ ls
hello.c
niutao@niutao:/mnt$
可以看到使用mount命令將hello.img掛載到了/mnt目錄下,其內(nèi)只有一個(gè)文件。
卸載一個(gè)已經(jīng)被掛載的romfs格式映像使用umount命令。
1.5如何制作romfs映像
如果要?jiǎng)?chuàng)建一個(gè)romfs文件系統(tǒng),需要使用genromfs工具。具體用法為:
-f IMAGE 指定輸出romfs映像的名字
-d DIRECTORY 指定源目錄(將該目錄制作成romfs文件系統(tǒng))
-v 顯示詳細(xì)的創(chuàng)建過(guò)程
-V VOLUME 指定卷標(biāo)
-a ALIGN 指定普通文件的對(duì)齊邊界(默認(rèn)為16字節(jié))
-A ALIGN,PATTERN 匹配參數(shù)PATTERN的對(duì)象對(duì)齊在ALIGN邊界上
-x PATTERN 不包括匹配PATTERN的對(duì)象。
-h 顯示幫助文檔。
下節(jié)主要講述這些參數(shù)的詳細(xì)含義。具體見(jiàn):
http://blog.chinaunix.net/u2/73528/showart.php?id=1902951
本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u2/73528/showart_1902940.html |
|