16.4 Linux內核內核模塊)的加載

      網友投稿 844 2022-05-28

      GRUB 加載了內核之后,內核首先會再進行二次系統的自檢,而不一定使用 BIOS 檢測的硬件信息。這時內核終于開始替代 BIOS 接管 Linux 的啟動過程了。

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

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

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

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

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

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

      initramfe虛擬文件系統

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

      也就是說,通過 initramfs 虛擬文件系統在內存中模擬出一個根目錄,然后在這個模擬根目錄中加載 SCSI 等硬件的驅動,就可以加載真正的根目錄了,之后才能調用 Linux 的第一個進程 /sbin/init。

      16.4 Linux內核(內核模塊)的加載

      Initramfs 虛擬文件系統主要有以下優點:

      initramfs 隨著其中數據的増減自動増減容量。

      在 initramfs 和頁面緩存之間沒有重復數據。

      initramfs 重復利用了 Linux caching 的代碼,因此幾乎沒有増加內核尺寸,而 caching 的代碼已經經過良好測試,所以 initramfs 的代碼質量也有保證。

      不需要額外的文件系統驅動。

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

      圖 1 內核啟動流程

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

      [root@localhost ~]# mkdir /tmp/initramfs \#建立測試目錄 [root@localhost ~]# cp/boot/ initramfs-2.6.32-279.el6.i686.img/tmp/initramfs/ \#復制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 \#查看文件類型,發現這個文件是一個使用gzip命令打包的壓縮包 [root@localhost initramfs]# mv initramfs-2.6.32-279.el6.i686.imginitramfs-2.6.32-279.el6.i686.img.gz \#修改文件的擴展名為.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

      Linux

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:【愚公系列】2021年12月 Java教學課程 27-ArrayList的使用
      下一篇:金蝶EAS系統管理員應用操作實驗
      相關文章
      亚洲中文无码亚洲人成影院| 亚洲电影在线播放| 在线a亚洲老鸭窝天堂av高清| 亚洲精品在线网站| 亚洲熟妇色自偷自拍另类| 久久亚洲AV成人无码| 亚洲国产人成在线观看69网站| 久久精品视频亚洲| 亚洲AV永久无码精品成人| 亚洲成亚洲乱码一二三四区软件| 亚洲人成网77777色在线播放| 亚洲中文字幕在线第六区| 亚洲精品无码专区在线在线播放| 亚洲精品国产品国语在线| 亚洲国产精华液网站w| 亚洲国产精久久久久久久| 91亚洲精品视频| 亚洲妇女水蜜桃av网网站| 亚洲a∨无码男人的天堂| 亚洲综合无码一区二区痴汉| 亚洲乱码国产乱码精华| 成人伊人亚洲人综合网站222| 亚洲国产成人久久精品99| 久久久久亚洲精品无码网址| 亚洲欧洲成人精品香蕉网| 久久精品亚洲综合| 18gay台湾男同亚洲男同| 亚洲专区中文字幕| 亚洲日本成本人观看| 精品久久亚洲一级α| 亚洲中文无韩国r级电影| 国产亚洲精品a在线无码| 99久久精品国产亚洲| 67194在线午夜亚洲| 亚洲AV日韩AV一区二区三曲| 亚洲国产中文字幕在线观看 | a级亚洲片精品久久久久久久 | 亚洲AV永久无码精品水牛影视| 亚洲成人午夜在线| 亚洲一区二区三区四区视频| 亚洲jizzjizz少妇|