sunny Newbie
加入: 2005/3月/09
Online Status: Offline 回復: 6
|
Posted: 2005/3月/09 5:40下午 | IP記錄
|
|
|
Linux 開機的過程
[教學] Linux 開機的過程
作者:黃敬群,國立成功大學資訊工程系 文件版次:0.1 最後修訂日期:Nov 14, 2001 版權聲明:允許在保留作者出處及本聲明之前提下,以任何人類可讀之形式自由散佈
■ 開機過程簡述
尚未提及如可製作 Floppy Linux 前,首先要瞭解整個系統開機的過程,為了普及性,這邊以最容易取得的 PC 個人電腦討論對象,處理器是 Intel 80486 以上等級。
當啟動電源之際,電腦的 BIOS 就會找尋有無系統開機磁片,此時會有兩種狀況產生:
第一種狀況:找到系統開機磁片 --
此時就會從系統開機磁片中的第 0 磁區、第 0 磁柱載入可開機磁區
另一種狀況:找不到系統開機磁片 --
BIOS 就會找尋硬碟的 MBR (Master Boot Record),並且執行記錄在 MBR 上 的開機載入程式 (Boot Loader) 進行開機
無論是從軟碟開機也好,還是從硬碟開機也好,首先 OS Loader (就 Linux 來講就可能是 LILO -- LInux LOader) 會載入 Linux Kernel,而 Kernel 一旦起動後,第一件事就是切入保護模式 (protected mode),此時,所有的硬體交由 Kernel 來控制,也意味掙脫 BIOS 的羈絆。
當 Kernel 載入完畢後,便開始初始化系統所有硬體設備。而當所有的硬體初始化的動作也告完成之際,系統將嘗試掛載 (mount) root filesystem。Root filesystem 就是被掛上當作 "/" 目錄的 filesystem (以下簡稱 fs),當然,如果無法正確 mount 上 root fs,巧婦難為無米之炊的 Linux Kernel 也只好秀個訊息:
VFS: Unable to mount root fs on XXX
然後就會停止運作 (halt),這邊的 XXX 是指那種 fs,這部份的訊息,可以參考 kernel source 中 fs/super.c 的程式碼。
當 root filesystem 成功的掛載後,就會去執行 init 這個程式。
init 會檢查 /etc/inittab,找出該檔中標明 sysinit 這一行,並執行該 script,在 Redhat Linux 上為 rc.sysinit,於是 rc.sysinit 肩負系統的初始化的大任,不外乎 有以下任務:
. 呼叫 /sbin/initlog 紀錄系統初始化過程 . 設定 path、hostname 等資訊 . banner 畫面:一般我們看到 "Welcome to RedHat Linux" 的訊息 . Mount /proc . Load system font . Configure kernel parameters . Set the system clock . Load keymap . Start up swapping、turn on swap . Remount the root filesystem read-write、Clear mtab . Finding module dependencies、Load modules . Check filesystems
當 rc.sysinit 執行完畢,控制權立即移轉回 init 手中,進入預設 runlevel:
. 若內定的 runlevel 為 3:
init 執行 /sbin/mingetty 啟動 virtual console,並且以 "login:" 提示讓使 用者登入,以完成開機。登入後系統會提供一個 shell 給使用者,就可以使用 Linux 。
. 若 runlevel 為 5:
在開啟 virtual console 後,init 會再執行 xdm 啟動 X window system,讓使 用者以 xdm 界面登入。
以上就是 Linux 開機的過程。
|