Ubuntu系統啟動過程詳解
時間(jian):2018-08-09作(zuo)者:華清遠見
一. Ubuntu的(de)啟(qi)動流程(cheng) ubuntu的啟動(dong)流程和我們熟知的RedHat的啟動(dong)方式有(you)所(suo)區別。 RedHat的啟(qi)動過程如下(xia)圖:
這是(shi)(shi)我們熟知的(de)(de)(de)(de)linux啟(qi)動(dong)流(liu)(liu)程(cheng),但是(shi)(shi)ubuntu的(de)(de)(de)(de)啟(qi)動(dong)流(liu)(liu)程(cheng)和這個(ge)有(you)些(xie)區別,我在(zai)ubuntu的(de)(de)(de)(de)/etc/目(mu)錄(lu)下面找不(bu)到(dao)(dao)inittab這個(ge)文件,一開始(shi)很納悶ubuntu是(shi)(shi)怎么啟(qi)動(dong)的(de)(de)(de)(de)?一查資(zi)料發現ubuntu并沒(mei)有(you)采用(yong)(yong)init的(de)(de)(de)(de)方法,所(suo)以在(zai)/etc/目(mu)錄(lu)下面找不(bu)到(dao)(dao)inittab,這主要是(shi)(shi)因(yin)為(wei)init采用(yong)(yong)串(chuan)行(xing)的(de)(de)(de)(de)方式(shi),引導很費時,RedHat9啟(qi)動(dong)時串(chuan)行(xing)執(zhi)行(xing)大(da)(da)量(liang)腳本(ben)以及啟(qi)動(dong)各種需要的(de)(de)(de)(de)服(fu)務,因(yin)此從ubuntu6.10開始(shi)逐(zhu)步采用(yong)(yong)upstart來(lai)代替init,進(jin)行(xing)服(fu)務進(jin)程(cheng)的(de)(de)(de)(de)管(guan)理。為(wei)了對原(yuan)有(you)的(de)(de)(de)(de)init實現向后(hou)兼容,upstart可以說是(shi)(shi)在(zai)表(biao)象上保留了大(da)(da)部分(fen)原(yuan)來(lai)init的(de)(de)(de)(de)特性,因(yin)此目(mu)前(qian)ubuntu初始(shi)化進(jin)程(cheng)名(ming)仍然(ran)叫init,而改變的(de)(de)(de)(de)核心,則是(shi)(shi)Event機制。 Event機(ji)制就是將進程(cheng)的(de)觸發(fa)、停(ting)止(zhi)都(dou)看成(cheng)是Event。Ubuntu的(de)/etc/下有一個(ge)event.d,這(zhe)個(ge)目錄是upstart的(de)核心。/etc/event.d/下面存放了目前upstart需要識別的(de)各種(zhong)(zhong)event。這(zhe)其中主要有三種(zhong)(zhong):rc-default,rcX(X = 0,1,2,3,4,5,6,S),ttyX(X = 0,1,2,3,4,5,6,S)。 其(qi)中rc-default就類似與inittab文件,用來(lai)設置默認運(yun)行級別的。cat rc-default,我們可以(yi)看到:
# rc - runlevel compatibility rcX是發生相應運行級別事件時需要運行程序的腳(jiao)本,我們再cat一下rc2:
# rc2 - runlevel 2 compatibility 不去考慮細(xi)節,只要(yao)(yao)注意到前兩行(xing)和倒數第(di)二行(xing)就(jiu)可以(yi)了。可以(yi)看到,rc2文(wen)件(jian)是(shi)定義在發生(sheng)運行(xing)級別2的(de)時候(hou)所(suo)要(yao)(yao)執(zhi)行(xing)的(de)東西(xi),核心就(jiu)是(shi)這句:exec /etc/init.d/rc 2。這樣,我們就(jiu)可以(yi)自(zi)然地(di)過渡到下一個重要(yao)(yao)的(de)目(mu)錄,/etc/init.d/了。 /etc/init.d/中存放的(de)(de)都是(shi)服務或者任務的(de)(de)執行(xing)(xing)腳本(ben)(ben)。可以這(zhe)(zhe)么(me)說,只要你安裝了(le)一個程(cheng)序(xu)(特(te)別是(shi)服務程(cheng)序(xu)daemon),它(ta)可以在系統啟動的(de)(de)時候(hou)運行(xing)(xing),那么(me)它(ta)必定會在/etc/init.d/中有一個腳本(ben)(ben)文件。回(hui)到上面的(de)(de)rc2,它(ta)執行(xing)(xing)了(le)exec /etc/init.d/rc 2,也就是(shi)給/etc/init.d/rc傳遞了(le)一個參數”2”,讓(rang)它(ta)執行(xing)(xing)。Rc腳本(ben)(ben)里面有這(zhe)(zhe)樣(yang)一段(duan):
# Now run the START scripts for this runlevel. 這說明,當給(gei)rc腳本傳(chuan)遞一(yi)個數字參數"X"的(de)時候,它在經過(guo)一(yi)系列的(de)設(she)置后(hou),將會開始執行/etc/rcX.d/下(xia)S開頭的(de)腳本。這就(jiu)過(guo)渡到下(xia)一(yi)個目錄/etc/rcX.d/了。 ls一(yi)下/etc/rcX.d/,發(fa)現里面全是一(yi)堆到(dao)/etc/init.d/中的(de)(de)腳(jiao)本符(fu)號鏈接(jie),不同的(de)(de)是它們的(de)(de)開頭加上了S和一(yi)個數字。熟悉原本init的(de)(de)人應該知道,S表示(shi)在(zai)啟(qi)動時運行,數字則表示(shi)執行的(de)(de)先后順序。其中有一(yi)個鏈接(jie)叫(jiao)做S30gdm,gdm的(de)(de)意(yi)思是gnome display management,也(ye)就是用來啟(qi)動gnome桌面的(de)(de)。 綜(zong)上(shang)所述,upstart管理的ubuntu啟動過程如下圖所示(shi):
二. x-window啟動(dong)過程解析 從控制臺進(jin)入X一般用startx命令,故啟(qi)動(dong)X應(ying)該從startx這個腳本開(kai)始分析。以(yi)下(xia)是startx腳本的(de)一部分:
#!/bin/sh 可(ke)(ke)以看(kan)到(dao),startx主要是(shi)置(zhi)(zhi)X client和(he)X server所在的位(wei)置(zhi)(zhi),并處理(li)(li)相關參數(shu),后交給(gei)xinit處理(li)(li)。可(ke)(ke)以看(kan)出startx 設(she)置(zhi)(zhi)X client的位(wei)置(zhi)(zhi)是(shi)先搜尋(xun)$HOME/.xinitrc,然后是(shi)/etc/X11/xinit/xinitrc;設(she)置(zhi)(zhi)X server的位(wei)置(zhi)(zhi)是(shi)先搜尋(xun)$HOME/.xserverrc,然后是(shi)/etc/X11/xinit/xserverrc。在ubuntu8.10的$HOME下面(mian)沒有.xinitrc和(he).xerverrc,所以startx直接去/etc/下面(mian)找x-client和(he)x-server,完成啟動x的工作(zuo)。 總(zong)結一下x-window的啟動流程(cheng)圖(tu):
發表評論
|
全國咨詢電話:400-611-6270,雙休日(ri)及節假日(ri)請(qing)致(zhi)電值班手機:15010390966
在線(xian)咨詢: 曹老(lao)師(shi)QQ(3337544669), 徐老(lao)師(shi)QQ(1462495461), 劉老(lao)師(shi) QQ(3108687497)
企業(ye)培訓洽談專(zhuan)線:010-82600901,院校合(he)作(zuo)洽談專(zhuan)線:010-82600350,在(zai)線咨(zi)詢:QQ(248856300)
Copyright 2004-2018 華清遠見(jian)教育科(ke)技集團(tuan) 版權(quan)所有 ,京ICP備(bei)16055225號,京公海(hai)網安備(bei)11010802025203號