導航:首頁 > 文件目錄 > linux模擬文件系統

linux模擬文件系統

發布時間:2023-04-15 13:15:39

1. 如何製作 linux 文件系統

一、什麼是文件系統 (Filesystem)
文件系統是包括在一個磁碟(包括光碟、軟盤、閃盤及其它存儲設備)或分區的目錄結構;一個可應用的磁碟設備可以包含一個或多個文件系統;如果您想進入一個文件系統,首先您要做的是掛載(mount)文件系統;為了掛載(mount)文件系統,您必須指定一個掛載點。

二、主要嵌入式採用的文件系統
Linux 中,rootfs 是必不可少的。PC 上主要實現有 ramdisk 和直接掛載 HD(Harddisk,硬碟) 上的根文件系統;嵌入式中一般不從 HD 啟動,而是從 Flash 啟動,最簡單的方法是將 rootfs load 到 RAM 的 RAMDisk,稍復雜的就是 直接從Flash 讀取的 Cramfs,更復雜的是在 Flash 上分區,並構建 JFFS2 等文件系統。
RAMDisk 將製作好的 rootfs 壓縮後寫入 Flash,啟動的時候由 Bootloader load 到RAM,解壓縮,然後掛載到 /.這種方法操作簡單,但是在 RAM 中的文件系統不是壓縮的,因此需要佔用許多嵌入式系統中稀有資源 RAM.

ramdisk 就是用內存空間來模擬出硬碟分區,ramdisk通常使用磁碟文件系統的壓縮存放在flash中,在系統初始化時,解壓縮到SDRAM並掛載根文件系統, 在linux系統中,ramdisk有二種,一種就是可以格式化並載入,在linux內核2.0/2.2就已經支持,其不足之處是大小固定;另一種是 2.4的內核才支持,通過,ramfs來實現,他不能被格式化,但用起來方便,其大小隨所需要的空間增加或減少,是目前linux常用的ramdisk技術。

initrd 是 RAMDisk 的格式,kernel 2.4 之前都是 image-initrd,Kernel 2.5 引入了 cpio-initrd,大大簡化了 Linux 的啟動過程,附合 Linux 的基本哲學:Keep it simple, stupid(KISS)。 不過cpio-initrd 作為新的格式,還沒有經過廣泛測試,嵌入式 Linux 中主要採用的還是 image-initrd.
Cramfs 是 Linus 寫的很簡單的文件系統,有很好的壓縮綠,也可以直接從 Flash 上運行,不須 load 到 RAM 中,因此節約了 RAM.但是 Cramfs 是只讀的,對於需要運行時修改的目錄(如: /etc, /var, /tmp)多有不便,因此,一般將這些目錄做成ramfs 等可寫的 fs.
SquashFS 是對 Cramfs 的增強。突破了 Cramfs 的一些限制,在 Flash 和 RAM 的使用量方面也具有優勢。不過,據開發者介紹,在性能上可能不如 Cramfs.這也是一種新方法,在嵌入式系統採用之前,需要經過更多的測試

三、建一個包含所有文件的目錄
1、建一個目錄rootfs 用來裝文件系統
2、mkdir bin dev etc lib proc sbin tmp usr var
3、ln -fs bin/busybox linuxrc(使用busybox)
4、到系統 /dev 把所有的device打一個包,拷貝到 dev下面(最省事的做法);或者使用mknod來自己建所需要的device,我自己用的如下:
crw-rw-rw- 1 root root 5, 1 2006-02-24 13:12 console crw-rw-rw- 1 root root 5, 64 2006-02-24 13:12 cua0 crw-rw-rw- 1 root root 63, 0 2006-02-24 13:12 dk0 crw-rw-rw- 1 root root 63, 1 2006-02-24 13:12 dk1 drwxr-xr-x 2 root root 4096 2006-02-24 13:12 flash brw-rw-rw- 1 root root 3, 0 2006-02-24 13:12 hda crw-rw-rw- 1 root root 36, 10 2006-02-24 13:12 ipsec crw-rw-rw- 1 root root 241, 0 2006-02-24 13:12 ixNpe crw-rw-rw- 1 root root 1, 2 2006-02-24 13:12 kmem crw-rw-rw- 1 root root 126, 0 2006-02-24 13:12 ledman lrwxrwxrwx 1 root root 16 2007-09-19 14:08 log -> /tmp/var/log/log crw-rw-rw- 1 root root 1, 1 2006-02-24 13:12 mem crw-rw-rw- 1 root root 90, 0 2006-02-24 13:12 mtd0 brw-rw-rw- 1 root root 31, 0 2006-02-24 13:12 mtdblock0 brw-rw-rw- 1 root root 31, 1 2006-02-24 13:12 mtdblock1 brw-rw-rw- 1 root root 31, 2 2006-02-24 13:12 mtdblock2 brw-rw-rw- 1 root root 31, 3 2006-02-24 13:12 mtdblock3 brw-rw-rw- 1 root root 31, 4 2006-02-24 13:12 mtdblock4 brw-rw-rw- 1 root root 31, 5 2006-02-24 13:12 mtdblock5 brw-rw-rw- 1 root root 31, 6 2006-02-24 13:12 mtdblock6 crw-rw-rw- 1 root root 90, 1 2006-02-24 13:12 mtdr0 crw-rw-rw- 1 root root 1, 3 2006-02-24 13:12 null crw-rw-rw- 1 root root 108, 0 2006-02-24 13:12 ppp crw-r——r—— 1 root root 5, 2 2006-03-29 15:56 ptmx drwxr-xr-x 2 root root 4096 2006-03-29 15:56 pts crw-rw-rw- 1 root root 2, 0 2006-02-24 13:12 ptyp0 brw-rw-rw- 1 root root 1, 0 2006-02-24 13:12 ram0 crw-rw-rw- 1 root root 1, 8 2006-02-24 13:12 random crw-rw-rw- 1 root root 5, 0 2006-02-24 13:12 tty crw-rw-rw- 1 root root 4, 0 2006-02-24 13:12 tty0 crw-rw-rw- 1 root root 3, 0 2006-02-24 13:12 ttyp0 crw-rw-rw- 1 root root 4, 64 2006-02-24 13:12 ttyS0 crw-rw-rw- 1 root root 1, 9 2006-02-24 13:12 urandom crw-rw-rw- 1 root root 1, 5 2006-02-24 13:12 zero舉例: mknod console c 5 1 這樣 crw-rw-rw- 1 root root 5, 1 2006-02-24 13:12 console
5、將編譯好的busybox拷貝到/bin下面,除了busybox外,所有其他的命令都是他的link
ash chgrp clear dd echo fgrep gzip ip ls modprobe mv ping pwd sed stty tar true zcat busybox chmod cp df egrep grep hostname kill mkdir more netstat ping2file rm sh sync tftp umount cat chown date dmesg false gunzip ifconfig ln mknod mount pidof ps rmdir sleep sysinfo touch uname
所有的命令你可以在busybox下面用make menuconfig來增減
6、同樣/sbin下面也是busybox的link
halt ifconfig init insmod klogd losetup lsmod mkswap modprobe reboot rmmod route swapoff swapon
[NextPage]
7、同樣/usr/bin下面也是busybox的link
basename dirname env free id logger reset tail tr tty uptime which xargs
awk cut expr head killall mkfifo sort test traceroute uniq wc whoami yes
上面幾乎是最全的link,各個看官可以酌情刪減,不過link也不佔什麼空間!
8、同樣/usr/sbin下面放著所有編譯完的可執行文件,具體就不多說了
9、非常重要之/lib,務必重視
找到你編譯環境的target目錄,把需要的lib文件先用strip壓縮(非target目錄下的,而已編譯環境提供的strip),先把最基本的libc, ld等等,必須同樣做跟target/lib裡面一樣的link.
然後根據特定的應用加相應的lib,不要把不用的加進去,lib比較占空間。

10、在/etc下面加上需要的配置文件,最最重要的是rcS
#!/bin/sh export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/sbin/scripts UTC=yes mount -n -t proc proc /proc mount -n -t ramfs ramfs /tmp mount -n -t devpts devpts /dev/pts # build var directories /bin/mkdir -m 0777 /tmp/var /bin/mkdir -m 0777 /var/lock /bin/mkdir -m 0777 /var/log /bin/mkdir -m 0777 /var/run /bin/mkdir -m 0777 /var/tmp #/bin/mkdir -m 0777 /tmp/etc #/bin/cp -a /usr/etc//etc #/bin/cp -a /usr/dev//dev/ # loads the NPE ethernet moles into the kernel. insmod /lib/moles/2.6.13.2/intel/ixp400.ko # Firmware code for NPE Engine. cat /etc/IxNpeMicrocode.dat > /dev/ixNpe insmod /lib/moles/2.6.13.2/intel/ixp400_eth.ko netdev_max_backlog=500 insmod /lib/moles/led.ko insmod /lib/moles/push_button.ko下面的具體應用沒有再舉例加上了,這個是系統init必須的。
其他的情況類似如此了,下面裡面給了一個lunksys的GPL項目的target.

四、生成一個ramdisk
#!/bin/sh MODULE_NAME=ramdisk RAMPATH=`pwd` TMPPATH=${RAMPATH}/tmp SOURCE=${RAMPATH}/……/target if [ ! -d ${TMPPATH} ] then mkdir ${TMPPATH} fi if [ `whoami` != 'root' ] then { echo "You should run the shell as root, Please rerun as a root." echo "Aborting." exit 1 } fi # Clear in tmp path rm -rf ${TMPPATH}/tmpmnt rm -rf ${TMPPATH}/ramrootfs mkdir ${TMPPATH}/tmpmnt # Clear the old ramdisk rm -f ${RAMPATH}/$MODULE_NAME # Make a temp file which size is suitable dd if=/dev/zero of=${TMPPATH}/ramrootfs bs=1k count=6144 # Create a ext2 filesystem mke2fs -F -m 0 -i 2000 ${TMPPATH}/ramrootfs # Mount it to tmpmnt/ mount -o loop -t ext2 ${TMPPATH}/ramrootfs ${TMPPATH}/tmpmnt # Copy everything from kernel to this. cd ${TMPPATH}/tmpmnt echo ${SOURCE} cp -av ${SOURCE}/. cd ${TMPPATH} # Unmount it the ext2 filesystem umount ${TMPPATH}/tmpmnt cat ${TMPPATH}/ramrootfs | gzip -9 > /${RAMPATH}/ramdisk echo Copying ramdisk image to ${RAMPATH} sync這里給出一個自動生成腳本!

五、生成一個cramfs
找到cramfs的toolchain./mkcramfs -r $(FS1_DIR) $(FS_NAME)。1
六、生成一個mksquashfs
找到squashfs的toolchain./mksquashfs $(FS_DIR) $(FS_NAME) -noappend -be -lzma -no-fragments -noI
做文件系統最困難和最可能出問題的地方是在/lib庫和/dev方面,請大家多注意這兩方面。

2. 什麼是虛擬文件系統優點是什麼Linux常用的文件系統是什麼

你好
虛擬文件系統(vfs)是由sun
icrosystems公司在定義網路文件系統(nfs)時創造的。它是一種用於網路環專境的分布式屬文件系統,是允許和操作系統使用不同的文件系統實現的介面。
優點是:
vfs使linux同時安裝、支持許多不同類型的文件系統成為可能。vfs擁有關於各種特殊文件系統的公共界面,如超級塊、inode、文件操作函數入口等。實際文件系統的細節,統一由vfs的公共界面來索引,它們對系統核心和用戶進程來說是透明的。
linux
中經常使用
reiserfs
文件系統

3. windows下用C++模擬Linux的文件系統,要求分配4MB空間給文件系統,每個block大小為1KB

建議:
1. 如果想要學習Linux系統,可以在Windows 下安裝VMware Workstation 8軟體,然後在其中安裝Linux系統;
2. 在VMware安裝Linux系統,安裝方式如下:
2.1 如果使用光碟安裝,選擇Install Disc從DVD/CDA驅動器,選擇Easy模式(簡易模式),因為VMware可以認出這些操作系統,開始安裝即可,非常簡單;
2.2. 如果使用虛擬光碟安裝,需要格式為.iso格式,選擇「Installer disc image file(iso)」,也是使用Easy模式(簡易模式)安裝即可;
2.3 推薦使用VMware虛擬光碟機方式,這對於Linux初學者還是想進行測試的人員都比較有好處,不用擔心自己的操作引起嚴重的系統問題;
3. 根據自己的實際情況選擇安裝方式即可;
4. 不推薦直接安裝雙系統,因為Linux和Windows系統文件格式不一樣,不能夠直接安裝在一個磁碟中,安裝在不同磁碟中的方式也比較復雜,而且不利於日後的維護;
5. 個人推薦Redhat Enterprise Linux 5(RHEL 5)系統。

4. 如何在 Linux下實現一個文件系統

touch filename 就創建了一個文件名為filename的空文本文件 linux下的默認的文件格式都是純文本 ,不用考慮後綴的問題

5. 什麼是虛擬文件系統,linux系統文件系統

1 引言
Linux 中允許眾多不同的文件系統共存,如 ext2, ext3, vfat 等。通過使用同一套文件 I/O 系統 調用即可對 Linux 中的任意文件進行操作而無需考慮其所在的具體文件系統格式;更進一步,對文件的 操作可以跨文件系統而執行。如圖 1 所示,我們可以使用 cp 命令從 vfat 文件系統格式的硬碟拷貝數據到 ext3 文件系統格式的硬碟;而這樣的操作涉及到兩個不同的文件系統。

圖 1. 跨文件系統的文件操作

「一切皆是文件」是 Unix/Linux 的基本哲學之一。不僅普通的文件,目錄、字元設備、塊設備、 套接字等在 Unix/Linux 中都是以文件被對待;它們雖然類型不同,但是對其提供的卻是同一套操作界面。

圖 2. 一切皆是文件

而虛擬文件系統正是實現上述兩點 Linux 特性的關鍵所在。虛擬文件系統(Virtual File System, 簡稱 VFS), 是 Linux 內核中的一個軟體層,用於給用戶空間的程序提供文件系統介面;同時,它也提供了內核中的一個 抽象功能,允許不同的文件系統共存。系統中所有的文件系統不但依賴 VFS 共存,而且也依靠 VFS 協同工作。
為了能夠支持各種實際文件系統,VFS 定義了所有文件系統都支持的基本的、概念上的介面和數據 結構;同時實際文件系統也提供 VFS 所期望的抽象介面和數據結構,將自身的諸如文件、目錄等概念在形式 上與VFS的定義保持一致。換句話說,一個實際的文件系統想要被 Linux 支持,就必須提供一個符合VFS標准 的介面,才能與 VFS 協同工作。實際文件系統在統一的介面和數據結構下隱藏了具體的實現細節,所以在VFS 層和內核的其他部分看來,所有文件系統都是相同的。圖3顯示了VFS在內核中與實際的文件系統的協同關系。

圖3. VFS在內核中與其他的內核模塊的協同關系

我們已經知道,正是由於在內核中引入了VFS,跨文件系統的文件操作才能實現,「一切皆是文件」 的口號才能承諾。而為什麼引入了VFS,就能實現這兩個特性呢?在接下來,我們將以這樣的一個思路來切入 文章的正題:我們將先簡要介紹下用以描述VFS模型的一些數據結構,總結出這些數據結構相互間的關系;然後 選擇兩個具有代表性的文件I/O操作sys_open()和sys_read()來詳細說明內核是如何藉助VFS和具體的文件系統打 交道以實現跨文件系統的文件操作和承諾「一切皆是文件」的口號。

6. linux虛擬文件系統的關鍵數據結構有哪些

linux虛擬文件系統核心數主要有以下幾個數據結構:
*
超級塊結構(struct
super_block
{...}
)
該結構保存了一個被安裝在linux系統上的文件系統的信息。對於基於磁碟的文件系統,該結構一般和保存在磁碟上的"文件系統控制塊"對應。也就是說如果是磁碟文件系統,該結構保存的磁碟文件系統的控制信息。
*
inode結構(
struct
inode
{...}
)
該結構中存儲的是一個特定文件的一般信息,對於一個基於磁碟的文件系統,該結構對應磁碟上的"文件數據控制塊"。每一個inode結構都對應一個inode節點號,這個節點號是唯一的,它也唯一標識一個文件系統中的文件。
*
file結構(
struct
file
{...}
)
該結構中存儲的是一個打開的文件和打開這個文件的進程間的交互信息。該結構保存在kernel的內存區,在打開文件時被創建,關閉文件時被釋放。
*
dentry結構(
struct
dentry
{...}
)
該結構存儲的是目錄實體和對應的文件的關聯信息。

7. 什麼是Linux虛擬文件系統VFS

虛擬文件系統(VFS)其實也可以翻譯成虛擬文件系統轉換(virtual filesystem switch)。可以看出來它的作用就是提供一個通用的介面來處理與Unix標准文件系統相關的所有系統調用。它所隱含的思想就是把表示很多不同種類的文件系統的共同信息放入內核;其中有一個欄位火函數來支持linux所支持的所有實際文件系統所提供的任何操作。對所調用的每個讀寫或者其他函數,內核都能把它們替換成支持本地linux文件系統,NTFS文件系統或者文件所在的任何文件系統的實際函數。 至於vfs的工作原理 就不是三言兩語可以解釋清楚的了、裡麵包含了很多知識包括文件系統、超級塊、i節點等等知識。其實主要就是用戶安裝了不同的文件系統,每個特定文件系統上都實現了包括open() close(),read(),write()等等的操作,在安裝的時候,每個特定的文件系統會在虛擬文件系統上注冊,當用戶需要對特定文件系統進行操作時 只需調用統一的系統調用,虛擬文件系統能夠調用對應文件系統上的函數來對文件進行操作。詳細的工作原理和實現 樓主需要花時間去學一學操作系統知識可一參考《深入理解Linux內核》《深入linux內核架構》等書

8. Linux虛擬文件系統中索引節點的結構及其作用是什麼

索引節點是UNIX文件系統的一個重要部分. 通常用戶不用考慮它們,但知道它們是什麼確實很有必要.
索引節點是磁碟上用於描述文件的一種數據結構. 它保存了文件的大部分重要信息,包括文件數據塊(用戶關心的文件部分)在磁碟上的地址. 每個索引節點都有自己的標識號, 稱為索引號(i-number). 實際上用戶根本不需要關心文件在磁碟上的物理地址, 也不用關心索引號----除非是要找出對文件的鏈接. 但用戶關心下列信息, 而它們都被保存在文件的索引節點中:
文件所有權: 擁有文件的用戶和組
文件訪問模式: 不同的用戶和組是否可以讀, 寫或執行文件.
文件時間標記: 文件最後一次被修改的時間, 最後被訪問的時間和索引節點最後被修改的時間.
文件類型: 是否為常規文件, 特殊文件或者其他類型的抽象偽裝文件.
文件系統第一次被創建時(通常是磁碟第一次初始化時), 會為每一個文件系統創建若干數量的索引節點. 該數目是文件系統所能容納的最大文件數. 只要不重新初始化文件系統, 就不能改變這個數目, 否則會損壞該文件系統上所有的數據. 很有可能(雖然很少見)文件系統會將索引節點全部用光,就像有可能用完存儲空間一樣----當文件系統中有很多很多小文件時,這種情況就可能發生.
使用ls –l命令會顯示出在大部分信息. ls –i option顯示文件的索引號. 而stat命令則可以列出索引節點中的幾乎所有信息.

9. linux支持的文件系統有哪些

比如Btrfs、、ReiserFS、ext、ext2、ext3、ext4、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。

Linux操作系統使用虛擬文件系統(VFS)向上和用戶進程文件訪問系統調用介面,向下和具體不同文件系統的實現介面。VFS屏蔽了具體文件的實現細節,向上提供統一的操作介面。通過VFS可以實現任意的文件系統,這些文件系統通過文件訪問系統調用都可以訪問。所以Linux系統核心可以支持十多種文件系統類型。

(9)linux模擬文件系統擴展閱讀:

EXT是延伸文件系統(英語:Extended file system,縮寫為 ext或 ext1),也譯為擴展文件系統,一種文件系統,於1992年4月發表,是為linux核心所做的第一個文件系統。採用Unix文件系統(UFS)的元數據結構,以克服MINIX文件系統性能不佳的問題。它是在linux上,第一個利用虛擬文件系統實現出的文件系統,在linux核心0.96c版中首次加入支持,最大可支持2GB的文件系統

EXT3是第三代擴展文件系統(英語:Third extended filesystem,縮寫為ext3),是一個日誌文件系統,常用於Linux操作系統。它是很多Linux發行版的默認文件系統。Stephen Tweedie在1999年2月的內核郵件列表中,最早顯示了他使用擴展的ext2,該文件系統從2.4.15版本的內核開始,合並到內核主線中。

10. Linux下的虛擬文件系統究竟起到什麼作用

要明白虛擬文件系統之前必須先搞清楚什麼是文件。
狹義地說,「文件」是指「磁碟文件」,進而可以是有組織有次序地存儲於任何介質(包括內存)中的一組信息。廣義地說,凡是可以產生或消耗信息的都是文件。比方說設備文件、管道、套接字以及/proc目錄下的特殊文件(實際上只存在於內存中),這些都是「文件」。磁碟文件只不過是個特例而已,你可以認為他是在磁碟設備上存儲的、按照一定次序組織在一起的一組相關的信息。
上面這些是我從書上抄的,但我自己的看法是,計算機系統中所有內核向應用程序提供的信息輸入輸出介面都是文件。所以應用層看到的「文件」已經是被操作系統抽象過的一個輸入輸出介面。拿磁碟文件來說,對應用而言它看到的是一個個文件按照目錄結構組織起來的一棵樹,但實際上磁碟設備並不知道這么回事兒,它只認識磁頭、柱面和扇區。從這個角度上來說,應用程序看到的文件本身就是虛擬的。所謂的對文件操作最終都要落實到磁碟設備對某些扇區的讀寫上,但這些都是內核處理的,應用程序是看不見這一切的。
知道了廣義的文件系統定義之後就不難理解,作為一個通用操作系統,linux需要為用戶程序提供一個統一的系統操作界面來完成對各種文件的訪問。虛擬文件系VFS就是這么一個統一的、抽象的、虛擬的文件操作界面。你可以認為它是應用層與驅動層之間的一個中間層,對上提供一組標準的介面open/close/read/write/lseek,對下則又根據不同的文件類型調用不同的驅動程序提供的介面完成對具體設備的操作。這些操作通常是通過讀寫外設上(磁碟也是外設)的控制寄存器和存儲區間來完成的。
不知道我這樣解釋你明白了沒,要是還不明白可以看看我共享在網路知道上的《Linux內核源代碼情景分析》,那裡面有更詳細的說明。

閱讀全文

與linux模擬文件系統相關的資料

熱點內容
輸入文件格式 瀏覽:103
織夢網站一排4張圖片 瀏覽:301
樂1s可以升級到全網通嗎 瀏覽:484
QQ瀏覽器保留密碼mac 瀏覽:761
一台電腦如何共享文件夾 瀏覽:942
wps如何保存pdf文件 瀏覽:602
PS源文件是厘米 瀏覽:766
創建桌面文件夾路徑 瀏覽:900
華為手機app應用數據哪些刪除 瀏覽:765
資料庫有哪些表格 瀏覽:741
bada12微信java 瀏覽:16
小白編程什麼最好學 瀏覽:205
qq回頭看頭像 瀏覽:338
蘋果換屏要多長時間 瀏覽:283
如何用平板電腦學編程 瀏覽:424
格式工廠怎麼轉換swf文件 瀏覽:817
怎麼做一個試用網站 瀏覽:953
哪裡有信息不對稱的app 瀏覽:59
win10的gpeditmsc文件 瀏覽:451
4399游戲盒20版本 瀏覽:349

友情鏈接