日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Linux內(nèi)核(內(nèi)核模塊)的加載過程(超詳細(xì))
GRUB 加載了內(nèi)核之后,內(nèi)核首先會再進(jìn)行二次系統(tǒng)的自檢,而不一定使用 BIOS 檢測的硬件信息。這時內(nèi)核終于開始替代 BIOS 接管 linux 的啟動過程了。

成都創(chuàng)新互聯(lián)公司是專業(yè)的孟連網(wǎng)站建設(shè)公司,孟連接單;提供成都網(wǎng)站設(shè)計、成都做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行孟連網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!

內(nèi)核完成再次系統(tǒng)自檢之后,開始采用動態(tài)的方式加載每個硬件的模塊,這個動態(tài)模塊大家可以想象成硬件的驅(qū)動(默認(rèn) Linux 硬件的驅(qū)動是不需要手工安裝的,如果是重要的功能,則會直接編譯到內(nèi)核當(dāng)中;如果是非重要的功能,比如硬件驅(qū)動會編譯為模塊,則在需要時由內(nèi)核調(diào)用。不過,如果沒有被內(nèi)核硬件,要想驅(qū)動,就需要手工安裝個硬件的硬塊了。具體的安裝方法會在后續(xù)章節(jié)中介紹)。

那么,Linux 的內(nèi)核到底放在了哪里呢?當(dāng)然是 /boot 的啟動目錄中了,我們來看看這個目錄下的內(nèi)容吧。

[root@localhost ~]#ls /boot/
config-2.6.32-279.el6.i686
#內(nèi)核的配置文件,內(nèi)核編譯時選擇的功能與模塊
efi
#可擴(kuò)展固件接口,為英特爾為全新PC固件的體系結(jié)構(gòu)、接口和服務(wù)提出的建議標(biāo)準(zhǔn)
grub
#啟動引導(dǎo)程GTUB的數(shù)據(jù)目錄
initramfe-2.6.32-279.el6.i686.img
#虛擬文件系統(tǒng)(CentOS 6.x 中用initramfs替代了initrd,但功能是一樣的)
lost+found
故boot分區(qū)的備份目錄
symvers-2_6.32-279.el6.i686.gz
#模塊符號信息
System.map-2.6.32-279.el6.i686
#內(nèi)核功能和內(nèi)存地址的對應(yīng)列表
vmlinuz-2.6.32-279.el6.i686
#用于啟動的Linux內(nèi)核。這個文件是一個壓縮的內(nèi)核鏡像

我們已經(jīng)知道,Linux 會把不重要的功能編譯成內(nèi)核模塊,在需要時再調(diào)用,從而保證了內(nèi)核不會過大。在多數(shù) Linux 中,都會把硬件的驅(qū)動程序編譯為模塊, 這些模塊保存在 /lib/modules 目錄中。常見的 USB、SATA 和 SCSI 等硬盤設(shè)備的驅(qū)動,還有一些特殊的文件系統(tǒng)(如 LVM、RAID 等)的驅(qū)動,都是以模塊的方式來保存的。

如果 Linux 安裝在 IDE 硬盤之上,并且采用的是默認(rèn)的 ext3/4 文件系統(tǒng),那么內(nèi)核啟動后加載根分區(qū)和模塊的加載都沒有什么問題,系統(tǒng)會順利啟動。但是,如果 Linux 安裝在 SCSI 硬盤之上,或者采用的是 LVM 文件系統(tǒng),那么內(nèi)核(內(nèi)核載入內(nèi)存是啟動引導(dǎo)程序 GRUB 調(diào)用的,并不存在硬盤驅(qū)動不識別的問題)在加載根目錄之前是需要加載 SCSI 硬盤或 LVM 文件系統(tǒng)的驅(qū)動的。

SCSI 硬盤和 LVM 文件系統(tǒng)的驅(qū)動都放在硬盤的 /lib/modules 目錄中,既然內(nèi)核沒有辦法識別 SCSI 硬盤或 LVM 文件系統(tǒng),那怎么可能讀取 /lib/modules 目錄中的驅(qū)動呢?Linux 給出的解決辦法是使用 initramfs 這個虛擬文件系統(tǒng)來處理這個問題。

initramfe虛擬文件系統(tǒng)

CentOS 6.x 中使用 initramfs 虛擬文件系統(tǒng)取代了 CentOS 5.x 中的 initrd RAM Disk。它們的作用類似,可以通過啟動引導(dǎo)程序加載到內(nèi)存中,然后會解壓縮并在內(nèi)存中仿真成一個根目錄,并且這個仿真的文件系統(tǒng)能夠提供一個可執(zhí)行程序,通過該程序來加載啟動過程中所需的內(nèi)核模塊,比如 USB、SATA. SCSI 硬盤的驅(qū)動和 LVM、RAID 文件系統(tǒng)的驅(qū)動。

也就是說,通過 initramfs 虛擬文件系統(tǒng)在內(nèi)存中模擬出一個根目錄,然后在這個模擬根目錄中加載 SCSI 等硬件的驅(qū)動,就可以加載真正的根目錄了,之后才能調(diào)用 Linux 的第一個進(jìn)程 /sbin/init。

Initramfs 虛擬文件系統(tǒng)主要有以下優(yōu)點:

  • initramfs 隨著其中數(shù)據(jù)的増減自動増減容量。
  • 在 initramfs 和頁面緩存之間沒有重復(fù)數(shù)據(jù)。
  • initramfs 重復(fù)利用了 Linux caching 的代碼,因此幾乎沒有増加內(nèi)核尺寸,而 caching 的代碼已經(jīng)經(jīng)過良好測試,所以 initramfs 的代碼質(zhì)量也有保證。
  • 不需要額外的文件系統(tǒng)驅(qū)動。

其實大家只需要知道 initramfs 是為了在內(nèi)核中建立一個模擬根目錄,這個模擬根目錄是為了可以調(diào)用 USB、SATA、SCSI、LVM、RAID 等硬盤接口或文件系統(tǒng)的驅(qū)動模塊,加載了驅(qū)動模塊后才可以加載真正的系統(tǒng)根目錄。我們可以通過示意圖 1 來表示這個過程。





圖 1 內(nèi)核啟動流程

那么既然 initramfs 是一個仿真根目錄,那么我們是否可以看看這個仿真根目錄中到底是什么樣子的呢?當(dāng)然可以,命令如下:

[root@localhost ~]# mkdir /tmp/initramfs
#建立測試目錄
[root@localhost ~]# cp/boot/
initramfs-2.6.32-279.el6.i686.img/tmp/initramfs/
#復(fù)制initramfs文件
[root@localhost ~]# cd /tmp/initramfs/
[root@localhost initramfs]# file
initramfs-2.6.32-279.el6.i686.img
initramfe-2.6.32-279.el6.i686.img:gzip compressed
data,from Unix,last modified:
Wed Apr 10 21:49:34 2013, max compression
#查看文件類型,發(fā)現(xiàn)這個文件是一個使用gzip命令打包的壓縮包
[root@localhost initramfs]# mv initramfs-2.6.32-279.el6.i686.imginitramfs-2.6.32-279.el6.i686.img.gz
#修改文件的擴(kuò)展名為.gz
[root@localhost initramfs]# gunzip
initramfs-2.6.32-279.el6.i686.img.gz
#解壓縮
[root@localhost initramfs]# ls
initramfs-2.6.32-279.el6.i686.img
[root@localhost initramfs]# file
initramfs-2.6.32-279.el6.i686.img
initramfe-2.6.32-279.el6.i686.img: ASCII cpio archive (SVR4withnoCRC)
#查看文件類型,使用cpio命令的壓縮文件
[root@localhost initramfs]# cpio -ivcdu #解壓縮
[root@localhost initramfs]#ll
總用量34512
drwxr-xr-x. 2 root root 4096 4月 2412:10 bin
drwxr-xr-x. 2 root root 4096 4 月 24 12:10 cmdline
drwxr-xr-x. 3 root root 4096 4月 24 12:10 dev
-rw-r--r--. 1 root root 19 4 月 24 12:10 dracut-004-283.el6
drwxr-xr-x. 2 root root 4096 4 月 24 12:10 emergency
drwxr-xr-x. 7 root root 4096 4月 24 12:10 etc
-rwxr-xr-x. 1 root root 8962 4月 24 12:10 init
drwxr-xr-x. 2 root root 4096 4 月 24 12:10 initqueue
drwxr-xr-x. 2 root root 4096 4 月 24 12:10 initqueue-finished
drwxr-xr-x. 2 root root 4096 4 月 24 12:10 initqueue-settled
drwxr-xr-x. 2 root root 4096 4 月 24 12:10
initqueue-timeout
-rw-r--r--. 1 root root 35235328 4 月 24 12:09 initramfs-2.6.32-279.el6.i686.img
drwxr-xr-x. 9 root root 4096 4月 2412:10 lib
…省略部分輸出…
#這就是initramfs虛擬文件系統(tǒng)中的內(nèi)容,和根目錄是不是很像


新聞名稱:Linux內(nèi)核(內(nèi)核模塊)的加載過程(超詳細(xì))
文章出自:http://www.dlmjj.cn/article/dpicpoe.html