啟動
1. lilo
2. kernel
3. init 1/2/3/5
important files:
/etc/inittab
/etc/rc.d/...
4. xdm (graphics interface)
important file:
/etc/X11/xinit/xsession
It seemed that different distribution has differrent xsession.
5. see how /etc/X11/xinit/xsession is written.
some related files:
Xclients, xinitrc,
.xsession, .Xclients, .xinitrc
開機過程指的是從打開計算機電源直到Linux顯示用戶登錄畫面的全過程。分析LINUX
開機過程也是深入了解LINUX核心工作原理的一個很好的途徑。在不同的計算機平台上,
LINUX的開機過程稍有不同,本節以X386微機系統為例,介紹LINUX的開機過程。
1. 開機自檢
在剛開機時,根據X386CUP的特性,代碼段(CS,CODE SEGMENT)寄存器的值為全1,
指令計數器(IP,INSTRUCTION POINTER)的值為全0,即CS=FFFF、IP=0000。這時CPU根據
CS和IP 的值執行FFFF0H處的指令。由於FFFF0H已經到了基本內存的高地址頂端,所以,
FFFF0H處的指令一般總是一個JMP指令,以便CPU能夠跳到比較低的地址去執行那裡的代碼,
這個地址通常是ROM BIOS 的入口地址。接著,ROM BIOS 進行開機自檢,如檢查內存,鍵
盤等。在自檢過程中,ROM BIOS會在上位內存(UMB,UPPERMEMORY BLOCK)中進行掃描,
看看是否存在合法的設備控制卡ROM BIOS(如:SCSI卡上的ROM),如果有,就執行其中的
一些初始化代碼。最後,ROM BIOS 讀取磁盤上的第一個扇區並將這個扇區的內存裝入內存。
2. 預引導
假定硬盤是系統的啟動磁盤。硬盤的第一扇區稱為主引導記錄(MBR, MASTER BOOTRECORD)。
MBR 的長度為512字節。可分為兩部分:第一部分為引導(PRE-BOOT)區,占了446個字節;
第二部分為分區表(PARTITION PABLE),共有66個字節,記錄硬盤的分區信息。預引導
區的作用之一是找到標記為活動(ACTIVE)的分區,並將活動分區的引導區讀入內存。
如果用軟盤啟動計算機,ROM BIOS 讀入的是軟盤的引導區,即軟盤的第一個扇區。
3. 核心映像裝入
在LINUX系統中,人們通常把LILO(LINUX LOADER)放在MBR或某個分區的超級塊
(SUPERBLOCK)中。假定LILO在MBR中,讀取MBR後,LILO就會被首先執行。此時,屏幕上
出現“BOOT:”字樣,接下來的工作是裝入LINUX核心映像。如果LILO安裝在某個分區的超
級塊中,通常還會有一個管理開機的程序,這個管理開機的程序負責讀取LILO,進而進行
核心映像的裝入工作。
4. 核心啟動
核心裝入完畢後,CPU的控制權就交給了核心啟動代碼。此時,核心首先進行硬件的
檢測和設備驅動程序的初始化,然後運行INIT。INIT 是LINUX核心啟動的第一個用戶進程,
其進程號為1,是系統其它用戶進程的祖先。
5. 系統初始化
INIT進程負責進行一系列系統初始化程序和腳本文件,/ETC/INITTAB中包含了INIT所
做的所有工作。
6. 等待用戶登錄
系統初始化完畢後,INIT 切換到多用戶模式,並為每一個虛擬控制台和串行終端啟
動一個GETTY進程。GETTY進程負責接受和檢驗用戶的登錄要求。
至此,LINUX系統的啟動工作全部完成。不同核心版本的LINUX 的啟動過程有一定的
差異,不同發行版本的LINUX 的啟動也可能稍有不同,但基本過程是類似的。另外,在
“BOOT:”後,利用“LINUX SINGLE”命令可以迫使LINUX進入單用戶模式,除不要求用
戶登錄和不啟動虛擬終端以外,啟動過程的其它部分也基本類似。