Linux 啟動過程分析


      本文僅簡單介紹Linux的啟動過程,在此基礎上做簡要的分析。對於Linux啟動過程中內部詳細的函數調用不做介紹,只是希望本文能給新手起到一個拋磚引玉的作用,以便深入研究Linux的啟動過程。下圖基本展示了Linux啟動的基本過程,僅為個人學習總結得出,如有大神拍磚,表示歡迎。

一. BIOS自檢:

  應當理解的一些常識:

    BIOS的組成是由兩大部分組成的:POST(power on system test)代碼和運行時的服務;

    POST的工作目的是對硬件進行檢測;

     1. 當計算機加電后,首先由BIOS進行POST(power on system test)自檢。

          即第一步驟就是加電,POST自檢。然后依據BIOS內設置的引導順序從硬盤,軟盤,或CDROM中讀入引導塊;

     2. BIOS的第二個步驟是進行本地設備的枚舉和初始化。

        通常Linux系統都是從硬盤上引導的,其中主引導目錄(MBR)中包含着主引導目錄加載程序,MBR是一個512字節大小的扇區,位於磁盤上的一個扇區。     即:每個磁盤的第一個扇區為磁盤的MBR,MBR中前446字節記錄的是boot loader,boot loader中安裝的是grub的stage1,用於指向grub主程序咋磁盤中的位置。開機加電之后,BIOS按照boot sequence找到對應磁盤,然后搜索該磁盤的MBR。找到位於基本磁盤分區的grub程序,即進入stage2階段,按照grub.conf配置文件對kernel以及initrd進行引導加載。當MBR被加載到RAM中之后,BIOS就會將控制權交給MBR。

查看MBR中的內容:(前提是root用戶)

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

 od –xa mbr.bin

查看到的內容為(均為二進制):

.啟動GRUB/LILO

  GRUB和LILO都是引導加載程序,主要用於引導操作系統的啟動。

  在單一的MBR中只能存儲一個操作系統的引導記錄,所以當需要多個操作系統時,就會出現問題,需要更靈活的引導加載程序。

  GRUB和LILO的區別:

      GRUB擁有交互式命令界面;

      GRUB支持網絡引導;

      LILO可以引導操作系統位置的信息存儲在MBR中;

   *:如果LILO的配置文件出現錯誤,會導致系統無法啟動;而當使用GRUB時,如果配置文件出現錯誤,則系統會默認轉到GRUB命令界面。

   GRUB的配置文件:  /boot/grub/grub.config

像上圖一樣,輸入 cat grub.conf 之后,按下Enter鍵:

三.加載內核:

       加載內核映像到內存中,內核映像並不是一個可執行的內核,而是一個可壓縮的內核映像。在這個內核映像前面是一個例程,它實現少量硬件設置,並對內核映像中包含的內核進行解壓縮,然后將其放入高端內存中。如果有初始化RAM磁盤映像,系統就會將它移動到內存中,並標明以后使用,然后到該例程會調用內核,並開始啟動內核引導的過程。

四. 執行init進程

    init進程是系統所有進程的起點,是所有進程的發起者和控制者。因為在任何基於Linux的操作系統中,它都是第一個運行的進程,所以,init進程的進程編號(PID)永遠是1.

   內核在完成核內引導以后,即在本進程空間內加載init程序,它的進程號是1,主要用來執行一些開機初始化腳本和監視進程。如:init讀取系統引導配置文件/etc/inittab中的信息進行初始化。

關於init進程的作用:

  1. 扮演終結父進程的角色:因為init進程永遠不會終止,所以系統總是可以確認它的存在,並在必要的時候以它為參照;
  2. 在進入某個特定的運行級別時,運行相應的程序,以及對各種運行級別進行管理,它的這個作用由文件/etc/inittab定義的。

五. 關於其它

  /etc/rc.d/rc.sysinit  系統初始化腳本;

  /etc/rc.d/rcX.d/[KS] * - 根據運行級別X分配服務;終止以“K”開頭的服務,啟動以“S”開頭的服務;

  /etc/rc.d/rc.local 執行本地特殊配置;

  最后是其他服務。

 作者:itRed

    博客URL:http://www.cnblogs.com/itred

    學習交流郵箱:it_red@sina.com

本博客您可以自由轉載,但請保留原作者信息和文章鏈接URL。

推薦參考閱讀:

《6 Stages of Linux Boot Process (Startup Sequence)》 http://www.thegeekstuff.com/2011/02/linux-boot-process/

《Linux Booting Process》http://resources.infosecinstitute.com/linux-booting-process/

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM