FreeBSD   啟動流程

.逸晨


了解 FreeBSD 的啟動流程,將有助於您於系統無法啟動時可以一步一步找出問題所在,同時也是要玩嵌入式系統的必要基礎喲!!

在 i386/PC 電腦架構中,當電源開啟後,會由 BIOS (掌控開機流程) 向 CMOS (儲存各項設定) 取得設定值並偵測週邊硬體,如果一切無誤後,再載入由 CMOS 中所指定的開機裝置中的系統程式,此後便將管控權移交到作業系統 -- FreeBSD︰

順序運作內容
APower On
BBIOS & CMOS (偵測週邊硬體裝置)
PS︰CMOS 中指定由 HDD0 為第一優先啟動順序
C
    啟動系統︰
  • 讀取 HDD0 的 MBR 資料以載入啟動管理員
  • 找不到啟動管理員,則啟動 HDD0 被設為 Active 的主要分割區
D 作業系統 (FreeBSD) 接收管控權,開始進行啟動程序
表一

FreeBSD 目前使用三個階段的開機流程,基本上需要用到三個程式 (兩個 boot blocks, 和 loader),每一個程式都需要靠著上一個程式的配合才能完成整個開機程序,然後將 kernel 載入,再次進行硬體裝置的偵測與初始化。當整個 kernel 載入完成之後,kernel 會呼叫 init(8) 將系統控制權交給使用者。

init(8) 會先確認磁碟是否處於使用中的狀態,再開始進行資源配置,如︰掛載所需的分割區、設定網路卡、設定共享函式庫、啟動各程伺服服務 (daemon)等等。最後將系統切換到多重模式,宣告不治死亡 -- 啊!不是啦,是一切就緒,等候差繾 ^^"

接下來我們就來看看 FreeBSD 到底是如何啟動的吧!!

  • boot 0
    這通常是最前面的一個開機磁區,被稱為 boot 0,儲放在 Master Boot Record,儲存的資訊為一個可以開機的區域列表,也就是 BIOS 所要去搜尋和載入的。
    boot0 所佔的容量很小,因為放在 MBR 的程式無法超過 512 bytes。
    如果您是安裝 Boot Easy 的啟動管理員的話,則您在此步驟所看到的畫面如下︰

    F1 DOS
    F2 FreeBSD
    F3 Linux
    F4 ??
    F5 Drive 1

    Default: F2

  • boot 1
    boot 1 位於開機磁區上的開機磁軌裡,這裡就是 boot 0 或是任何其他存放於 MBR 的程式所要尋找以繼續完成開機程序的地方。

    boot1 也是很小,因為容量無法超過 512 bytes,不過這對 FreeBSD disklabel 的而言已經足夠。 disklabel 是用來儲存 slice 的相關訊息, 並去找到和執行 boot 2。

  • boot 2
    boot 2 比較高階,boot 2 必須要在 FreeBSD 的檔案系統上找到檔案, 並提供一個介面去選擇 kernel 或 loader 來執行。

    因為 loader 比 boot2 又更加高級,而且易於設定,所以 boot2 通常會執行它, 不過之前的版本中 boot2 設定是直接執行 kernel。
    您所看的的 boot 2 畫面如下︰

    >> FreeBSD/i386 BOOT
    Default: 0:wd(0,a)/kernel
    boot:

  • loader
    loader 必須放在檔案系統裡,通常是 /boot/loader
    Loader 提供了一個容易的設定方法,並使用簡易的內建命令, loader 的背後是由一個強大的命令解譯程式 (使用較複雜的命令集) 組成的。
    雖然在 /boot/ 目錄下 /boot/boot0、/boot/boot1 與 /boot/boot2 檔案確實存在,但是他們並不是在 MBR、開機磁軌和 disklabel 中的正本。
    在初始化的過程中,loader 會偵測終端機和磁碟機, 並開始設置所要開啟的磁碟,設定變數對應, 接著命令解譯程式啟動,開始解譯 loader 所傳遞的命令。
    像一些我們於 /boot/loader.conf 檔案中所設置的設定值,就是在此被載入執行的,比如設定進入 loader shell 的等待時間、載入裝置的核心驅動程式等等。

    最後,loader 預設花 10 秒等待任何按鍵的輸入,如果沒有, 就開始載入 kernel。如果有, 就啟動一個提示符號讓使用者輸入那些易懂的命令,藉此可以調整變數, 載入/卸載 module,最後決定要開機還是重開機。


上一篇返回首頁目錄索引章節目錄回上一頁Page UP下一篇

最佳瀏灠環境︰Mozilla & 1024x768