1。linux啟動時,經過一系列初始化之後,需要mount 根檔案系統,為最後執行init程序等做準備,mount 根檔案系統有這麼幾種方式:
1)檔案系統已經存在於硬碟(或者類似的裝置)的某個分割槽上了,kernel根據啟動的命令列引數(root=/dev/***),直接進行mount。 這裡有乙個問題,在root檔案系統本身還不存在的情況下,kernel如 何根據/dev/***來找到對應的裝置呢?注意:根檔案系統和其他檔案系統的mount方式是不一樣的,kernel通過直接解析裝置的名稱來獲得裝置的主、從裝置號,然後就可以訪問對應的裝置驅動 了。所以在init/main.c中有很長一串的root_dev_names(如hda,hdab,sda,sdb,nfs,ram,mtdblock……),通過這個表就可以根據裝置名稱得到裝置號。注意,bootloader或核心中設定的啟動引數(root=/dev/***)只是乙個代號,實際的根檔案系統中不一定存在這個裝置檔案!
2)從軟碟機等比較慢的裝置上裝載根檔案系統,如果kernel支援ramdisk,在裝載root檔案系統時,核心判斷到需要從軟盤(fdx)mount(root=/dev/fd0),就會自動把檔案系統映象複製到ramdisk,一般對應裝置ram0,然後在ram0上mount 根檔案系統。 從原始碼看,如果kernel編譯時沒有支援ramdisk,而啟動引數又是root=/dev/fd0, 系統將直接在軟盤上mount,除了速度比較慢,理論上是可行的(沒試過,不知道是不是這樣?)
3)啟動時用到initrd來mount根檔案系統。注意理解ramdisk和initrd這兩個概念,其實ramdisk只是在ram上實現的塊裝置,類似與硬碟操作,但有更快的讀寫速度,它可以在系統執行的任何時候使用,而不僅僅是用於啟動;initrd(boot loader initialized ram disk)可以說是啟動過程中用到的一種機制,具體的實現過程也使用ramdisk技術。就是在裝載linux之前,bootloader可以把乙個比較小的根檔案系統的映象裝載在記憶體的某個指定位置,姑且把這段記憶體稱為initrd(這裡是initrd所佔的記憶體,不是ramdisk,注意區別),然後bootloader通過傳遞引數的方式告訴核心initrd的起始位址和大小(也可以把這些引數編譯在核心中),在啟動階段就可以暫時的用initrd來mount根檔案系統。initrd的最初的目的是為了把kernel的啟動分成兩個階段:在kernel中保留最少最基本的啟動**,然後把對各種各樣硬體裝置的支援以模組的方式放在initrd中,這樣就在啟動過程中可以從initrd所mount的根檔案系統中裝載需要的模組。這樣的乙個好處就是在保持kernel不變的情況下,通過修改initrd中的內容就可以靈活的支援不同的硬體。在啟動完成的最後階段,根檔案系統可以重新mount到其他裝置上,但是也可以不再 重新mount(很多嵌入式系統就是這樣)。 initrd的具體實現過程是這樣的:bootloader把根檔案系統映象裝載到記憶體指定位置,把相關引數傳遞給核心,核心啟動時把initrd中的內容複製到ramdisk中(ram0),把initrd占用的記憶體釋放掉,在ram0上mount根檔案系統。從這個過程可以看出,核心需要對同時對ramdisk和initrd的支援(這種需要都編入核心,不能作為模組)。
2。嵌入式系統根檔案系統的一種實現方法:對於kernel和根檔案系統都儲存在flash中的系統,一般可以利用linux啟動的initrd的機制。具體的過程前面已經比較清楚了,還有一點就是在啟動引數中傳遞root=/dev/ram0,這樣使得用initrd進行mount的根檔案系統不再切換,因為這個時候實際的裝置就是ram0。還有就是initrd的起始位址引數為虛擬位址,需要和bootloader中用的實體地址對應。
linux根檔案系統掛載過程
initramfs 當linux核心啟動後,會找到並執行第乙個使用者程式,一般是init。這個程式存在於檔案系統當中,檔案系統存在於裝置上,但不知道init存在哪個裝置上,於是有了核心命令列選項root 用來指定root檔案系統存在於哪個裝置上。然後由於後來的裝置型別越來越來多,比如可能在scsi,...
NFS掛載根檔案系統
首先確保你的檔案系統可以正常工作,通過nfs掛載只是幾個服務的事情而已,我的系統是ubuntu 10.04 既然是nfs伺服器,那麼就需要開啟相關的服務。首先來安裝吧 sudo apt get install nfs kernel server 有的服務直接安裝apt get 在10.04上不支援,...
4 根檔案系統掛載
根檔案系統掛載 根據儲存裝置的硬體特性 系統需求,不同的檔案系統型別有不同的應用場合。在嵌入式 linux 應用中,主要的儲存裝置為 ram 和 flash,常用的基於存 儲裝置的檔案 系統型別包括 jffs2,yaffs2,ubifs,ramdisk 等。一 使用initramfs 1 進入 ro...