Ubuntu系統(tǒng)啟動過程詳解-基礎電子_第1頁
Ubuntu系統(tǒng)啟動過程詳解-基礎電子_第2頁
Ubuntu系統(tǒng)啟動過程詳解-基礎電子_第3頁
Ubuntu系統(tǒng)啟動過程詳解-基礎電子_第4頁
Ubuntu系統(tǒng)啟動過程詳解-基礎電子_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

精品文檔-下載后可編輯Ubuntu系統(tǒng)啟動過程詳解-基礎電子作者:楊碩,華清遠見嵌入式學院講師。

一.Ubuntu的啟動流程

ubuntu的啟動流程和我們熟知的RedHat的啟動方式有所區(qū)別。

RedHat的啟動過程如下圖:

這是我們熟知的linux啟動流程,但是ubuntu的啟動流程和這個有些區(qū)別,我在ubuntu的/etc/目錄下面找不到inittab這個文件,一開始很納悶ubuntu是怎么啟動的?一查資料發(fā)現(xiàn)ubuntu并沒有采用init的方法,所以在/etc/目錄下面找不到inittab,這主要是因為init采用串行的方式,引導很費時,RedHat9啟動時串行執(zhí)行大量腳本以及啟動各種需要的服務,因此從ubuntu6.10開始逐步采用upSTart來代替init,進行服務進程的管理。為了對原有的init實現(xiàn)向后兼容,upstart可以說是在表象上保留了大部分原來init的特性,因此目前ubuntu初始化進程名仍然叫init,而改變的,則是Event機制。

Event機制就是將進程的觸發(fā)、停止都看成是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文件,用來設置默認運行級別的。catrc-default,我們可以看到:

#rc-runlevelcompatibility

#

#Thistaskguesseswhatthe"defaultrunlevel"shouldbeandstartsthe

#appropriatescript.

startonstoppedrcS

script

runlevel--reboot||true

ifgrep-q-w--"-s\|single\|S"/proc/cmdline;then

telinitS

elif[-r/etc/inittab];then

RL="$(sed-n-e"/^id:[0-9]*:initdefault:/{s/^id://;s/:.*//;p}"/etc/inittab||true)"

if[-n"$RL"];then

telinit$RL

else

telinit2

fi

else

telinit2

fi

endscript

默認的運行級別是2。

rcX是發(fā)生相應運行級別事件時需要運行程序的腳本,我們再cat一下rc2:

#rc2-runlevel2compatibility

#

#Thistaskrunstheoldsysv-rcrunlevel2("multi-user")scripts.It

#isusuallystartedbythetelinitcompatibilitywrapper.

startonrunlevel2

stoponrunlevel[!2]

consoleoutput

script

set$(runlevel--set2||true)

if["$1"!="unknown"];then

PREVLEVEL=$1

RUNLEVEL=$2

exportPREVLEVELRUNLEVEL

fi

exec/etc/init.d/rc2

endscript

不去考慮細節(jié),只要注意到前兩行和倒數第二行就可以了??梢钥吹剑瑀c2文件是定義在發(fā)生運行級別2的時候所要執(zhí)行的東西,就是這句:exec/etc/init.d/rc2。這樣,我們就可以自然地過渡到下一個重要的目錄,/etc/init.d/了。

/etc/init.d/中存放的都是服務或者任務的執(zhí)行腳本??梢赃@么說,只要你安裝了一個程序(特別是服務程序daemon),它可以在系統(tǒng)啟動的時候運行,那么它必定會在/etc/init.d/中有一個腳本文件?;氐缴厦娴膔c2,它執(zhí)行了exec/etc/init.d/rc2,也就是給/etc/init.d/rc傳遞了一個參數”2”,讓它執(zhí)行。Rc腳本里面有這樣一段:

#NowruntheSTARTscriptsforthisrunlevel.

#Runallscriptswiththesamelevelinparallel

forsin/etc/rc$runlevel.d/S*

這說明,當給rc腳本傳遞一個數字參數"X"的時候,它在經過一系列的設置后,將會開始執(zhí)行/etc/rcX.d/下S開頭的腳本。這就過渡到下一個目錄/etc/rcX.d/了。

ls一下/etc/rcX.d/,發(fā)現(xiàn)里面全是一堆到/etc/init.d/中的腳本符號鏈接,不同的是它們的開頭加上了S和一個數字。熟悉原本init的人應該知道,S表示在啟動時運行,數字則表示執(zhí)行的先后順序。其中有一個鏈接叫做S30gdm,gdm的意思是gnomedisplaymanagement,也就是用來啟動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#系統(tǒng)的client

sysserverrc=/usr/X11R6/lib/X11/xinit/xserverrc#系統(tǒng)的server

defaultclient=/usr/X11R6/bin/xterm#默認的client程序

defaultserver=/usr/X11R6/bin/X#默認的server程序

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

defaultserverargs=""

clientargs=""

serverargs=""

……

可以看到,startx主要是置Xclient和Xserver所在的位置,并處理相關參數,交給xinit處理??梢钥闯鰏tartx設置Xclient的位置是先搜尋$HOME/.xinitrc,然后是/etc/X11/xinit/xinitrc;設置Xserver的位置是先搜尋$HOME/.xserverr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論