FreeBSD編譯安裝新核心(轉)

gugu99發表於2007-08-11
FreeBSD編譯安裝新核心(轉)[@more@]

  在/usr/src/sys/i386/conf目錄下,可以看到一系列核心配置檔案的樣例。 bash-2.02$ ls /sys/i386/conf

GENERIC  Makefile.i386  files.i386   majors.i386

LINT   PICOBSD-N.2000 ipfilter    options.i386

LKM    devices.i386  kernel.script

  目錄中最重要的檔案有GENERIC和LINT,名為GENERIC的檔案就是通用核心kernel.GENERIC的配置檔案,而LINT檔案中包括FreeBSD支援的幾乎所有配置引數,並逐一加以解釋。另一些檔案則是其他硬體配置下,用於特定目的的配置檔案的例子。因此GENERIC和LINT檔案是在設定核心時的必備參考。有了這些檔案作參考之後,就可以生成針對某個計算機具體設定的配置檔案就更為簡單了,並執行編譯核心的任務。

  • 修改核心的一般原則

  要定製核心,就必須要生成配置檔案。一般都是透過更改已有配置檔案的方法來生成特定的配置檔案,以簡化設定工作。但直接修改已有的配置檔案的方式,如修改GENERIC檔案,並不可取,而應該先複製生成一個新的配置檔案,這樣就可以使用多個配置檔案,維護多個不同配置的核心。這些核心可以是為一臺計算機準備的,也可以是為多臺計算機準備的。新配置檔案可以很方便的從對已有配置檔案,如GENERIC,進行復製得到。例如:

# cd /usr/src/sys/i386/conf

# cp GENERIC mykernel

  然後再修改mykernel這個配置檔案,第一步需要完成的任務是先刪除不必要的硬體支援選項,這是因為通用核心支援的硬體裝置通常要多於計算機系統中實際存在的硬體裝置,不必要的硬體驅動程式碼會佔用不必要的核心記憶體空間。除了根據管理員對計算機硬體配置的瞭解來進行刪除不必要的硬體驅動選項之外,比較簡便的方法是根據FreeBSD的通用核心在啟動時報告的資訊來判斷哪個裝置已經探測到,哪個裝置沒被探測到。使用系統命令dmesg可以檢視系統啟動時的資訊,因此沒被探測到的裝置可以使用命令來得到:

# dmesg | grep “not found”

  這個命令輸出的結果,或者是計算機中並不存在的裝置,或者是驅動程式的引數沒有配置正確,沒有正確檢測到硬體裝置的情況。如果確認沒有這個硬體裝置,就可以在配置檔案中將其刪除。

  有些硬體設定的預設引數與系統中的硬體設定並不一致,可以透過更改配置檔案中的配置引數來改變設定,以達到正確檢測硬體的目的。

  有些裝置在GENERIC配置檔案中並沒有提供支援,例如音效卡裝置,以及多處理器支援能力。如果要想支援這些設定,就要將相應的設定引數增添到配置檔案中,可以要參考檔案LINT中的相應設定來完成增添硬體的過程。

  為了得到一個合適的核心,或許需要不止一次的更改設定。當對計算機的某些硬體設定不是很清楚,為了節約編譯核心次數,可以先透過 UserConfig更改確定正確的硬體設定,再重新編譯核心的這種循序漸進方式,逐步獲得硬體的正確配置。

  重新定製核心不但是為了獲得硬體配置的正確性,還可以透過更改核心設定支援一些FreeBSD支援的特定功能、最佳化現有能力,以發揮系統的最大能力,從而達到將硬體具備的最大能力,充分發揮FreeBSD具備的強大處理能力。

  • 編譯和安裝核心

  在生成自己的核心配置檔案mykernel之後,就可以進入下一步編譯安裝過程了。在配置檔案所在的目錄中,輸入:

# /usr/sbin/config mykernel

Removing old directory ../../compile/mykernel: Done.

Kernel build directory is ../../compile/mykernel

  這個命令將產生一個/usr/src/sys/complie/mykernel的目錄,其中目錄名對應於核心的名字,這樣就使得系統中可以同時維護多個不同的核心,不同的核心相互獨立而互不干擾。這個目錄中就包括了編譯核心所需的原始檔。

  如果這個過程出現錯誤,就說明配置檔案中存在語法錯誤,config程式將會提示出錯的行,以便使用者進行修改。但是config不會發現配置檔案中存在的邏輯錯誤,這些邏輯錯誤只能在編譯核心時才能發現。

  下一步就是進入生成的目錄中進行編譯和安裝。

# cd ../../compile/mykernel

# make depend

# make

  編譯過程需要一些時間以進行編譯,這時候就可以作些其他任務等待編譯結束。但如果配置檔案存在邏輯錯誤,在編譯時會形成錯誤。因為核心配置選項不是相互無關的,而是存在相關依賴關係,有些設定項會依賴於另外的設定項。當發生這些邏輯錯誤的時候,當所有需要的原始檔都存在時,就說明配置檔案中缺少一些基本引數定義的程式碼,需要重新加入。例如所有的EISA裝置依賴於controller eisa0定義的EISA控制器,那麼刪除controller eisa0設定項就會造成編譯EISA裝置時,缺少controller eisa0對應的源程式中定義的函式和變數,就會造成編譯失敗。確定沒有EISA裝置的時候,就要刪除所有的 EISA相關選項,以避免邏輯錯誤。

  核心編譯成功之後,就可以進行安裝了:

# make install

  這將原有核心更改為/kernel.old,然後將編譯後產生的新核心移到根目錄下,命名為/kernel。此後可以重起系統,檢查新核心是否正確。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-944656/,如需轉載,請註明出處,否則將追究法律責任。

相關文章