久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

歡(huan)迎來到(dao)高端IT就(jiu)業培訓專家——華(hua)清(qing)遠見教育(yu)科技集團

400-611-6270

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 >
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
        #
        # This task guesses what the "default runlevel" should be and starts the
        # appropriate script.
        start on stopped rcS
        script
                runlevel --reboot || true
                if grep -q -w -- "-s\|single\|S" /proc/cmdline; then
                        telinit S
                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
                        telinit 2
                        fi
                else
                        telinit 2
                fi
        end script
        默認的運行級別是2。

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

# rc2 - runlevel 2 compatibility
        #
        # This task runs the old sysv-rc runlevel 2 ("multi-user") scripts. It
        # is usually started by the telinit compatibility wrapper.
        start on runlevel 2
        stop on runlevel [!2]
        console output
        script
                set $(runlevel --set 2 || true)
                if [ "$1" != "unknown" ]; then
                        PREVLEVEL=$1
                        RUNLEVEL=$2
                        export PREVLEVEL RUNLEVEL
                fi
                exec /etc/init.d/rc 2
        end script

不去考慮細(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.
        # Run all scripts with the same level in parallel
        .......
        for s in /etc/rc$runlevel.d/S*
        .......

這說明,當給(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 
        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=""
        ……

可(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號