Linux啟動過程簡介

scz111發表於2009-06-29
許多人對Linux的啟動過程感到很神秘,因為所有的啟動資訊都在螢幕上一閃而過。其實,
   Linux的啟動過程並不象啟動資訊所顯示的那樣複雜,它主要分成兩個階段:
   1.啟動核心。在這個階段,核心裝入記憶體並在初始化每個裝置驅動器時列印資訊。
   2.執行程式init。裝入核心並初始化裝置後,執行init程式。init程式處理所有程式的啟動,
   包括重要系統精靈程式和其它指定在啟動時裝入的軟體。
   下面以Red Hat為例簡單介紹一下Linux的啟動過程。
   一、啟動核心
   首先介紹啟動核心部分。電腦啟動時,BIOS裝載MBR,然後從當前活動分割槽啟動,LILO獲得引
   導過程的控制權後,會顯示LILO提示符。此時如果使用者不進行任何操作,LILO將在等待制定
   時間後自動引導預設的作業系統,而如果在此期間按下TAB鍵,則可以看到一個可引導的操作
   系統列表,選擇相應的作業系統名稱就能進入相應的作業系統。
   當使用者選擇啟動LINUX作業系統時,LILO就會根據事先設定好的資訊從ROOT檔案系統所在的分
   區讀取LINUX映象,然後裝入核心映象並將控制權交給LINUX核心。LINUX核心獲得控制權後,
   以如下步驟繼續引導系統:
   1. LINUX核心一般是壓縮儲存的,因此,它首先要進行自身的解壓縮。核心映象前面的一些
   程式碼完成解壓縮。
   2. 如果系統中安裝有可支援特殊文字模式的、且LINUX可識別的SVGA卡,LINUX會提示使用者
   選擇適當的文字顯示模式。但如果在核心的編譯過程中預先設定了文字模式,則不會提示選
   擇顯示模式。該顯示模式可透過LILO或RDEV工具程式設定。
   3. 核心接下來檢測其他的硬體裝置,例如硬碟、軟盤和網路卡等,並對相應的裝置驅動程式
   進行配置。這時,顯示器上出現核心執行輸出的一些硬體資訊。
   4. 接下來,核心裝載ROOT檔案系統。ROOT檔案系統的位置可在編譯核心時指定,也可透過
   LILO或RDEV指定。檔案系統的型別可自動檢測。如果由於某些原因裝載失敗,則核心啟動
   失敗,最終會終止系統。
   二、執行init程式
   其次介紹init程式,利用init程式可以方便地定製啟動其間裝入哪些程式。init的任務是
   啟動新程式和退出時重新啟動其它程式。例如,在大多數Linux系統中,啟動時最初裝入
   六個虛擬的控制檯程式,退出控制檯視窗時,程式死亡,然後init啟動新的虛擬登入控制檯,
   因而總是提供六個虛擬登陸控控制檯程式。
   控制init程式操作的規則存放在檔案/etc/inittab中。Red Hat Linux預設的inittab文
   件如下:
   #
   #inittab This file describes how the INIT process should set up the system in a certain
   #run-level.
   #
   #
   #Default runlevel.The runlevels used by RHS are:
   #0-halt(Do NOT set initdefault to tis)
   #1-Single user mode
   #2-Multiuser,without NFS(the same as 3,if you do not have networking)
   #3-Full multiuser mode
   #4-unused
   #5-X11
   #6-reboot(Do NOT set initdefault to tis)
   #
   id:3:initdefault:
   #system initialization
   si::sysinit:/etc/rc.d/rc.sysinit
   10:0:wait:/etc/rc.d/rc 0
   11:1:wait:/etc/rc.d/rc 1
   12:2:wait:/etc/rc.d/rc 2
   13:3:wait:/etc/rc.d/rc 3
   14:4:wait:/etc/rc.d/rc 4
   15:5:wait:/etc/rc.d/rc 5
   16:6:wait:/etc/rc.d/rc 6
   #Things to run in every runlevel
   ud:once:/sbin/update
   #Trap CTRL-ALT-DELETE
   ca::ctrlaltdel:/sbin/shutdown -t3 -r now
   #When our UPS tells us power has failed,assume we have a few minutes o
   power left.Schedule a
   #shutdown for 2 minutes from now.
   #This does,of course,assume you have powered installed and your UPS
   connected and working
   #correctly.
   pf::powerfail:/sbin/shutdown -f -h +2 "Power Restored;Shutdown Cancelled"
   #Run gettys in standard runlevels
   1:12345:respawn:/sbin/minggetty tty1
   2:2345:respawn:/sbin/minggetty tty2
   3:2345:respawn:/sbin/minggetty tty3
   4:2345:respawn:/sbin/minggetty tty4
   5:2345:respawn:/sbin/minggetty tty5
   6:2345:respawn:/sbin/minggetty tty6
   #Run xdm in runlevel 5
   x:5:respawn:/usr/bin/X11/xdm -nodaemon
   Linux有個執行級系統,執行級是表示系統當前狀態和init應執行哪個程式並保持在這種
   系統狀態中執行的數字。在inittab檔案中,第一個專案指定啟動時裝入的預設執行級。
   上例中是個多使用者控制檯方式,執行級為3。然後,inittab檔案中每個專案指定第二個
   欄位的專案用哪種執行級(每個欄位用冒號分開)。因此,對執行級3,下列行是相關的:
   13:3:wait:/etc/rc.d/rc 3
   1:12345:respawn:/sbin/minggetty tty1
   2:2345:respawn:/sbin/minggetty tty2
   3:2345:respawn:/sbin/minggetty tty3
   4:2345:respawn:/sbin/minggetty tty4
   5:2345:respawn:/sbin/minggetty tty5
   6:2345:respawn:/sbin/minggetty tty6
   最後六行建立Linux提供的六個虛擬控制檯。第一行執行啟動指令碼/etc/rc.d/ rc 3;
   這將執行目錄/etc/
  rc.d/rc3.d中包含的所有指令碼,這些指令碼表示系統初始化時要啟動的程式。一般來說,
  這些指令碼不需要編輯或改變,是系統預設的。[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22001907/viewspace-1023619/,如需轉載,請註明出處,否則將追究法律責任。

相關文章