linux的啓動流程

轉自http://732233048.blog.51cto.com/9323668/1618943

 

                   


①按下電源鍵,計算機硬件會讀取BIOS來加載硬件信息(如:CPU與接口設備的通信頻率,磁盤的大小與類型,系統時間,周邊總線,磁盤的I/O等)並進行BIOS的自我檢測,

② 依據BIOS的設置取得第一個可啓動的設備,讀取並執行第一個啓動設備MBR主引導記錄(MBR共512個字節,包括446個字節的Boot Loader,64個字節的分區表,2個字節的55AA校驗位)內的Boot Loader(常用的如:grub。grub的引導過程:分爲兩個階段,由stage1和stage2兩個文件來控制;stage1存在與MBR裏,文件 比較小隻有446個字節,主要作用是引導主程序stage2;stage2主要是加載所有的配置文件,包括grub.conf等.  這裏存在一個問題:與內核相關的文件都在/boot目錄裏,/boot目錄是第一個磁盤的第一個分區(sda1,由df -h可以查看),但是grub是如何識別第一塊磁盤的第一個分區的呢?其實grub有自己的對於磁盤特有的grub設備號(hd0,0):表示第一塊磁盤的第一個分區

③ 根據grub.conf文件裏面的配置,Boot Loader指定使用哪個內核文件來啓動,加載內核文件(如:vmlinuz-2.6.32-431.el6.i686)到內存中解壓並執行,加載內核 後,內核會檢測所有的硬件信息(如:磁盤,cpu,網卡,聲卡等等)並加載硬件驅動程序(此時操作系統就在PC機上跑起來了)(注意:在 加載硬件驅動程序時有一個問題,所有的硬件驅動程序都在/lib/modules/這個目錄下,此時並沒有掛載根目錄,所以無法讀取/lib /modules/目錄下的內容,就無法加載硬件驅動程序,怎麼辦呢?這時就要用到虛擬文件系統文件(initramfs- 2.6.32-431.el6.i686.img),bootloader將其加載到內存並解壓,將其解壓爲一個仿真的根目錄,並提供可執行的程序,內核 會藉助此程序去加載最需要的模塊(驅動程序),然後釋放的這個虛擬文件系統,掛載真正的根目錄

④加載硬件驅動程序後,內核會調用第一個進程init進程(之後便是init這個進程在工作了)

⑤init進程讀取/etc/inittab這個文件,獲取系統的啓動級別run level(7個級別:0關機,1單用戶,2,3字符界面,4,5圖形界面,6重啓)

⑥執行/etc/rc.d/rc.sysinit這個腳本進行系統環境的初始化(如:主機類型,網絡環境,selinux,系統時間等等)

⑦讀取/etc/fstab文件,進行相應的掛載

⑧啓動網絡(network)(注:網絡啓動後服務才能啓動

⑨ 啓動系統服務,假設系統的啓動級別爲3(字符界面),由/etc/rc.d/rc 3取得/etc/rc3.d/目錄下所有的腳本,以K開頭的stop掉,以S開頭的start起來(注意:這個目錄下的文件都是以Kxx或Sxx開頭的文 件,xx表示一個數字,這個數字的意義只是代表這個文件被執行的順序,數字越大越晚被執行,如/etc/rc.d/rc.local對應的文件 爲 S99local,表示這個文件是第99個被執行的並start起來,也就是最後一個被執行的文件)

⑩最後執行/etc/rc.d/rc.local文件(我們可以把一些服務的開機自動啓動命令寫到這個文件裏。注意:我們可以把一個腳本文件的絕對路徑(僅僅是絕對路徑的文件名)寫到這個文件裏,讀取/etc/rc.d/rc.local文件時這個腳本就會被執行,如:在/etc/rc.d/rc.local文件裏    添加一行/usr/local/bin/bash.sh,然後bash.sh腳本就會被執行




附加:

bootloader的作用:

①提供一個菜單:用戶可以選擇不同的內核來啓動

②加載內核

③將啓動裝載功能轉交給其他的bootloader


雙系統的安裝:必須先安裝windows再安裝linux,原因是:

  windows的bootloader不具有將啓動裝載功能轉交給其他的bootloader的功能,而linux有此功能,因此我們在先安裝windows再安裝linux後,會先讀取到linux的bootloader,linux的bootloader將啓動裝載功能轉交給windows的bootloader,然後再執行後續步驟


grub設備號:

  (hd0,0):必須有括號;以hd開頭;表示第一塊磁盤的第一個分區,對應sda1




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章