首先,,所謂文件系統(tǒng)就是用戶程序和文件的集合,,在LINUXPC機(jī)上放到一個統(tǒng)一的目錄下,然后通過一個工具打包成一個image文件,,這通常是個壓縮的過程,。然后燒制到板子上后,LINUX內(nèi)核啟動完成后,,會逐個掛接這些文件系統(tǒng)映象文件并做解包的工作,,當(dāng)然第一個掛接的就是rootfs了,,有了rootfs并提供了SHELL之后,就可以通過mount這個SHELL命令來掛載其它FS了,。 對于JFFS2,,則不要解壓原有的jffs2.img,而是直接往原來的目錄里面添加即可: 對于CRAMFS: 對于uClinux上用的ROMFS: cramfs和romfs只是一個文件系統(tǒng)類型,ramdisk相當(dāng)于一塊硬盤空間,,可以理解為在內(nèi)存中虛擬出一塊硬盤來,,所以它上面就可以有你 linux支持的各種文件系統(tǒng)什么的。所以你問的,,它和romfs和cramfs確實不是一個層次的概念,。 ^-^恭喜你,你答對了,,加10分 而ramdisk呢,?這個用的比較多,,ramdisk相當(dāng)于一塊硬盤空間,可以理解為在內(nèi)存中虛擬出一塊硬盤來,,所以它上面就可以有你linux支持的各種文件系統(tǒng)什么的,。所以你問的,它和romfs和cramfs確實不是一個層次的概念,。 關(guān)鍵是以后,,在ramdisk里面可以寫,這是一個和cramfs重要的區(qū)別了,。 然后,,你的文件系統(tǒng)所在的目錄的所有文件copy到tmp目錄下: 比如你的文件系統(tǒng)目錄在/root/rootfs-test : 然后卸載/tmp/ 目錄就好了,。 一般的情況下,ramdisk是要壓縮的,,對于上面的生成好的img,, rootfs.img ,你可以這樣壓縮: romfs 個人經(jīng)驗: 你自己要創(chuàng)建文件系統(tǒng),一般是先建一個目錄在里面建一些常用的目錄,,比如bin ,sbin ,root ,etc lib 什么的,,正如樓上所言,lib比較煩,,需要考慮你要用的程序需要的動態(tài)鏈接庫,, 建議你先搞一個別人的,拿過來,,參考,,自己去改,一開始,,自己去作肯定要瘋的,。 你可以到網(wǎng)上搜搜的。 有個網(wǎng)站,,http://user-mode-linux./ 這個里面提供了一些簡單的文件系統(tǒng),,你可以拿過來,,自己改改。 這是個比較快的方法,,其實,,里面要改基本是:
在內(nèi)存上建立自己的文件系統(tǒng) 目的:學(xué)習(xí)內(nèi)核數(shù)天,,躍躍欲試 決定在RAM上建立一個ROOT文件系統(tǒng),從而對Linux的啟動過程,,掛載root文件系統(tǒng)加深理解. 參考:www. 上的電子期刊第一期《走進(jìn)Linux 操作系統(tǒng)》的一個試驗 操作步驟: work.tar.gz - 一些腳本,,用于生成root文件系統(tǒng),initrd文件系統(tǒng)以及它們的鏡像文件比較有用的就是mkimage.sh,,其它兩個生成roots和initrdfs的好像不太好用 準(zhǔn)備工作是把work.tar.gz 解壓到/root/kernel/,,形成/root/kernel/work工作目錄 1 創(chuàng)建Root文件系統(tǒng)內(nèi)容直接用文章提供的做好的rootfs,解壓就可以了 (1). 在/etc/lilo.conf當(dāng)前啟動的內(nèi)核鏡像的下面加入append="ramdisk_size=20000"使其支持在Ram中建立20M的文件系統(tǒng)區(qū)域然后運(yùn)行lilo和reboot (2). dd if=/dev/zero of=/dev/ram bs=1k count=20000 #對/dev/ram文件對應(yīng)的設(shè)備清零,,目的是提高后來的壓縮率 #把rootfs文件數(shù)據(jù)拷貝到新建的文件系統(tǒng)上,也即/dev/ram對應(yīng)的物理設(shè)備上運(yùn)行df ,注意1k-blocks一欄中/dev/ram的數(shù)值,假定為ramsize umount /dev/ram 4 生成initrd鏡像 和第二步類似 或者直接執(zhí)行腳本mkimage.sh生成initrd.img.gz和ramlinux.img.gz 它的工作原理是:
1、 Linux文件系統(tǒng)概述 Linux中用戶能看到的文件空間是一個單樹狀結(jié)構(gòu)的,,該樹的根在頂部,,稱為根目錄(root),用“/”表示。文件空間中的各種目錄和文件從樹根向下分支,。 對用戶而言,,該目錄樹就象一個無縫的整體,用戶能看見的是緊密聯(lián)系的目錄和文件,。實際上,,文件樹中的許多目錄存放在一個磁盤、不同磁盤甚至不同的計算機(jī)的不同分區(qū)中,。當(dāng)磁盤分區(qū)之一被“mount”到文件樹中稱為“安裝點”(mount point)的目錄上時,,就成為了該目錄樹的一個組成部分。 當(dāng)windows 98的C:盤(其本身是FAT32文件系統(tǒng))未被安裝時,,/mnt/winc是根文件系統(tǒng)中的一個普通子目錄(格式可能是Linux EXT2/3),,里面可以存放任何數(shù)據(jù),。而FAT32格式的C盤上的數(shù)據(jù)獨立于Linux系統(tǒng),不能被Linux系統(tǒng)所讀取,。安裝(mount)之后,,/mnt/winc/就成了安裝點,其中所有的數(shù)據(jù)都將被FAT32文件系統(tǒng)所屏蔽,,用戶只能看到FAT32文件系統(tǒng)中存放的數(shù)據(jù),,只能將該文件系統(tǒng)卸載之后,/mnt/winc中原有的數(shù)據(jù)才會出現(xiàn),,不會丟失,。 Linux正是通過這種將不同文件系統(tǒng)裝配在一起的技術(shù),實現(xiàn)了個文件系統(tǒng)之間的無縫連接,,為用戶的操作提供了極大的方便,,用戶也不用費(fèi)心思去考慮光盤驅(qū)動器的盤符是什么了。 2,、Linux文件系統(tǒng)組成 Linux操作系統(tǒng)由一些目錄和文件組成,。根據(jù)安裝的方式不同,這些目錄可能是不同的文件系統(tǒng),。通常,,一個系統(tǒng)可以有多個文件系統(tǒng)組成:根分區(qū)文件系統(tǒng)(/),和安裝在/usr下的文件系統(tǒng),,還有其他安裝在/home,、/var文件系統(tǒng)。其中根文件系統(tǒng)必須是Linux ext2/3.順便提一下最簡單的Linux操作系統(tǒng)分區(qū)是/和交換分區(qū)(SWAP),。 根目錄中包含了組成根目錄的內(nèi)容,,也為其他的文件系統(tǒng)提供了安裝點。 /dev目錄 包含所有的設(shè)備文件,、這些設(shè)備式系統(tǒng)設(shè)置的,、一般都和系統(tǒng)的硬件有一定相互對應(yīng)關(guān)系的特殊文件,分為快設(shè)備,,字符設(shè)備和特殊設(shè)備,,一般不要隨便更改和刪除 /bin 目錄 包含稱為二進(jìn)制文件的可執(zhí)行程序 /sbin目錄 和/bin目錄類似,這些文件往往是用來進(jìn)行系統(tǒng)管理的,,一般只有root才有運(yùn)行的權(quán)限 /etc 目錄 Linux系統(tǒng)的絕大部分配置文件都存放在這里,,這些文件是系統(tǒng)更符合用戶的需要。 /proc 目錄 這實際是一個虛擬的文件系統(tǒng),,使系統(tǒng)啟動是從內(nèi)存中建立的,,用于內(nèi)存讀取數(shù)據(jù)。 /tmp 目錄 用于存放各種臨時文件,這些文件大都是程序運(yùn)行是產(chǎn)生的,,程序結(jié)束時一般將他們刪除 /home目錄 存放一般用戶的個人目錄 /var 目錄 保存大小和內(nèi)容隨時改變的文件,,通常各種系統(tǒng)日志文件放在這里 /lib 目錄 存放系統(tǒng)的各種庫文件,庫文件在編譯程序時會用到,。 /mnt 目錄 為其他的文件系統(tǒng)提供安裝點 /boot 目錄 存放系統(tǒng)啟動時所需的各項文件 /root 目錄 超級用戶的個人目錄,,普通用戶沒有權(quán)限訪問 /lost+found目錄 :放置一些垃圾文件 /usr目錄 一般用戶程序安裝所在的目錄,使系統(tǒng)中最龐大和最重要的目錄,。 3,、 文件系統(tǒng)管理 Linux文件系統(tǒng)管理最上層模塊是文件系統(tǒng)。系統(tǒng)啟動時,,必首先裝入“根”文件系統(tǒng),,然后根據(jù)/etc/fstab中制訂,逐個建立文件系統(tǒng),。此外用戶也可以通過mount,、umount操作,隨時安裝和卸載文件系統(tǒng),。 當(dāng)裝入一個文件系統(tǒng)時,,應(yīng)首先向系統(tǒng)核心注冊該系統(tǒng)及其類型。當(dāng)卸載一個文件系統(tǒng)時,,應(yīng)向核心申請注銷該系統(tǒng)和類型,。文件系統(tǒng)的注冊和注銷反映在以vfsmnlist為鏈頭,vfsmntail為鏈尾,,以vfsmount為節(jié)點的單向鏈表中,。從鏈表的每一個vfsmount可以找出一個已注冊的文件系統(tǒng)的信息。文件系統(tǒng)類型的注冊和注銷反映在以file_systems為鏈頭,,以file_system_type為節(jié)點的單向鏈表中,。鏈表中的每一個file_system-type節(jié)點描述了一個已注冊的文件系統(tǒng)類型。 4,、虛擬文件系統(tǒng)(VFS) VFS是物理文件系統(tǒng)與服務(wù)之間的一個接口層,他對每一個Linux文件系統(tǒng)的所有細(xì)節(jié)進(jìn)行抽象,,使得不同的文件系統(tǒng)在Linux核心以及系統(tǒng)中運(yùn)行的其他進(jìn)程看來,,都是相同的。 嚴(yán)格說來,,VFS并不是一種實際的文件系統(tǒng),。他只存在內(nèi)存中,不存在于任何外存空間,。VFS在系統(tǒng)啟動是建立,,在系統(tǒng)關(guān)閉時消亡 VFS的功能包括 記錄可用的文件系統(tǒng)的類型 將設(shè)備同對應(yīng)的文件系統(tǒng)聯(lián)系起來 處理一些面向文件的通用操作 涉及到針對文件系統(tǒng)的操作時,VFS把他們映射到與控制文件、目錄,、以及inode相關(guān)的物理文件系統(tǒng),。 5、安裝和卸載文件系統(tǒng) 要在Linux目錄樹中安裝一個文件系統(tǒng),,必須要有實際要安裝的硬盤分區(qū),、光盤或軟盤,并且作為該文件系統(tǒng)安裝點的目錄必須是實際存在的,。 手工安裝文件系統(tǒng),。命令是mount [options] <device> <mount_point>,device是要安裝的實際設(shè)備文件,mount_point是安裝點,。Options是mount接收的命令行選項,。如果用戶沒有給出所需的選項,mount將嘗試從相關(guān)的/etc/fstab文件中查找,。 Mount的常用選項有: 1,、-r以只讀方式安裝文件系統(tǒng)。 2,、-w以可讀寫方時安裝文件系統(tǒng),。 3、-v verbose模式,,mount將給出許多信息以報告其工作狀態(tài) 4,、-a 安裝/etc/fstab文件中所列的所有文件系統(tǒng) 5、-o list_of_options選項列表,,各選項之間用逗號隔開,。 6、-t file_type指定要安裝的文件系統(tǒng)類型,。 直接裝載文件系統(tǒng)的最基本命令就是 mount –t <fs_type> <device> <mount_point>, -t選項接受auto作為其參數(shù),,這使得mount能夠自動檢測文件系統(tǒng)類型。 卸載文件系統(tǒng)的命令是umount,由四種基本的命令格式 umount <device> umount <mount_point> umount –a umount –t fs_type 前兩種方式卸下由device和mount_point指定的文件系統(tǒng),,第三種形式卸下所有的文件系統(tǒng),,第四種方式卸下制定類型的文件系統(tǒng)。Umount不能卸下正在使用的文件系統(tǒng),,當(dāng)然系統(tǒng)的根分區(qū)也不能卸載,,知道系統(tǒng)退出Linux的運(yùn)行狀態(tài)。
合并內(nèi)核與romfs(以及獨立的內(nèi)核與romfs)映象文件的方法 image.ram和romfs.img的分兩次下載可能已經(jīng)使您覺得很麻煩了,,下面是將兩者合并為一個文件(image.ram)下載的方法,, 修改linux2.4.x/driver/block/blkmem.c文件: #ifdef CONFIG_BOARD_MBA 44 重新編譯,就會生成一個較大的合并了的image.ram了,。 (05-4-29)現(xiàn)在的bootloader和uClinux源碼包都是支持合并映像文件的了,,但有部分做應(yīng)用的用戶使用兩者分離的更為方便,,因此現(xiàn)在我們也提供這樣的bootloader,請需要的用戶來信索取,。 |
|
來自: 望穿墻 > 《filesystem》