歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

建立並安裝一個定制的內核

  首先對內核構建目錄做一個快速的浏覽。 這裡所提到的所有目錄都在 /usr/src/sys 目錄中; 也可以通過 /sys 來訪問它。 這裡的眾多子目錄包含了內核的不同部分, 但對我們所要完成的任務最重要的目錄是 arch/conf,您將在這裡編輯定制的內核配置; 以及 compile,編譯過程中的文件將放置在這裡。 arch 表示 i386、 alpha、 amd64、 ia64、 powerpc、 sparc64, 或 pc98 (在日本比較流行的另一種 PC 硬件開發分支)。在特定硬件架構目錄中的文件只和特定的硬件有關; 而其余代碼則是與機器無關的,則所有已經或將要移植並運行 FreeBSD 的平台上都共享這些代碼。 文件目錄是按照邏輯組織的,所支持的硬件設備、 文件系統, 以及可選的組件通常都在它們自己的目錄中。
  這一章提供的例子假定您使用 i386 架構的計算機。 如果您的情況不是這樣,只需對目錄名作相應的調整即可。
注意: 如果您的系統中 沒有 /usr/src/sys 這樣一個目錄, 則說明沒有安裝內核源代碼。安裝它最簡單的方法是通過以 root 身份運行 sysinstall, 選擇 Configure, 然後 Distributions, 然後 src, sys。 如果您不喜歡 sysinstall 並且可以使用 “官方的” FreeBSD CDROM, 則也可以通過命令行來安裝:
# mount /cdrom
# mkdir -p /usr/src/sys
# ln -s /usr/src/sys /sys
# cat /cdrom/src/ssys.[a-d]* | tar -xzvf -
  接下來, 進入 arch/conf 目錄下面, 復制 GENERIC 配置文件, 並給這個文件起一個容易辨認的名稱,它就是您的內核名稱。例如:
# cd /usr/src/sys/i386/conf
# cp GENERIC MYKERNEL
  通常,這個名稱是大寫的,如果您正維護著多台不同硬件的FreeBSD機器,以您機器的域名來命名是非常好的主意。我們把它命名為MYKERNEL就是這個原因。
提示: 將您的內核配置文件直接保存在 /usr/src 可能不是一個好主意。 如果您遇到問題, 刪掉 /usr/src 並重新開始很可能是一個誘人的選擇。 一旦開始做這件事,您可能幾秒鐘之後才會意識到您同時會刪除定制的內核配置文件。 另外, 也不要直接編輯 GENERIC, 因為下次您 更新代碼 時它會被覆蓋, 而您的修改也就隨之丟失了。
您也可以考慮把內核配置文件放到別的地方, 然後再到 i386 目錄中創建一個指向它的符號鏈接。
例如:
# cd /usr/src/sys/i386/conf
# mkdir /root/kernels
# cp GENERIC /root/kernels/MYKERNEL  
# ln -s /root/kernels/MYKERNEL
注意: 必須以 root 身份執行這些和接下來命令,否則就會得到 permission denied 的錯誤提示。
  現在就可以用您喜歡的文本編輯器來編輯 MYKERNEL 了。如果您剛剛開始使用 FreeBSD, 唯一可用的編輯器很可能是 vi,它的使用比較復雜, 限於篇幅, 這裡不予介紹, 您可以在 參考書目 一章中找到很多相關書籍。 不過, FreeBSD 也提供了一個更好用的編輯器, 它叫做 ee, 對於新手來說,這很可能是一個不錯的選擇。 您可以修改配置文件中的注釋以反映您的配置, 或其他與 GENERIC 不同的地方。
  如果您在SunOS™或者其他BSD系統下定制過內核,那這個文件中的絕大部分將對您非常熟悉。如果您使用的是諸如DOS這樣的系統,那GENERIC配置文件看起來就非常困難, 所以在下面的 配置文件章節將慢慢地、仔細地進行介紹。
注意: 如果您和 FreeBSD project 進行了 代碼同步, 則一定要在進行任何更新之前查看 /usr/src/UPDATING。這個文件中描述了更新過的代碼中出現的重大問題或需要注意的地方。 /usr/src/UPDATING 總是和您的 FreeBSD 源代碼對應,因此能夠提供比手冊更具時效性的新內容。
  現在應該編譯內核的源代碼了。 一共有兩種方法來完成這項工作,使用哪一種取決於您為什麼要重新編譯內核, 以及所運行的 FreeBSD 版本。
如果您只安裝內核源代碼,使用方法1。
如果您在沒有升級源代碼的情況下編譯一個新內核(也許您只想為內核添加一個新的選項, 如IPFIREWALL),可以使用任何一種方法。
如果您打算把重新構建內核作為 make buildworld 過程的一部分來進行, 則應使用方法 2。
  如果從上次成功地完成 buildworld-installworld 以來您還 沒有 升級過代碼 (也就是沒有運行 CVSup、 CTM, 或使用 anoncvs), 則可以放心使用 config、 make depend、 make、 make install。
聯編內核
進入 /usr/src 目錄:
# cd /usr/src
編譯內核:
# make buildkernel KERNCONF=MYKERNEL
安裝新內核:
# make installkernel KERNCONF=MYKERNEL
注意: 使用這種方法聯編內核時, 需要安裝完整的 FreeBSD 源代碼。
提示: 默認情況下, 在聯編您所定制的內核時, 全部 內核模塊也會同時參與構建。 如果您希望更快地升級內核,或者只希望聯編您所需要的模塊, 則應在聯編之前編輯 /etc/make.conf:
MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs
這個變量的內容是所希望構建的模塊列表。 如果希望了解更多與構建內核有關的變量, 請參見 make.conf(5) 聯機手冊。
  新內核將會被復制到 /boot/kernel 目錄中成為 /boot/kernel/kernel 而舊的則被移到 /boot/kernel.old/kernel。 現在關閉系統, 然後用新的內核啟動計算機。如果出現問題, 後面的一些 故障排除方法 將幫您擺脫困境。 如果您的內核 無法啟動, 請參考那一節。
注意: 其他與啟動過程相關的文件, 如 loader(8) 及其配置,則放在 /boot。 第三方或定制的模塊也可以放在 /boot/kernel, 不過應該注意保持模塊和內核的同步時很重要的,否則會導致不穩定和錯誤。
Copyright © Linux教程網 All Rights Reserved