【精品】剖析Linux系統(tǒng)啟動過程

【精品】剖析Linux系統(tǒng)啟動過程

ID:43339098

大?。?76.50 KB

頁數:12頁

時間:2019-10-01

【精品】剖析Linux系統(tǒng)啟動過程_第1頁
【精品】剖析Linux系統(tǒng)啟動過程_第2頁
【精品】剖析Linux系統(tǒng)啟動過程_第3頁
【精品】剖析Linux系統(tǒng)啟動過程_第4頁
【精品】剖析Linux系統(tǒng)啟動過程_第5頁
資源描述:

《【精品】剖析Linux系統(tǒng)啟動過程》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫

1、剖析Linux系統(tǒng)啟動過程本文以RedHat9.0和1386平臺為例,剖析了從用戶打開電源直到屏幕出現命令行提示符的整個Linux啟動過程。并且介紹了啟動中涉及到的各種文件。閱讀Linux源代碼,無疑是深入學習Linux的最好方法。在本文對Linux啟動過程的介紹屮,我們也嘗試從源代碼的視角來更深入的剖析Linux的啟動過程,所以其中也簡單涉及到部分相關的Linux源代碼,Linux啟動這部分的源碼主要使用的是C語言,也涉及到了少量的匯編。而啟動過程中也執(zhí)行了人量的shell(主要是bashshe

2、ll)所寫腳札為了方便讀者閱讀,筆者將整個Linux啟動過程分成以下兒個部分逐一介紹,大家可以參考下圖:當用戶打開PC的電源,BIOS開機口檢,按BIOS中設置的啟動設備(通常是硬盤)啟動,接著啟動設備上安裝的引導程序lilo或grub開始引導Linux,Linux先進行內核的引導,接F來執(zhí)行init程序,init程序調用了rc.sysinit和rc等程序,rc.sysinit和rc當完成系統(tǒng)初始化和運行服務的任務后,返回ink;ink動了mingetty后,打開了終端供用戶登錄系統(tǒng),用戶登錄成功

3、后進入了Shell,這樣就完成了從開機到登錄的整個啟動過程。下面就將逐一介紹其中兒個關鍵的部分:第一部分:內核的引導(核內引導)RcdHat9.0可以使用lilo或grub等引導程序開始引導Linux系統(tǒng),當引導程序成功完成引導任務后,Linux從它們手中接管了CPU的控制權,然后CPU就開始執(zhí)行Linux的核心映象代碼,開始了Linux啟動過程。這里使用了兒個匯編程序來引導Linux,這一步泛及到Linux源代碼樹中的"arch/i386/bootnb的這幾個文件:bootsect.S>setu

4、p.S>video.S等。其中bootsect.S是生成引導扇區(qū)的匯編源碼,它完成加載動作后直接跳轉到setup.S的程序入口。setup.S的主要功能就是將系統(tǒng)參數(包括內存、磁盤等,由BIOS返回)拷貝到特別內存中,以便以后這些參數被保護模式卜-的代碼來讀取。此外,seUip.S還將video.S屮的代碼包含進來,檢測和設置顯示器和顯示模式。最后,setup.S將系統(tǒng)轉換到保護模式,并跳轉到OxlOOOOOo那么0x100000這個內存地址中存放的是什么代碼?而這些代碼又是從何而來的呢?0x1

5、00000這個內存地址存放的是解壓后的內核,因為RedHat捉供的內核包含了眾多驅動和功能而顯得比較大,所以在內核編譯中使用了"makcbzlmagc”方式,從而生成壓縮過的內核,在RcdHat中內核常常被命名為vmlinuz,在Linux的最初引導過程屮,是通過”arch/i386/boot/compressed/"中的head.S利用misc.c中定義的decompress_kernel()函數,將內核vmlinuz解壓到0x10000()的。當CPU跳到Ox100000時,將執(zhí)行"arch/

6、i386/kcmcl/hcad.S"中的startup_32,它也是vmlinux的入口,然后就跳轉到start_kernel()中去了。start_kernel()是"init/main.c”中的定義的函數,start_kemel()中調用了一?系列初始化兩數,以完成kernel本身的設直。start_kernel()函數屮,做了大量的工作來建立基本的Linux核心環(huán)境。如果順利執(zhí)行完start_kernel(),則基本的Linux核心環(huán)境已經建立起來了。在start_kemel()的最后,通過

7、調用init()函數,系統(tǒng)創(chuàng)建第一個核心線程,啟動了init過程。而核心線程init()主耍是來進行一些外設初始化的工作的,包括調用do_basic_setup()yc成外設及其驅動程序的加載和初始化。并完成文件系統(tǒng)初始化和root文件系統(tǒng)的安裝。當do_basic_setup()函數返回init(),init()乂打開了/dev/console設備,重定向三個標準的輸入輸出文件stdinstdout和stderr到控制臺,最后,搜索文件系統(tǒng)中的init程序(或者由而匸命令行參數指定的程序),并使

8、用execve()系統(tǒng)調用加載執(zhí)行init程序。到此init()函數結束,內核的引導部分也到此結束了,第二部分:運行initinit的進程號是1,從這一點就能看出,init進程是系統(tǒng)所冇進程的起點,Linux在完成核內引導以后,就開始運行init程序,oinit程序需要讀収配置文件/etc/inittaboinittab是一個不可執(zhí)行的文本文件,它有若T?行指令所組成。在Redhat系統(tǒng)中,inittab的內容如下所示(以“##T開始的中注釋為筆者增加的):##inittabThi

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯系客服。
3. 下載前請仔細閱讀文檔內容,確認文檔內容符合您的需求后進行下載,若出現內容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯系客服處理。