萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> kerneld mini

kerneld mini

class="23240"> kerneld mini-HOWTO
1.7 版,上次由 Henrik Storner ([email protected])於 1997 年 7 月 19 日([email protected]) 更新。

曾達康 ([email protected]) 於 1998 年 6 月 14 日完成翻譯。


--------------------------------------------------------------------------------


導言
此文件解釋如何使用 Linux 核心中的 kerneld 功能。它會說明:

kerneld 是什麽 
為什麽要用它 
如何取得所需東西 
如何設定它 
如何告訴 kerneld 它不認識的模組的資料 
如何偵察 kerneld (設定時可能有用) 
kerneld 的特別用途 
常見問題及怪事 
此文件的最新版本可在 http://eolicom.olicom.dk/~storner/kerneld-mini-HOWTO.html 找到。(譯按:中文版則可在 http://www.linux.org.tw/CLDP/mini/Kerneld.html 找到)在此 mini-HOWTO 推出的正式版本期間,你可在 http://eolicom.olicom.dk/~storner/kern.html 找到未經組織的更新清單。 

榮譽
如果你發現此文件中出現錯誤,請告訴文章的原作者。以下各人都曾對本文作出貢獻:

Bjorn Ekwall  
Ben Galliart  
Cedric Tefft  
Brian Miller  
James C. Tsiao  
我非常感謝此 mini-HOWTO 讀者寄給我們的鼓勵和提議。

(譯按∶當然,如果問題出在譯文中,請通知曾達康 )



--------------------------------------------------------------------------------


kerneld 是什麽?
kerneld 是由 Bjorn Ekwall 引入 1.3 版的發展核心 (development kernel) 的功能。它可在所有 2.0 及 2.1 版本的核心找到。它令模組 (modules)—即驅動程式 (device drivers)、網絡驅動器 (network drivers)、檔案系統 (filesystems)—自動在有需要時載入,而不需自行使用 modprobe 或 insmod。

還有更有趣的東西,雖然它們尚未整合到標准的核心中∶

它可設定成不使用內定的空白畫面,而讓你選擇其他程式,使你可自選螢幕保護器 (screen saver)。 
和螢幕保護器相似,你可把主控台 (console) 的‘哔’聲改為完全不同的東西… 
kerneld 包括兩個獨立部分:

核心向監控程式 (daemon) 就所需模組提出要求的支援。 
懂找出所需模組來滿足核心要求的使用者層面 (user-level) 監控程式。 
要使用 kerneld,兩個部分都要正常運作。只設定好其中一個是沒用的。



--------------------------------------------------------------------------------


為什麽要用它?
有不少好理由去使用 kerneld。這裡提出的是我個人的——其他人可能有其他的理由。

如果你要為多個只有少許不同的系統(如使用不同的網絡控制卡)建立核心,你只需建立一個核心和數個模組,而不需為每個系統建立不同的核心。 
對開發人員而言,模組比較容易測試—你不需重新啟動電腦以載入及卸下驅動程式(這點適用於所有模組,並不限於 kerneld 載入的)。 
它減少核心占用的記憶體,即你有更多記憶體供其他程式使用。核心所占用的記憶體是 *永不* 被換出 (swap-out) 的,所以如果你的核心中有 100kB 沒用的驅動程式的話,那只是在浪費你的記憶體。 
有一些我要用的東西,如 ftape floppy-tape driver 或 iBCS,只以模組形式出現。但我懶得自己載入和卸下它們。 
Linux 發行者不再需要建立 284 個不同的開機影象 (boot images) —使用者只載入配合其硬件的驅動程式。例如 RedHat 4.0 就使用了這方法。 
當然,你也有不使用它的理由—你可能喜歡在一個核心映象 (kernel image) 中包括所有你要的驅動程式。如果是這樣,你看錯文章了。



--------------------------------------------------------------------------------


如何取得所需東西?
對 kerneld 的支援始於 1.3.57 版。如果你正使用較舊的版本,你需要更新它才可用 kerneld 了。所有主要的 Linux ftp 台都有核心的原程式碼。我建議你更新至最新版本的穩定核心,2.0,目前是嵌補等級 (patch level) 2.0.29 (譯按:現時已是 2.0.35):

  ftp://sunsite.unc.edu/pub/Linux/kernel/v2.0/linux-2.0.29.tar.gz
  ftp://tsx-11.mit.edu/pub/linux/sources/system/v2.0/linux-2.0.29.tar.gz
  ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/v2.0/linux-2.0.29.tar.gz
使用者層面的監控程式包含在 modules-1.2.8 及更新的 modules-2.0 中。它們一般會和核心源程式碼在同一地點找到,而官方位置包括:

  ftp://sunsite.unc.edu/pub/Linux/kernel/v2.0/modules-2.0.0.tar.gz
  ftp://tsx-11.mit.edu/pub/linux/sources/sbin/modules-2.0.0.tar.gz
  ftp://ftp.funet.fi/pub/Linux/tools/modules-2.0.0.tar.gz
注意:如果你想在 2.1 版的開發核心嘗試載入模組,你必須用最新的 modutils-(不是 modules-)。但請看 以下有關模組和 2.1 版核心部分的問題。



--------------------------------------------------------------------------------


如何設定它?
首先要取得所需的東西:合用的核心部分及最新版的 modules-utilities。之後你要安裝 modules-utilities。十分簡單:只需把原程式碼解壓及執行 make install. 這樣便會編譯 genksysm, insmod, lsmod, modprobe, depmod, kerneld,及把它們安裝到 /sbin。我建議你加數行到你的開機命令手稿 (startup-script) 來完成啟動時所需的設定。如果你使用 Slackware,請把以下數行加入你的 /etc/rc.d/rc.S 檔,如果你使用 SysVinit,如 Debian, RedHat, Caldera,請把以下數行加入你的 /etc/rc.d/rc.sysinit 檔。(譯按:據我所知,RedHat 5.0的 SysVinit已加入此功能): 

        # Start kerneld - this should happen very early in the
        # boot process, certainly BEFORE you run fsck on filesystems
        # that might need to have disk drivers autoloaded
        if [ -x /sbin/kerneld ]
        then
                /sbin/kerneld
        fi

        # Your standard fsck commands go here
        # And you mount command to mount the root fs read-write

        # Update kernel-module dependencies file
        # Your root-fs MUST be mounted read-write by now
        if [ -x /sbin/depmod ]
        then
                /sbin/depmod -a
        fi

第一部分啟動 kerneld。

第二部分開始時執行 'depmod -a'。depmod 建立所有可找到的模組的清單及分析它們之間互相依賴的情況。所以,它會知道載入一個模組前是否需要先載入其他模組。

注意∶最新版本的 kerneld 可選擇鏈結 (link) GNU 的 dbm 程式庫 libgdbm。如果在編譯 module-utilities 時作了此抉擇,找不到 libgdbm 時 kerneld 便不能啟動。這很有可能當 /usr 在另一個磁碟分區 (partition),而企圖在掛 (mount) /usr 前啟動 kerneld 時發生。建議的解決方法是把 libgdbm 從 /usr/lib 移到 /lib,或靜態連結 kerneld (link kerneld statically)。 

之後,你要把核心的源程式解壓,設定及建立一個你喜歡的核心。如果你未試過這樣做,你必須閱讀在 Linux 源程式碼頂層目錄 (top directory) 中的 README 檔。在執行 make config 設定核心時,你要注意數條在早期出現的問題:

  Enable loadable module support (CONFIG_MODULES) [Y/n/?] Y

你要選擇 loadable module support,否則根本不會有模組讓 kerneld 載入。答 Yes。 

  Kernel daemon support (CONFIG_KERNELD) [Y/n/?] Y

當然,這也是需要的,很多東西都可建立為模組。你會見到類似的問題: 

  Normal floppy disk support (CONFIG_BLK_DEV_FD) [M/n/y/?] 

你可回答 'M' 來代表模組。通常只有開機時必須的驅動程式,如硬碟機驅動程式,和根目錄的檔案系統等必需建立在核心中。其他皆可建立為模組。 

完成 'make config' 後,執行 'make dep', 'make clean', 'make zImage' 或 'make zlilo', 'make modules' 和 'make modules_install'。

成功!

'make zImage' 會把你的新核心映像 (kernel image) 放到 arch/i386/boot/zImage。你要把它拷貝到你放置啟動映像的地方或用 LILO 安裝它。

想得到更多有關設定,建立及安裝核心部分的資料,請閱讀定時貼上 comp.os.linux.answers 的Kernel-HOWTO ,你也可在 sunsite.unc.edu 的 /pub/Linux/docs/HOWTO 找到它。(譯按:中文版可在 http://www.linux.org.tw/CLDP/Kernel-HOWTO.html找到。) 



-------------------------------------------------------------------------
copyright © 萬盛學電腦網 all rights reserved