㈠ uboot、內核、操作系統、根文件系統他們之間到底是什麼關系,求大神指點!!
uboot是個引導啟動程序。BIOS自檢完成後就把電腦控制權交給uboot,由uboot來載入並引導操作系回統運行。
內核就是最最答最核心的那部份。操作系統內核就是操作系統的最最最最核心的那些程序。新安裝的操作系統中,一些自帶的小工具啊,小游戲啊,甚至連鍵盤滑鼠控制功能,這些都不屬於內核。內核是不包括硬體驅動程序的。
操作系統就是控制計算機硬體的軟體系統。它與內核的區別是它包含硬體驅動和一些基本的實用功能。
根文件系統這個名詞很少出現在windows中。在計算機存儲中,目錄結構都是以樹形結構表示的,根就是指這棵樹的根部。其他所有目錄都是在這個「根」上面逐級分配而來。「根文件系統」因為你加了「系統」二字,所以可以解釋為是指「整棵樹」,整個「樹形結構的文件系統」
它們之間的關系是:BIOS自檢---uboot引導----載入內核----操作系統啟動---啟動完成,系統待機。這幾個步驟所需要用到的文件與程序什麼的全部存貯在文件系統中。在這幾個名詞來說,文件系統可以獨立存在,但其他幾樣則無法脫離文件系統而存在。
㈡ linux啟動時掛載rootfs的幾種方式
一直對linux啟動時掛載根文件系統的過程存在著很多疑問,今天在水木精華區找到了有用的資料,摘錄如下:
1。linux啟動時,經過一系列初始化之後,需要mount 根文件系統,為最後運行init進程等做准備,mount 根文件系統有這么幾種方式:
1)文件系統已經存在於硬碟(或者類似的設備)的某個分區上了,kernel根據啟動的命令行參數(root=/dev/xxx),直接進行mount。 這里有一個問題,在root文件系統本身還不存在的情況下,kernel如 何根據/dev/xxx來找到對應的設備呢?注意:根文件系統和其他文件系統的mount方式是不一樣的,kernel通過直接解析設備的名稱來獲得設備的主、從設備號,然後就可以訪問對應的設備驅動 了。所以在init/main.c中有很長一串的root_dev_names(如hda,hdab,sda,sdb,nfs,ram,mtdblock……),通過這個表就可以根據設備名稱得到設備號。注意,bootloader或內核中設定的啟動參數(root=/dev/xxx)只是一個代號,實際的根文件系統中不一定存在這個設備文件!
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中用的物理地址對應。
㈢ 什麼是根文件系統
根文件系統首先是內核啟動時所mount的第一個文件系統,內核代碼映像文件保存在根文件系統中,而系統引導啟動程序會在根文件系統掛載之後從中把一些基本的初始化腳本和服務等載入到內存中去運行。
Linux啟動時,第一個必須掛載的是根文件系統;若系統不能從指定設備上掛載根文件系統,則系統會出錯而退出啟動。成功之後可以自動或手動掛載其他的文件系統。因此,一個系統中可以同時存在不同的文件系統。
在Linux中,必須要有一個根文件系統的概念。根文件系統首先是一種文件系統,該文件系統不僅具有普通文件系統的存儲數據文件的功能,但是相對於普通的文件系統,它的特殊之處在於,它是內核啟動時所掛載(mount)的第一個文件系統,內核代碼的映像文件保存在根文件系統中,系統引導啟動程序會在根文件系統掛載之後從中把一些初始化腳本(如rcS,inittab)和服務載入到內存中去運行。
mount是Linux下的一個命令,它可以將分區掛接到Linux的一個文件夾下,從而將分區和該目錄聯系起來,因此我們只要訪問這個文件夾,就相當於訪問該分區了。 目前mount已經不僅僅局限於Linux了。在Windows系統下的應用也越來越廣了,多用在虛擬光碟機類軟體上,比如Clone CD,Daemon tool,WinMount等。
根文件系統在系統啟動中到底是什麼時候掛載的呢?先將/dev/ram0掛載,而後執行/linuxrc.等其執行完後。切換根目錄,再掛載具體的根文件系統.根文件系統執行完之後,也就是到了Start_kernel()函數的最後,執行init的進程,也就第一個用戶進程。對系統進行各種初始化的操作。
根文件系統之所以在前面加一個」根「,說明它是載入其它文件系統的」根「,既然是根的話,那麼如果沒有這個根,其它的文件系統也就沒有辦法進行載入的。它包含系統引導和使其他文件系統得以掛載(mount)所必要的文件。
㈣ LINUX的各分區作用是什麼比如/、/home、/boot、/root等…
其實叫分區有些牽強,應該叫文件系統。
/根文件系統:內核啟動後要載入回的第一個文件系統。答
/home:存儲受感染用戶的文件。
/boot:Linux內核。
/root:根用戶的用戶文件夾。
/etc:保存配置文件。
/TMP:存儲臨時文件。通常文件系統在內存中,所以關閉後TMP中的文件會消失。
/usr:用戶程序通常存儲在/usr/bin中,用戶安裝的程序默認安裝在/usr/local/bin中。
(4)內核啟動根文件系統擴展閱讀:
LINUX系統優點:
1.Linux由許多微內核組成,其源代碼是完全開源的;
2.Linux繼承了Unix的特點,具有非常強大的網路功能。它支持所有的互聯網協議,包括TCP/IPv4,TCP/IPv6和鏈路層拓撲程序。
3.Linux系統工具鏈完整,簡單的操作可以配置出合適的開發環境,可以簡化開發過程,減少開發模擬工具的障礙,使系統具有很強的可移植性;