?? kerneld.txt
字號:
/etc/conf.modules 里的一個路徑項目會取代 所有 modprobe 內置的路徑! 通常你是不用自己加上路徑的,因為預設的路行將己照顧到所有正常的設定。我 可保證! 另一方面,如果你只想加入代號 (alias) 或者選項 (option directive),你在 /etc/conf.modules 的新項目會加入到 modprobe 所知的。如果你想再定義一個 代號或選擇,你在 /etc/conf.modules 中的項目會凌駕預設那個。 區塊設備 如果你執行 '/sbin/modprobe -c',你會得到一個 kerneld 已知的模組的名單及 它們所對應的要求。例如,導致載入軟碟驅動程式的要求是主號碼 (major number) 是 2 的區塊設備。 osiris:~ $ /sbin/modprobe -c | grep floppy alias block-major-2 floppy 為什麼是 block-major-2?因為軟碟設備 /dev/fd* 的主號碼 (major number) 是 2 ,又是區塊設備。 osiris:~ $ ls -l /dev/fd0 /dev/fd1 brw-rw-rw- 1 root root 2, 0 Mar 3 1995 /dev/fd0 brw-r--r-- 1 root root 2, 1 Mar 3 1995 /dev/fd1 字元設備 字元設備的方法處理也差不多。例如 ftape floppy tape driver 的是 major-device 27: osiris:~ $ ls -lL /dev/ftape crw-rw---- 1 root disk 27, 0 Jul 18 1994 /dev/ftape 但 kerneld 本身并不知道 ftape 驅動程式,它不會在 '/sbin/modprobe -c' 的 結果中出現。 所以,要使 kerneld 載入 ftape 驅動程式,我要加一行到 kerneld 的設定檔 /etc/conf.modules 中: alias char-major-27 ftape 網絡設備 你也可以用設備的名稱來代替那些 'char-major-xxx' 或 'block-major-yyy' 設 定。這樣對網絡設備尤其有用,例如把 ne2000 網絡卡用作 eth0 可以籍此載入 : alias eth0 ne 如果你需要傳遞一些選項給你的驅動程式,例如告訴模組這網絡卡使用什麼 IRQ ,你可加上如下一 'options' 行: options ne irq=5 這樣會使 kerneld 用以下指令來載入 NE2000 驅動程式∶ /sbin/modprobe ne irq=5 當然,實際上所用的選項會因應所用模組而有所不同。 二元格式 二元格式也以相似的方法處理。每當你嘗試執行一個核心不懂載入的程式 ,kerneld 便會收到一個 "binfmt-xxx" 的要求, xxx 是一個由檔案開頭數個字 元決定的數字。使 kerneld 為 ZMAGIC (a.out) 執行檔載入 binfmt_aout 模組 的設定是: alias binfmt-267 binfmt_aout 因為 ZMAGIC 檔的幻數 (magic number) 是 267。(如果你查看 /etc/magic,你 會見到 0413 這個數字,但 /etc/magic 使用八進位數 (octal numbers) 而 kerneld 使用十進數 (decimal),而八進位的 413 即十進數的 267。)由於 a.out 格式共有三款稍為稍為不同的可執行檔 (NMAGIC, QMAGIC and ZMAGIC), 要全面支援 binfmt_aout 模組我們需要 alias binfmt-264 binfmt_aout # pure executable (NMAGIC) alias binfmt-267 binfmt_aout # demand-paged executable (ZMAGIC) alias binfmt-204 binfmt_aout # demand-paged executable (QMAGIC) kerneld 可自動辨認 a.out, Java 和 iBCS 二元格式,毋須特別設定。 連線規則 (slip, cslip and ppp) 連線規則用 "tty-ldisc-x"來作要求,而 x 一般是 1 (slip) 或 3 (ppp) 。kerneld 本身都認識這兩樣。 說起 ppp,如果你想 kerneld 載入 bsd_comp 資料壓縮模組,你需要加兩行到 /etc/conf.modules 中: alias tty-ldisc-3 bsd_comp alias ppp0 bsd_comp 網絡協定 (IPX, AppleTalk, AX.25) 部分網絡協定也可以模組載入。核心要用到一個網絡家族 (network family)(如 IPX)時,會向 kerneld 作出對一個類似 "net-pf-X" 的要求,而 X 是一個代表 所屬家族的數字。例如 net-pf-3 是 AX.25,net-pf-4 是 IPX,而 net-pf-5 是 AppleTalk。(這些數字是由 linux 源程式檔 include/linux/socket.h 中 AF_AX25, AF_IPX 的定義而來的。)故此要自動載入 IPX 模組,你要加一個類似 以下的項目到 /etc/conf.modules 中: alias net-pf-4 ipx 也請閱讀以下有關防止開機時出現關於未定義的協定的[31]常見問題。 檔案系統 有關檔案系統的 kerneld 要求就是檔案系統的名稱。一個常見的用途是為光碟載 入 isofs 的模組,例如 "iso9660" 檔案系統: alias iso9660 isofs _________________________________________________________________ 需要特別設定的設備 部分設備不只要使用代碼 (aliasing),還要其他設定,如模組的設備 (a device to a module)。 * 主數碼 10 的字元設備:[32]雜項設備 (The miscellaneous devices) * [33]SCSI 設備 * [34]需特別初始化 (initialization) 的設備 char-major-10:滑鼠、看門狗和隨機數 (Mice, watchdogs and randomness) 大多數硬件設備都以主數碼分辨,例如 ftape 是 char-major-27。但如果你看看 在 /dev 中主數碼是 10 的字元設備,你會見到一堆毫無關連的設備,包括: * 各種各樣的滑鼠(bus mice, PS/2 mice) * 看門狗設備 (watchdog devices) * 核心的 'random' 設備 * APM 介面 (Advanced Power Management interface) 很明顯,這些設備是由多個不同的模組控制的。所以,這些雜項設備的 kerneld 設定用到主號碼及副號碼 (the major number and the minor number): alias char-major-10-1 psaux # For PS/2 mouse alias char-major-10-130 wdt # For WDT watchdog 要用到此特性,你需要一個 1.3.82 或之後的核心部分。較舊的核心不會把副號 碼傳給 kerneld,因此,kerneld 不能找出所需要的雜項設備。 載入 SCSI 驅動程式: scsi_hostadapter 項目 SCSI 設備包括一個 SCSI 配接卡 (SCSI host adapter, 例如 Adaptec 1542)及 一個所需設備(如硬碟機 (hard disk)、光碟機 (CD-ROM) 或磁帶機 (tape-drive))的驅動程式。這全都可以模組來載入。但是,當你想存取連接到 Adaptec 卡的光碟機時,核心和 kerneld 只知道它需要載入 sr_mod 模組來支援 那 SCSI 光碟機—它不知道那光碟機連接到什麼 SCSI 控制器 (SCSI controller),所以不知道載入什麼模組來支援那光碟機。 要解決這問題,你可加一個你的 SCSI 驅動程式的項目到你的 /etc/conf.modules 中,籍以告訴 kerneld 如何在眾多 SCSI 控制器模組中選擇 : alias scd0 sr_mod # sr_mod for SCSI CD-ROM's ... alias scsi_hostadapter aha1542 # ... need the Adaptec driver 這只適用於 1.3.82 或之後的核心。 這方法只當你只用一個 SCSI 控制器時適用。如果你有超過一個,難度就高一點 。 一般來說,如果已經載入了一個配接器,你不能再叫 kerneld 載入另一個。你可 把兩個都編譯到核心中(不用模組),或自己把模組載入。 事實上,有一個方法可使 kerneld 載入多個 SCSI 驅動程式。James Tsiao 有以 下提議: 只要你親手建立 modules.dep 的倚賴 (dependency),你可很輕易使 得 kerneld 載入第二個 SCSI 驅動程式。你只需一個類似的項目: /lib/modules/2.0.30/scsi/st.o: /lib/modules/2.0.30/scsi/aha1542.o 來使 kerneld 在載入 st.o 前先載入 aha1542.o。我家中的電腦就使用 了幾乎相同的設定,對我所有二級 SCSI 設備 (secondary scsi devices), 包括磁帶機、光碟機和其他一般的 SCSI 設備都沒問題。缺點是 'depmod -a' 不能自動查出這些倚賴,所以你要自己加入這些,而且不 可在開機時執行 'depmod -a'。但只要設定好了,kerneld 就能自動載入 aha1542.o。 你要知道這技考只當你有不同種類的 SCSI 設備接駁在兩個控制器時才有用,例 如,把硬碟駁在其中一個,而把光碟機、磁帶或其他 SCSI 駁到另一個。 要載入超過一個模組時:“post-install”項目 有時,只把模組載入不足以使設備運作。例如,如果你把音效卡編譯為模組,你 也會希望調整至適當音量。問題題你的設定在下次載入時便會失去。這里是由 Ben Galliart (bgallia@luc.edu) 提供的秘訣: 最終的解決方法需要安裝 setmix-0.1 ( ftp://sunsite.unc.edu/pub/Linux/apps/sound/mixers/setmix-0.1.tar.gz ) 之後把以下一行加到我的 /etc/conf.modules: post-install sound /usr/local/bin/setmix -f /etc/volume.conf 這樣,當音效的模組載入後,kerneld 會執行 'post-install sound' 項目的指 令。因此該模組會被 '/usr/local/bin/setmix -f /etc/volume.conf 指令設定 好。 這方法對其他模組也有用,例如 lp 模組可籍以下一句用 tunelp 程式設定好: post-install lp tunelp <options> 只有 1.3.69f 版或之後的 kerneld 才支援這些選項。 注意: :此 mini-HOWTO 的較舊版本曾提及一個 "pre-remove" 選項,讓你可在 kerneld 卸下一個模組時執行一個指令。但這從未成功,因此并不鼓勵使用。這 個選項多數會在未來版本的 kerneld 中消失。所有有關模組 "設定" 的事情都在 改變中,在你看到這文件時,可能已有所不同了。 _________________________________________________________________ 偵察 kerneld 如果你什麼方法都已試過,但仍找不出核心在要在 kerneld 做什麼,你可用一個 方法找出 kerneld 收到什麼要求,從而知道該加什麼到 /etc/conf.modules。你 需要 kdstat 程式。 這個好用的程式已包括在 modules-package 中,但預定是不會編譯及安裝的。你 可用以下方法建立它: cd /usr/src/modules-2.0.0/kerneld make kdstat 之後,要使 kerneld 顯示它正在做什麼,執行 kdstat debug kerneld 便會開始在主控臺印出其工作的資料。當你執行所需的指令時,你會見 到 kerneld 收到的要求。這些要求可放到 /etc/conf.modules 中,加上所需模 組的別名 (alias),便可使工作完成。 要停止除錯時,執行 '/sbin/kdstat nodebug'。 _________________________________________________________________ kerneld 的特殊用途 我知道你想問如何設定螢幕保護程式 (screensaver) 的模組… modules-package 的 'kerneld/GOODIES' 目錄中有一些和螢幕保護程式及主控臺 嗶聲支援有關的核心修補 (kernel patches)。它們尚未在官方的核心出現。所以 你要自行修正及重新編譯核心。 要安裝修補,你要用 "patch" 指令: cd /usr/src/linux patch -s -p1 </usr/src/modules-2.0.0/kerneld/GOODIES/blanker_patch 之後重建安裝新核心。 當螢幕保護程式啟動時,kerneld 會執行 "/sbin/screenblanker" 指令。這可以 是一個執行你喜歡的螢幕保護程式的命令手稿 (shell script)。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -