歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux的啟動過程詳解

Linux的啟動過程詳解

日期:2017/2/28 16:39:03   编辑:Linux教程

  Linux的啟動流程(/etc/inittab)

  1. 從BIOS到KERNEL

  BIOS自檢->MBR(GRUB)->KERNEL->KERNEL自解壓->內核初始化->內核啟動

  BIOS自檢

  當電腦開機的時候,電腦會進入BIOS,BIOS的工作主要是偵測電腦的周邊配套設備是否工作正常,如CPU的類型、速度、緩存等

  主板類型

  內存的速度,容量

  硬盤的大小,類型和工作模式

  風扇速度等

  主要是為了檢查這些設備在開機的時候是否能通過檢測,如果能通過檢測,說明電腦可以正常的工作。

  -----------------------------------------

  一、載入啟動程序

  BIOS自檢完成後,BIOS會根據用戶設置的啟動順序來由那個設備來啟動電腦的操作系統,這個設備一般是硬盤。

  也就是進入到硬盤的MBR區域(引導扇區),這個區域中的有512個字節的大小,其中前446個字節中保存的程序是選擇啟動分區,也就是電腦由那個硬盤分區來載入開機的程序。那麼在這個446個字節的空間中保存的就是啟動程序,然後由這個小程序來加載存儲在其他位置的操作系統,也就是啟動grub程序。

  當找到啟動設備(硬盤)時,第一階段所用的boot loader(存放在引導扇區)被裝載到RAM中並被執行。這裡的boot loader在大小上小於一個扇區的大小,也就是512字節,而它的任務,就是加載第二階段的boot loader。

  當負責第二階段的boot loader位於內存中並被執行時,通常會顯示一個一閃而過的屏幕,然後linux以及可選的初始化內存盤(一種臨時的根文件系統,如果想得到具體的介紹,請訪問http://likunarmstrong.bokee.com/5502266.html)會被裝載到存儲器中。當系統鏡像被加載時,第二階段的boot loader將把控制權轉交給內核鏡像,與此同時,內核開始自解壓並初始化。在這個階段,第二階段的boot loader會檢查系統的硬件,枚舉那些附加的硬件設備,掛載根設備,之後加載需要的內核模塊。完成之後,第一個用戶空間程序(init)開始執行,更高層次的系統初始化開始。

  這就是從表面上看,linux的啟動過程。好了,現在,讓我們更進一步,更深入地探索linux啟動過程中的一些細節。

  二、 系統的啟動

  系統啟動的階段,依賴於linux在哪個硬件設備上啟動。在嵌入式系統中,當系統被打開或者重新啟動的時候,就要使用啟動加載的環境。這方面的例子包括U -BOOT,RedBoot,和Lucent推出的MicroMonitor。嵌入式平台通常是綁定了啟動監視器的。這些程序位於目標硬件上flash存儲器的特定位置,提供了將linux內核鏡像下載到flash存儲器的方法,並在接下來的過程中執行它。除了擁有存儲和啟動linux鏡像的功能外,這些啟動監視器還能進行一定程度上的系統檢測和硬件初始化。在一個嵌入式的目標板中,這些啟動監視器通常覆蓋了第一階段與第二階段boot loader的功能。

  /************************************************************************************************/

  小知識:如何查看你的MBR內容。如果你希望查看你MBR的具體內容,請用以下命令:

  # dd if=/dev/hda of=mbr.bin bs=512 count=1

  # od -xa mbr.bin

  需要以root身份運行的dd命令,讀取你的第一個集成電子驅動器或者IDE驅動器的前512字節,並將他們寫入

  mbr.bim文件。od命令則是以十六進制和ASCII碼形式打印出這個二進制文件

  /************************************************************************************************/

  在個人電腦中,linux的啟動是從0xFFFF0地址開始的。BIOS的第一步動作就是進行上電自檢(POST)。POST的工作是檢查硬件設備。BIOS的第二步動作就是枚舉本地設備並初始化。

  由於BIOS功能使用上的不同,它由兩個部分組成:POST碼runtime服務。POST完成後,它將從存儲器中被清除,但是BIOS runtime服務會被保留,用於目標操作系統。

  為了啟動操作系統,BIOS的runtime服務將搜索那些激活狀態的或是可引導啟動的設備,搜索的順序則由CMOS設置決定(也就是我們平時所謂的在 BIOS中設置的啟動順序)。一個軟驅,一台光驅,一個硬盤上的分區,網絡上的設備甚至一個usb 閃存盤都可以作為一個啟動設備。

  當然,linux通常是從硬盤啟動的。硬盤上的MBR(主啟動記錄)包含有基本的boot loader,它是一個512字節大小的扇區,位於磁盤的第一個扇區(0磁頭0磁道1扇區)。當MBR被裝載到RAM中後,BIOS就會將控制權轉交給MBR。

  三、 第一階段boot loader

  位於MBR中的主boot loader是一個512字節的鏡像,其中不僅包含了程序代碼,還包含了一個小的分區表,如圖2所示。最初的446字節是主boot loader,它裡面就包含有可執行代碼以及錯誤消息文本。接下來的64字節是分區表,其中包含有四個分區的各自的記錄(一個分區占16字節)。MBR通過特殊數字0xAA55(譯者注:在電子界中AA55確實是具有傳奇色彩的數字,想知道為什麼麼?將它展開成二進制形式,看看有什麼規律)作為兩個字節的結束標志。0x55AA同時也是MBR有效的校驗確認。

  主boot loader的工作是尋找並加載第二boot loader。它通過分析分區表,找出激活分區來完成這個任務,當它找到一個激活分區時,它將繼續掃描剩下的分區表中的分區,以便確認他們都是未激活的。確認完畢後,激活分區的啟動記錄從設備中被讀到RAM,並被執行。

  四、 第二階段boot loader

  起著次作用,或者說是第二boot loader,可以更加形象得被稱為內核加載程序。這個階段的任務就是加載linux內核,以及可選的初始化內存盤。

  /*******************************************************************/

  小知識:GRUB階段的boot loaders

  在/boot/grub目錄中包含有stage1,stage2和stage1.5的boot loaders,同時還有不少可選的loaders(例如,CD-ROM使用的就是iso9660_stage_1_5)

  /*******************************************************************/

  把第一階段和第二階段的boot loaders聯合起來,就是在x86個人電腦中,我們所說的linux loader(LILO)或者GRand Unified Bootloader(GRUB)。由於GRUB修正了一些LILO中存在的缺陷,因此下面就讓我們來看看GRUB(如果你希望得到更多的關於GRUB, LILO和與之相關話題的討論資源,請見文後的參考資料)

  對於GRUB來說,一個比較好的方面就是它包含了linux文件系統的知識。與LILO使用裸扇區不同的是,GRUB能夠從ext2或者ext3文件系統中加載linux內核。它是通過將本來兩階段的boot loader轉換成三個階段的boot loader。在第一階段(MBR)中會啟動stage1.5的boot loader來理解linux內核鏡像中的特殊的文件系統格式,例如,reiserfs_stage1-5(用於從reiserf日志文件系統中進行加載)或e2fs+stage1_5(用於從wxt2或ext3文件系統進行加載)。當stage1.5的boot loader被加載並運行時,stage2 的boot loader才能被加載。

  當stage2被加載時,GRUB能根據請求的情況顯示一個可選內核的清單(在 /etc/grub.conf 中進行定義,同時還有幾個軟符號鏈接 /etc/grub/menu.lst 和 /etc/grub.conf)。你可以選擇一個內核,修改其附加的內核參數。同時,你可以選擇使用命令行的shell來對啟動過程進行更深層次的手工控制。

  在第二階段boot loader存在與內存中後,就可以對文件系統進行查詢了,同時,默認的內核鏡像以及初始化內存盤鏡像也被加載到內存中。一切准備完畢之後,第二階段的boot loader就會調用內核鏡像。

Copyright © Linux教程網 All Rights Reserved