編譯安裝新內(nèi)核在/usr/src/sys/i386/conf目錄下,可以看到一系列內(nèi)核配置文件的樣例 。
bash-2.02$ ls /sys/i386/confGENERICMakefile.i386files.i386majors.i386LINTPICOBSD-N.2000ipfilteroptions.i386LKMdevices.i386kernel.script目錄中最重要的文件有GENERIC和LINT,名為GENERIC的文件就是通用內(nèi)核kernel.GENERIC的配置文件,而LINT文件中包括FreeBSD支持的幾乎所有配置參數(shù),并逐一加以解釋 。另一些文件則是其他硬件配置下,用于特定目的的配置文件的例子 。因此GENERIC和LINT文件是在設(shè)置內(nèi)核時的必備參考 。有了這些文件作參考之后,就可以生成針對某個計算機具體設(shè)置的配置文件就更為簡單了,并執(zhí)行編譯內(nèi)核的任務(wù) 。
修改內(nèi)核的一般原則
要定制內(nèi)核,就必須要生成配置文件 。一般都是通過更改已有配置文件的方法來生成特定的配置文件,以簡化設(shè)置工作 。但直接修改已有的配置文件的方式,如修改GENERIC文件,并不可取,而應(yīng)該先復(fù)制生成一個新的配置文件,這樣就可以使用多個配置文件,維護(hù)多個不同配置的內(nèi)核 。這些內(nèi)核可以是為一臺計算機準(zhǔn)備的,也可以是為多臺計算機準(zhǔn)備的 。新配置文件可以很方便的從對已有配置文件,如GENERIC,進(jìn)行復(fù)制得到 。例如:
# cd /usr/src/sys/i386/conf# cp GENERIC mykernel然后再修改mykernel這個配置文件,第一步需要完成的任務(wù)是先刪除不必要的硬件支持選項,這是因為通用內(nèi)核支持的硬件設(shè)備通常要多于計算機系統(tǒng)中實際存在的硬件設(shè)備,不必要的硬件驅(qū)動代碼會占用不必要的內(nèi)核內(nèi)存空間 。除了根據(jù)管理員對計算機硬件配置的了解來進(jìn)行刪除不必要的硬件驅(qū)動選項之外,比較簡便的方法是根據(jù)FreeBSD的通用內(nèi)核在啟動時報告的信息來判斷哪個設(shè)備已經(jīng)探測到,哪個設(shè)備沒被探測到 。使用系統(tǒng)命令dmesg可以查看系統(tǒng)啟動時的信息,因此沒被探測到的設(shè)備可以使用命令來得到:
# dmesg | grep “not found”這個命令輸出的結(jié)果,或者是計算機中并不存在的設(shè)備,或者是驅(qū)動程序的參數(shù)沒有配置正確,沒有正確檢測到硬件設(shè)備的情況 。如果確認(rèn)沒有這個硬件設(shè)備,就可以在配置文件中將其刪除 。
有些硬件設(shè)置的缺省參數(shù)與系統(tǒng)中的硬件設(shè)置并不一致,可以通過更改配置文件中的配置參數(shù)來改變設(shè)置,以達(dá)到正確檢測硬件的目的 。
有些設(shè)備在GENERIC配置文件中并沒有提供支持,例如聲卡設(shè)備,以及多處理器支持能力 。如果要想支持這些設(shè)置,就要將相應(yīng)的設(shè)置參數(shù)增添到配置文件中,可以要參考文件LINT中的相應(yīng)設(shè)置來完成增添硬件的過程 。
為了得到一個合適的內(nèi)核,或許需要不止一次的更改設(shè)置 。當(dāng)對計算機的某些硬件設(shè)置不是很清楚,為了節(jié)約編譯內(nèi)核次數(shù),可以先通過UserConfig更改確定正確的硬件設(shè)置,再重新編譯內(nèi)核的這種循序漸進(jìn)方式,逐步獲得硬件的正確配置 。
重新定制內(nèi)核不但是為了獲得硬件配置的正確性,還可以通過更改內(nèi)核設(shè)置支持一些FreeBSD支持的特定功能、優(yōu)化現(xiàn)有能力,以發(fā)揮系統(tǒng)的最大能力,從而達(dá)到將硬件具備的最大能力,充分發(fā)揮FreeBSD具備的強大處理能力 。
編譯和安裝內(nèi)核
在生成自己的內(nèi)核配置文件mykernel之后,就可以進(jìn)入下一步編譯安裝過程了 。在配置文件所在的目錄中,輸入:
# /usr/sbin/config mykernelRemoving old Directory ../../compile/mykernel:Done.Kernel build directory is ../../compile/mykernel這個命令將產(chǎn)生一個/usr/src/sys/complIE/mykernel的目錄,其中目錄名對應(yīng)于內(nèi)核的名字,這樣就使得系統(tǒng)中可以同時維護(hù)多個不同的內(nèi)核,不同的內(nèi)核相互獨立而互不干擾 。這個目錄中就包括了編譯內(nèi)核所需的源文件 。
推薦閱讀
- FreeBSD Grep的介紹
- FreeBSD Apinger 介紹
- FreeBSD 系統(tǒng)進(jìn)程
- 58 FreeBSD連載:為編譯內(nèi)核準(zhǔn)備源代碼
- FreeBSD 4.0 Kernel Hacking Guide--vm/vm_page.
- 利用 FreeBSD 組建安全的網(wǎng)關(guān)
- BSD家族大觀 --1. FreeBSD
- FreeBSD 中 Samba Server安裝設(shè)定
- FreeBSD WEB服務(wù)器架設(shè)筆記
- 在FREEBSD 5.2中使用Pureftpd + MySQL + Pureftpd_ph
