?? kernel-howto.txt
字號:
來的核心變大了(用掉更多的記憶體). 我聽說數學運簡模擬很慢; 雖然和本節無 太大關系,還是應該注意這對 X Window 系統的效率會有很大影響. Normal (MFM/RLL) disk and IDE disk/cdrom support (標準硬碟支援) 你在這里差不多都得回答 `y'.它代表的意思是核心將會支援標準的 PC 硬碟, 例如大多數人使用的 IDE 界面硬碟.這不包括 SCSI 設備的支援; 這將在後面設 定. 然後你會被問到關於 ``old disk-only'' 與 ``new IDE'' 驅動程式的事. 你應 該兩者選一; 主要的差別是舊的驅動程式只支援單一界面兩部磁碟機, 而新的驅 動程式支援第二界面及 IDE/ATAPI 光碟機.新的驅動程式比舊的大約多 4K, 而 且應該是``改良的'',也就是說除了可能包含些許錯誤之外,它應該會改善你的 磁碟效率,特別是如果你有較新的 EIDE 硬體的話. Networking support (網路支援) 原則上,如果你有連接網路,譬如說,你有 Internet 連線,或是你將使用 SLIP,PPP,term 或其它方式撥接到 Internet 上的話,回答 `y'. 然而,某些 軟體套件(例如 X Window 系統)需要網路支援,即使你的機器并不真正連接到網 路上.這情形你也應該回答 `y'. 然後,你會被問到是否需要支援 TCP/IP 網路 ,如果你不十分確定,就回答 `y'. Limit memory to low 16MB (制記憶體在 16 MB) 可能會有一些不良的 386 DMA 控制器無法正確地定址到 16 MB 以上的記憶體位 址; 如果你的機器剛好有這種(罕見)情況時,那麼你也就只好回答″ y ″了. System V IPC 一個 IPC (行程內通訊,Interprocess Communication) 的定義就在 Perl 書中 的注解. 這并不大奇怪,一些 Perl 程式設計者用它來讓行程之間互相溝通,就 像許多其它套件(最著名如 DOOM)一樣. 因此除非你完全了解你在做什麼,不然 最好別回答 n. Processor type (386, 486, Pentium, PPro) (微處理機種類) (在較舊版本的核心中為: Use -m486 flag for 486-specific optimizations, 使用 -m486 旗標針對 486 做最佳化) 按照慣例地,這是對一特別的微處理機做某種最佳化; 核心仍可在其它晶片上跑 得很好,但可能會比較大些. 不過,在較新版本的核心上,已經不是這個樣子了 .因此你應該正確地回答你要編譯的微處理機種類. ``386'' 的核心可以在所有 的機器上工作. SCSI support (SCSI 的支援) 如果你有 SCSI 設備,那麼就回答 `y'. 接著會有提示要求更進一步的資訊,像 是你是否要支援光碟機,磁碟機,還有你使用的是那一種 SCSI 介面卡. 這部份 請參閱 [9]SCSI-HOWTO,有更詳細的說明. Network device support (網路設備支援) 如果你有網路卡,或者你想要使用 SLIP,PPP,或是并列埠界面卡,那就回答 `y'. 接著會有提示問你使用的是那一種網路卡,或要使用那一種通訊協定. Filesystems (檔案系統) 這將會有提示要你回答所要支援的檔案系統種類,計有: Standard (minix) — 新的套件不再建立 minix 檔案系統,而且很多人不使用它 ,但是把它配置在核心里仍然是個好主意. 某些``急救磁片''程式會用到它,而 且仍然有許多軟碟磁片可能用 minix 檔案系統,因為 minix 檔案系統對於處理 軟碟片方面較無問題. Extended fs — 這是擴充檔案系統的第一版,現在已經不再使用.使用的時機是 ,如果你有需要,你就會知道的.如果你覺得懷疑,你就不需要它. Second extended — 這是現在新發行的套件所廣泛采用的檔案系統,你可能會有 其中一種,所以必須回答 `y'. xiafs filesystem — 這個檔案系統曾經一度很普遍,但是在寫這份文件時,我 已經不知道有任何人在使用它了. msdos — 如果你想要在 linux 下使用你硬碟中的 MS-DOS 分割區,或是想將用 MS-DOS 格式化的軟碟片掛進來的話,回答 `y'. ums-dos — 這種檔案系統能使 MS-DOS 檔案系統擁有更多像 Unix 的特性,像是 長檔名等等.這對那些不使用 MS-DOS 的人(像我)并不是很有用. /proc — 另一種神奇的東西(我猜這個概念是無恥地從貝爾實驗室里偷過來的). 它不是你硬碟分割區里的任何東西,而是核心與程序之間的檔案系統介面.許多 程序工具(像 `ps')都會用到它. 有時可以試著用 `cat /proc/meminfo' 或 `cat /proc/devices'. 某些 shell (特別像是 rc) 使用了 /proc/self/fd (在 其它系統里叫做 /dev/fd) 來做輸出輸入動作. 你幾乎應該回答 `y'; 許多重要 的 Linux 工具都依賴它來運作的. NFS — 如果你在網路環境下而且想要由 NFS 來使用其它機器的檔案系統,回答 `y'. ISO9660 — 絕大部分的光碟片都使用這個檔案系統.如果你有光碟機而且想在 Linux 下使用,回答 `y'. OS/2 HPFS — 在編寫這份文件的時候,這個檔案系統還只支援到 OS/2 HPFS 的 讀取. System V and Coherent — 這是為 System V 以及 Coherent 系統的分割區而設 的(它們是另一種在 PC 上的 Unix 系統). 但是我不知道我需要那些檔案系統! 好吧,鍵入 `mount'.它看起來會像這樣: blah# mount /dev/hda1 on / type ext2 (defaults) /dev/hda3 on /usr type ext2 (defaults) none on /proc type proc (defaults) /dev/fd0 on /mnt type msdos (defaults) 仔細看看每一行;在 `type' 後面的那個字就是檔案系統的格式. 在這個例子中 ,我的 / 和 /usr 分割區是 second extended 格式, 我使用了 /proc ,而且 掛有一張以 msdos (bleah) 為檔案系統格式的磁片. 如果你有使用 /proc,可以試試 `cat /proc/filesystems'. 它會給你一份目前 使用的核心所支援的檔案系統列表. 這配置并不常使用.不重要的檔案系統會使核心顯得臃腫; 參見可載入模組一節 的說明以避免此情況,以及`` [10]陷阱''一節說明為何臃腫的核心不好. Character devices (字元設備) 在這里,你將會發現許多設備名稱,用來設定你的印表機,匯流排滑鼠,PS/2 滑 鼠(大部分筆記型電腦使用內建的 PS/2 滑鼠), 以及一些磁帶機驅動程式,以及 其它的``字元''設備.當有合適的選項時,回答 `y'. 注意:Selection 這個程式使你可以在 X window 之外使用滑鼠在各個虛擬控制 臺間做剪貼的動作. 如果你有串列滑鼠的話,這真的很棒,因為它與 X window 之間的溝通良好, 不過如果你用其它種類的滑鼠就需要點技巧了.Selection 曾 經一度是選擇的配置配項,不過現在已經是標準了. 注意二: Selection 現在已經過時了.現在新的程式名叫 ``gpm''. 它能做更神 奇的事,像是轉換滑鼠協定,處理多重滑鼠等…… Sound card (音效卡) 如果你想聽到 biff 程式大叫的話,回答 `y'. 然後等一下會編譯另一個配置程 式并詳細詢問你所有關於音效卡的問題. (注意: 當它問你是否安裝完整版本的 驅動程式時,你可以回答 `n' 以減少你核心記憶體并只選用你真正需要的.) 如 果你有音效卡我強烈建議看一下 [11]Sound-HOWTO 以知道更多的細節. 其它配置選項 沒有將所有的選項都列出來,因為有些經常改變,或是相當自明的(例如 3Com 3C509 support 就是編譯這種特別乙太網路卡的驅動程式), 有一個十分容易理 解的所有選項列表(包括將它們放到 Configure 指令稿的方法)可在這個 URL 找 到(由 Axel Boldt [12]axel@uni-paderborn.de 所收集): [13]http://math-www.uni-paderborn.de/~axel/config_help.html 或經由匿名 FTP 站: [14]ftp://sunsite.unc.edu/pub/Linux/kernel/config/krnl_cnfg_hlp.x.y z.tgz 其中 x.yz 是版本號碼. 其後來的核心中(2.0.x 及其後的),這已被整合到原始程式碼中. Kernel hacking >這是從 Linus 的 README 里摘錄的: ``kernel hacking'' 配置的細節通常會產生一個更大或是更慢的核心(或者是又 大又慢), 而且可能因為將一些常式配置成很活躍地去嘗試中斷一些不良的程式 碼以便找出核心里的問題( kmalloc() ), 而使得核心變得比較不穩定.所以 要產生一個核心``產品''的話,你在這里應該回答 `n'. 3.4 現在呢? (The Makefile) 在你完成 make config 之後,應該會有一個訊息告訴你核心已經配置好了, 以 及要你去``check the top-level Makefile for additional configuration'' 等等訊息. 所以查看一下 Makefile.你應該不必改變它,但是看看無妨. 一旦新核心完成 ,你也可以用 `rdev' 指令來改變其中的選項. 4. 編譯核心4.1 清除與確認 當用來進行配置的指令稿執行完成時,它會告訴你去 `make dep' 以及 `clean' . 所以要執行`make dep'.這將確保所有的相依關系,例如 include files 都 沒問題. 除非你的電腦真的很慢,否則它不會花太久時間的. 完成後,在較舊 版本的核心中你還應該做 `make clean'. 這會清除核心編譯的所有目的檔以及 其它東西.在重建一個核心之前不要忘記這個步驟. 4.2 編譯時期 在完成 `make dep' 及 `make clean' 工作之後,你現在可以執行 `make zImage' 或 `make zdisk' (這部份需要長時間). `make zImage' 將會編譯核心 ,并且在 arch/i386/boot 留給你一個叫做 `zImage' 的檔案.這就是新的壓縮 核心. `make zdisk' 做的事也一樣,但是它會把核心放到你所希望的磁片去, 只要把這張磁片放在 ``A:''. `zdisk'對於測試新核心很方便;如果它當掉(或 工作不正常),只要把磁片拿掉再用舊的核心啟動即可. 如果你意外地刪除了核 心或是什麼的,它也是個方便的啟動辦法. 當你把一臺磁碟的內容傾倒到另外一 臺去時,你也可以用它來安裝新的系統(除了這些之外還有更多用途!) 所有近來的核心都是壓縮過的,所以有個 `z' 在名字前面.壓縮過的核心執行的 時候會自動將自己解壓縮. 4.3 其他可以``make''的東西 `make mrproper' 將會做更廣泛的 `清除' 工作. 這個動作有時候是必須的,所 以你可能會希望在每次修補的時候執行它. `make mrproper' 還會將你的配置檔 案殺掉,所以如果你認為它重要的話應該先做一備份(在 .config). `make oldconfig' 會嘗試由一舊的配置檔案來配置你的核心.它會為你執行 `make config'. 如果你還未曾編譯過核心或沒有舊的配置檔案,那麼你可能不 該做這個,因為你幾乎確定會更改預設的配置. 參見可載入模組一節對 `make modules' 的說明. 4.4 安裝核心 在你已經獲得一個看起來能夠照你希望運作的新核心之後,現在是安裝它的時候 了. 大部份的人使用 LILO (Linux Loader) 來做這件事. `make zlilo' 將會 安裝核心,然後對它執行 LILO,使你完成所有開機的準備, 但是這只有在 LILO 已經以下列這種方式配置好的時候才可以:核心為 /vmlinuz , lilo 在 /sbin 下,而且與你的 LILO 配置(/etc/lilo.conf)一致. 另一方面,你可能需要直接使用 LILO.這是一個相當容易安裝的軟體,然而,它 的配置檔常使人困擾. 查看配置檔(不是舊版的 /etc/lilo/config 就是新版的 /etc/lilo.conf),看看里面有些什麼. 它看起來像這樣子的東西: image = /vmlinuz label = Linux root = /dev/hda1 ... 首先,`image =' 設定為已經安裝的核心.大部份的人似乎都用 /vmlinuz. `label' 則是給 lilo 用來決定現在要啟動的是那個核心或作業系統, 而 `root' 則是這個特別的作業系統的根目錄 /. 備份一份舊的核心,然後將你做 的 zImage 拷貝進去(例如,如果你用 `/vmlinuz' 的話,就像這樣 `cp zImage /vmlinuz'). 然後,執行 `lilo',但是在較舊的系統上,你可能必須執行 /etc/lilo/install 或甚至是 /etc/lilo/lilo -C /etc/lilo/config. 如果你想知道更多有關於 LILO 的配置,或是你并沒有 LILO 但是你想要安裝的 話, 從你喜歡的 ftp 節點取得最新的版本然後依說明行事. 要能夠從硬碟啟動你的舊核心其中之一的話(這是另一個在新核心出狀況的情況下 保護你自己的方法), 把 LILO 配置檔中所有的(包括) `image = xxx' 拷貝到檔 案的最底端, 然後把 `image = xxx' 改成 `image = yyy' 其中的 `yyy' 是你 備份舊核心所存檔的名字. 接著,把 `label = zzz' 改成像是 `label = linux-backup' 然後重新執行 lilo. 你可能得要加上一行 `delay=x',其中的 x 是以十分之一秒為單位的時間, 這是告訴 LILO 在啟動前先等一下,所以你可 以中斷它的執行(例如用 shift 鍵). 然後鍵入所備份的啟動映像之 label (在 發生了某些令人不愉快的事情的情況下). 5. 修補核心5.1 使用修補檔 核心的小幅更新是以修補檔的方式發行.例如,如果你的版本是 1.1.45 , 而且 你注意到出現了一個 `patch46.gz' 可以用來升級它, 這代表你可以藉由使用這 個修補檔將版本升級到 1.1.46. 你也許會想要先備份原始程式碼(`make clean' 然後 `cd /usr/src; tar zcvf old-tree.tar.gz linux' 將會為你造出 一份 tar 壓縮檔,里面就是整個原始程式碼與其檔案架構). 現在接著繼續上面的例子,假設你已經取得了 `patch46.gz' 并放在 /usr/src 下. cd 到 /usr/src 然後執行 `zcat patch46.gz | patch -p0' (如果并不是 壓縮過的修補檔,那麼就執行 `patch -p0 < patch46'), 你將會看到許多東西 飛逝而過(或是慢慢跳過,如果你的電腦真的很慢的話)告訴你它正試著修補程式 ,以及是否成功. 通常,這個過程快得無法仔細看清楚它的動作,所以你會無法 確定它到底有沒有成功地執行. 所以你可能會想在 patch 指令中加上 -s 選項 ,告訴 patch 程式只報告錯誤訊息就好. (這樣你就不會得到許多``嗨! 我的電 腦正在做某些改變!''的感覺,不過你可能寧愿這樣…) 那麼就得找找看一些可能 不是那麼順利的事.cd 到 /usr/src/linux 并找尋檔名結尾為 .rej 的檔案. 某些版本的 patch(比較舊的版本,它們可能是在比較早期的檔案系統上編譯的 )會把這些沒有成功的操作記錄在檔名有 # 的檔案里. 你可以用 `find' 來替 你找; find . -name '*.rej' -print 會將現行目錄及子目錄下所有具 .rej 結尾的檔名印到標準輸出. 如果一切正確無誤的話,執行第三節跟第四節所討論的 `make clean' ,`config' 以及 `dep'. 關於 patch 指令另外還有一些選項.如前所述,patch -s 將會抑制除了錯誤以 外的所有其他訊息. 如果你把核心原始程式碼放在 /usr/src/linux 以外的地方 ,在該目錄下用 patch -p1 也可以乾凈俐落的執行修補任務. 其它的 patch 選 項在線上手冊(man page)里都有很詳細的描述. 5.2 如果有錯誤發生 (注意: 本節提到的大部份是指舊版的核心) 通常最常發生的問題是當 patch 修改一個叫做 `config.in' 的檔案時,這個檔 案看起來不怎麼對勁, 因為你修改了一些選項來配合你的機器.這個問題已經小
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -