在做開發的過程中,突然發現,要對系統做一些有意義的改變,必須要對操作系統的啟動過程有一定的了解,不然就是修改你都不知道從哪里下手啊,然后就是找來資料看,去網上看別人的博客,有了前一周一些基本的經驗,理解起來就快很多了。但是,別人的東西終究還是不適合自己,遂自己來總結一遍典型的Linux操作系統的啟動過程,中間若有錯誤還請批評指正!
1、加電并且啟動BIOS
加電也就是把電源按鈕按下去,主板通電后會啟動BIOS,都知道BIOS是寫在單獨的芯片中的,這個時候還只是BIOS來控制整個系統。
2、BIOS到要引導的存儲設備
BIOS啟動之后會先進行POST(short for Power On Self Test),在無誤通過之后,BIOS會按照用戶設定的順序依次檢索存儲設備,尋找“引導塊”,如果第一順位引導硬盤的話那就是MBR(Master Boot Record),而后,BIOS會將控制權交給MBR。
3、GRUB或者LILO的啟動
如果是單操作系統的啟動,那這一步就可以跳過了,可以直接由MBR來引導起來操作系統。但是,由于MBR只能引導一個操作系統,所以我們需要MBR來進行多系統的引導。這時候,MBR的作用是引導GRUB的運行。
4、加載內核
在GRUB啟動之后,會由它來引導內核的運行,也就是GRUB將配置中制定的內核映像拷貝到內存之中,并且會引導它的運行。但是,在這之前,還會有一個例程(這個沒搞清楚是哪一個,還需要改天做實驗)先運行起來,它會解壓內核鏡像,而好由解壓好的內核來引導系統。
5、執行init進程
當內核完成核內引導之后就會開始加載init進程,從這里開始才是每臺機子獨一無二的操作,之前的大家都是一樣的(除了自己編譯過的內核),但是這里幾乎就是每臺機子都不一樣了。
6、系統初始化
執行init進程后,還需要依賴于根目錄下init/init.d來初始化整個系統,還有rc*.d目錄下的各個鏈接,來對系統和各程序進行初始化。
7、Login程序
在完成系統的初始化之后,就可以看到登錄的畫面了,這個時候就算完成了真個操作系統的啟動。