Ubuntu系統啟動過程詳解

2021-08-19 03:34:50 字數 2644 閱讀 8040

**:

一. ubuntu的啟動流程

ubuntu的啟動流程和我們熟知的redhat的啟動方式有所區別。

redhat的啟動過程如下圖:

這是我們熟知的linux啟動流程,但是ubuntu的啟動流程和這個有些區別,我在ubuntu的/etc/目錄下面找不到inittab這個檔案,一開始很納悶ubuntu是怎麼啟動的?一查資料發現ubuntu並沒有採用init的方法,所以在/etc/目錄下面找不到inittab,這主要是因為init採用序列的方式,引導很費時,redhat9啟動時序列執行大量指令碼以及啟動各種需要的服務,因此從ubuntu6.10開始逐步採用upstart來代替init,進行服務程序的管理。為了對原有的init實現向後相容,upstart可以說是在表象上保留了大部分原來init的特性,因此目前ubuntu初始化程序名仍然叫init,而改變的核心,則是event機制。

event機制就是將程序的觸發、停止都看成是event。ubuntu的/etc/下有乙個event.d,這個目錄是upstart的核心。/etc/event.d/下面存放了目前upstart需要識別的各種event。這其中主要有三種:rc-default,rcx(x = 0,1,2,3,4,5,6,s),ttyx(x = 0,1,2,3,4,5,6,s)。

其中rc-default就類似與inittab檔案,用來設定預設執行級別的。cat rc-default,我們可以看到:

rcx是發生相應執行級別事件時需要執行程式的指令碼,我們再cat一下rc2:

不去考慮細節,只要注意到前兩行和倒數第二行就可以了。可以看到,rc2檔案是定義在發生執行級別2的時候所要執行的東西,核心就是這句:exec /etc/init.d/rc 2。這樣,我們就可以自然地過渡到下乙個重要的目錄,/etc/init.d/了。

/etc/init.d/中存放的都是服務或者任務的執行指令碼。可以這麼說,只要你安裝了乙個程式(特別是服務程式daemon),它可以在系統啟動的時候執行,那麼它必定會在/etc/init.d/中有乙個指令碼檔案。回到上面的rc2,它執行了exec /etc/init.d/rc 2,也就是給/etc/init.d/rc傳遞了乙個引數」2」,讓它執行。rc指令碼裡面有這樣一段:

# now run the start scripts for this runlevel.

# run all scripts with the same level in parallel

.......

for s in /etc/rc$runlevel.d/s*

.......

這說明,當給rc指令碼傳遞乙個數字引數"x"的時候,它在經過一系列的設定後,將會開始執行/etc/rcx.d/下s開頭的指令碼。這就過渡到下乙個目錄/etc/rcx.d/了。

ls一下/etc/rcx.d/,發現裡面全是一堆到/etc/init.d/中的指令碼符號鏈結,不同的是它們的開頭加上了s和乙個數字。熟悉原本init的人應該知道,s表示在啟動時執行,數字則表示執行的先後順序。其中有乙個鏈結叫做s30gdm,gdm的意思是gnome display management,也就是用來啟動gnome桌面的。

綜上所述,upstart管理的ubuntu啟動過程如下圖所示:

二. x-window啟動過程解析

從控制台進入x一般用startx命令,故啟動x應該從startx這個指令碼開始分析。以下是startx指令碼的一部分:

#!/bin/sh 

userclientrc=$home/.xinitrc #使用者的client定義檔案 

userserverrc=$home/.xserverrc #使用者的server定義檔案 

sysclientrc=/usr/x11r6/lib/x11/xinit/xinitrc #系統的client 

sysserverrc=/usr/x11r6/lib/x11/xinit/xserverrc #系統的server 

defaultclient=/usr/x11r6/bin/xterm #預設的client程式 

defaultserver=/usr/x11r6/bin/x #預設的server程式 

defaultclientargs="" #下面定義了client和server的引數變數 

defaultserverargs="" 

clientargs="" 

serverargs=""

……可以看到,startx主要是置x client和x server所在的位置,並處理相關引數,最後交給xinit處理。可以看出startx 設定x client的位置是先搜尋$home/.xinitrc,然後是/etc/x11/xinit/xinitrc;設定x server的位置是先搜尋$home/.xserverrc,然後是/etc/x11/xinit/xserverrc。在ubuntu8.10的$home下面沒有.xinitrc和.xerverrc,所以startx直接去/etc/下面找x-client和x-server,完成啟動x的工作。

總結一下x-window的啟動流程圖:

Linux系統啟動過程詳解

1 bios自檢 2 啟動grub lilo 3 載入核心 4 執行init程序 5 通過 etc inittab檔案進行初始化 6 登陸linux 1 bios自檢 a post power on self test 對硬體進行檢測 計算機在通電後首先由bios進行自檢,即所謂的post powe...

Linux系統啟動過程詳解

1 bios自檢 2 啟動grub lilo 3 載入核心 4 執行init程序 5 通過 etc inittab檔案進行初始化 6 登陸linux 1 bios自檢 a post power on self test 對硬體進行檢測 計算機在通電後首先由bios進行自檢,即所謂的post powe...

Linux系統啟動過程詳解

本文是學習日記,學自菜鳥教程。linux啟動過程並不複雜,主要分為五部分 核心的引導 執行init 系統初始化 建立終端 使用者登入系統。過程如下 第一部分 核心引導 作業系統接管硬體以後,首先讀入 boot目錄下的核心檔案。第二部分 init程序 在linux作業系統當中,init程序是所有程序的...