Linux內核與根文件系統(tǒng)的關系詳解

Linux內核與根文件系統(tǒng)的關系 開篇題外話:對于Linux初學者來說,這是一個很糾結的問題,但這也是一個很關鍵的問題!
一語破天機: “盡管內核是 Linux 的核心,但文件卻是用戶與操作系統(tǒng)交互所采用的主要工具。這對 Linux 來說尤其如此,這是因為在 UNIX 傳統(tǒng)中,它使用文件 I/O 機制管理硬件設備和數據文件。”
一.什么是文件系統(tǒng)
文件系統(tǒng)指文件存在的物理空間,linux系統(tǒng)中每個分區(qū)都是一個文件系統(tǒng),都有自己的目錄層次結構。
Linux文件系統(tǒng)中的文件是數據的集合,文件系統(tǒng)不僅包含著文件中的數據而且還有文件系統(tǒng)的結構,所有Linux 用戶和程序看到的文件、目錄、軟連接及文件保護信息等都存儲在其中。這種機制有利于用戶和操作系統(tǒng)的交互。
每個實際文件系統(tǒng)從操作系統(tǒng)和系統(tǒng)服務中分離出來,它們之間通過一個接口層:虛擬文件系統(tǒng)或VFS來通訊。VFS使得Linux可以支持多個不同的文件系統(tǒng),每個表示一個VFS 的通用接口。由于軟件將Linux 文件系統(tǒng)的所有細節(jié)進行了轉換,所以Linux核心的其它部分及系統(tǒng)中運行的程序將看到統(tǒng)一的文件系統(tǒng)。Linux 的虛擬文件系統(tǒng)允許用戶同時能透明地安裝許多不同的文件系統(tǒng)。
在Linux文件系統(tǒng)中,EXT2文件系統(tǒng)、虛擬文件系統(tǒng)、/proc文件系統(tǒng)是三個具有代表性的文件系統(tǒng)。
二.什么是根文件系統(tǒng)
根文件系統(tǒng)首先是一種文件系統(tǒng),該文件系統(tǒng)不僅具有普通文件系統(tǒng)的存儲數據文件的功能,但是相對于普通的文件系統(tǒng),它的特殊之處在于,它是內核啟動時所掛載(mount)的第一個文件系統(tǒng),內核代碼的映像文件保存在根文件系統(tǒng)中,系統(tǒng)引導啟動程序會在根文件系統(tǒng)掛載之后從中把一些初始化腳本(如rcS,inittab)和服務加載到內存中去運行。我們要明白文件系統(tǒng)和內核是完全獨立的兩個部分。在嵌入式中移植的內核下載到開發(fā)板上,是沒有辦法真正的啟動Linux操作系統(tǒng)的,會出現無法加載文件系統(tǒng)的錯誤。
那么根文件系統(tǒng)在系統(tǒng)啟動中到底是什么時候掛載的呢?先將/dev/ram0掛載,而后執(zhí)行/linuxrc.等其執(zhí)行完后。切換根目錄,再掛載具體的根文件系統(tǒng).根文件系統(tǒng)執(zhí)行完之后,也就是到了Start_kernel()函數的最后,執(zhí)行init的進程,也就第一個用戶進程。對系統(tǒng)進行各種初始化的操作。
根文件系統(tǒng)之所以在前面加一個”根“,說明它是加載其它文件系統(tǒng)的”根“,既然是根的話,那么如果沒有這個根,其它的文件系統(tǒng)也就沒有辦法進行加載的。它包含系統(tǒng)引導和使其他文件系統(tǒng)得以掛載(mount)所必要的文件。根文件系統(tǒng)包括Linux啟動時所必須的目錄和關鍵性的文件,例如Linux啟動時都需要有init目錄下的相關文件,在 Linux掛載分區(qū)時Linux一定會找/etc/fstab這個掛載文件等,根文件系統(tǒng)中還包括了許多的應用程序bin目錄等,任何包括這些Linux 系統(tǒng)啟動所必須的文件都可以成為根文件系統(tǒng)。Linux啟動時,第一個必須掛載的是根文件系統(tǒng);若系統(tǒng)不能從指定設備上掛載根文件系統(tǒng),則系統(tǒng)會出錯而退出啟動。成功之后可以自動或手動掛載其他的文件系統(tǒng)。因此,一個系統(tǒng)中可以同時存在不同的文件系統(tǒng)。在 Linux 中將一個文件系統(tǒng)與一個存儲設備關聯(lián)起來的過程稱為掛載(mount)。使用 mount 命令將一個文件系統(tǒng)附著到當前文件系統(tǒng)層次結構中(根)。在執(zhí)行掛裝時,要提供文件系統(tǒng)類型、文件系統(tǒng)和一個掛裝點。根文件系統(tǒng)被掛載到根目錄下“/”上后,在根目錄下就有根文件系統(tǒng)的各個目錄,文件:/bin /sbin /mnt等,再將其他分區(qū)掛接到/mnt目錄上,/mnt目錄下就有這個分區(qū)的各個目錄,文件。
三.什么是內核
Linux內核就像人的心臟,靈魂,指揮中心。內核是一個操作系統(tǒng)的核心,它負責管理系統(tǒng)的進程,內存,設備驅動程序,文件和網絡系統(tǒng),決定著系統(tǒng)的性能和穩(wěn)定性。內核以獨占的方式執(zhí)行最底層任務,保證系統(tǒng)正常運行。協(xié)調多個并發(fā)進程,管理進程使用的內存,使它們相互之間不產生沖突,滿足進程訪問磁盤的請求等.
操作系統(tǒng)是一個用來和硬件打交道并為用戶程序提供一個有限服務集的低級支撐軟件。一個計算機系統(tǒng)是一個硬件和軟件的共生體,它們互相依賴,不可分割。計算機的硬件,含有外圍設備、處理器、內存、硬盤和其他的電子設備組成計算機的發(fā)動機。但是沒有軟件來操作和控制它,自身是不能工作的。完成這個控制工作的軟件就稱為操作系統(tǒng),在Linux的術語中被稱為“內核”,也可以稱為“核心”。Linux內核的主要模塊(或組件)分以下幾個部分:存儲管理、CPU和進程管理、文件系統(tǒng)、設備管理和驅動、網絡通信,以及系統(tǒng)的初始化(引導)、系統(tǒng)調用等。
四.內核與文件系統(tǒng)的關系
技術上說Linux是一個內核。“內核”指的是一個提供硬件抽象層、磁盤及文件系統(tǒng)控制、多任務等功能的系統(tǒng)軟件。一個內核不是一套完整的操作系統(tǒng)。一套基于Linux內核的完整操作系統(tǒng)叫作Linux操作系統(tǒng),或是GNU/Linux。
文件系統(tǒng)是kernel的一部分。文件系統(tǒng)實現了系統(tǒng)上存儲介質和其他資源的交互。kernel tree中的fs目錄都是關于文件系統(tǒng)的,可以說它是kernel的一個大子系統(tǒng)。
嵌入式系統(tǒng)在flash中分配了存放內核、根文件系統(tǒng)的區(qū)域。bootloader加載了內核,內核啟動,加載文件系統(tǒng),進入Linux系統(tǒng)。
整個嵌入式系統(tǒng)而言,可以分為三個部分1.uboot 2.kernel 3.文件系統(tǒng)。其中kernel中以VFS去支持各種文件系統(tǒng),如yaffs,ext3,cramfs等等。yaffs/yaffs2是專為嵌入式系統(tǒng)使用NAND型閃存而設計的一種日志型文件系統(tǒng)。在內核中以VFS來屏蔽各種文件系統(tǒng)的接口不同,以VFS向kernel提供一個統(tǒng)一的接口。如打開一個文件時統(tǒng)一使用open,寫時采用write,而不用去考慮是那種文件系統(tǒng),也不用去考慮文件系統(tǒng)是如何將數據寫入物理介質的。其中 kernel中的配置,只是讓VFS支持這種接口。
相關文章
- 一些朋友問小編如何修改Linux的GRUB啟動背景?今天小編將為大家?guī)淼氖切薷腖inux的GRUB啟動背景的方法!希望對大家會有幫助!有需要的朋友一起去看看吧2017-03-29
- 最近有些朋友問小編在Mac外置硬盤上如何安裝Linux?今天小編將為大家?guī)淼氖窃贛ac外置硬盤上安裝Linux的方法!希望能夠幫助到大家!有需要的朋友一起去看看吧2017-03-29
- 最近一些朋友反饋說不知道Linux內核環(huán)境下如何申請大塊內存?今天小編將為大家?guī)淼氖荓inux內核環(huán)境下申請大塊內存的方法!有需要的朋友一起去看看吧2017-03-28
- VMWare是目前業(yè)界最為流行的一款虛擬機工具。那么VMWare虛擬機下Linux無法全屏怎么辦?今天小編將為大家分享的是VMWare虛擬機下Linux無法全屏的解決方法!有需要的朋友一起2017-03-27
- Linux是一套免費使用和自由傳播的類Unix操作系統(tǒng),是一個基于POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統(tǒng)。那么Linux為何如此深得人心呢?下面為大家精選了12017-03-27
- 今天小編為大家?guī)淼氖荓inux統(tǒng)計行數方法及效率測試詳解!希望對大家會有幫助!有需要的朋友一起去看看吧2017-03-24
linux如何修改分區(qū)id?修改linux分區(qū)類型的方法
linux如何修改分區(qū)id 怎么修改linux分區(qū)類型?今天小編就為大家?guī)淼氖切薷膌inux分區(qū)類型的方法!希望對大家會有幫助!有需要的朋友一起去看看吧2017-03-24Linux系統(tǒng)Centos沒有網卡eth0配置文件的解決方法
今天小編要為大家?guī)淼氖荓inux系統(tǒng)Centos沒有網卡eth0配置文件的解決方法!希望對大家會有幫助!有需要的朋友一起去看看吧2017-03-24- Linux怎么使用命令查看文件指定行數的內容?Linux系統(tǒng)中想要查看制定行數的內容,該怎么查看呢?下面我們就來介紹三個命令的使用方法,需要的朋友可以參考下2017-03-24
- 這篇文章主要介紹了適合Linux新手的版本,對于Linux新手來說,這篇文章可以幫助到大家,需要的朋友可以參考下2015-06-25