新浪網

  新浪首頁 > 科技時代 > FreeBSD使用大全連載 > FreeBSD連載(59):編譯安裝新內核
 


FreeBSD連載(59):編譯安裝新內核

http://www.sina.com.cn 1999年12月31日 16:36 王波

編譯安裝新內核

  在/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。此后可以重起系統,檢查新內核是否正確。

# reboot

  如果新內核的配置不正確,造成某些硬件不能正確檢測造成不能正常啟 動。此時就需要重新用老內核進入系統,以重新進行編譯糾正錯誤。選擇不同 內核必須通過Boot Loader的交互界面進行,需要在啟動時進入Boot Loader,然 后可以輸入load kernel.old命令,使用老內核啟動系統,或者使用kernel.GENERIC 通用內核啟動系統。

  為了避免第二次編譯內核時,將錯誤的內核保存為kernel.old,覆蓋原 有的正確設置,也可以先將正確的內核拷貝為根文件系統中的另一個文件,進行 備份保存,只有放置在根分區上的內核才能正常啟動系統,因此備份到其他文件 系統中內核意義不大。

未完,待續。。。  



 
  新浪首頁 > 科技時代 > FreeBSD使用大全連載 > FreeBSD連載(59):編譯安裝新內核


網站簡介 | 網站導航 | 廣告服務 | 中文閱讀 | 聯系方式 | 招聘信息 | 幫助信息

Copyright(C) 1999 SINA.com, Stone Rich Sight. All Rights Reserved

版權所有  四通利方 新浪網