?? kernel-howto.txt
字號:
Kernel HOWTO 中譯版 作者: Brian Ward [1]bri@blah.math.tu-graz.ac.at譯者: [2]C.W.Huang & [3]Asd L. Chen v0.80, 26 May 1997. 翻譯日期: 25-29 August 1997 _________________________________________________________________ 這是一份關於如何配置、編譯、升級核心以及排難解紛的詳細指引. _________________________________________________________________ 1. 簡介 * 1.1 請先看此! * 1.2 文章風格說明 2. 重要問題與解答 * 2.1 不管怎麼樣,核心到底是做什麼的? * 2.2 我為什麼要更新核心? * 2.3 較新的核心支援那些硬體? * 2.4 我需要那個版本的 gcc 或是 libc ? * 2.5 什麼是可載入模組? * 2.6 我需要多大的磁碟空間? * 2.7 這需要多久的時間? 3. 如何真正進行核心的配置? * 3.1 取得原始程式碼 * 3.2 解開原始程式碼的包裝 * 3.3 配置核心 * 3.4 現在呢? (The Makefile) 4. 編譯核心 * 4.1 清除與確認 * 4.2 編譯時期 * 4.3 其他可以``make''的東西 * 4.4 安裝核心 5. 修補核心 * 5.1 使用修補檔 * 5.2 如果有錯誤發生 * 5.3 砍掉 .orig 檔案 * 5.4 其它的修補檔 6. 附加的套件 * 6.1 kbd * 6.2 util-linux * 6.3 hdparm * 6.4 gpm 7. 一些陷阱 * 7.1 make clean * 7.2 巨大或緩慢的核心 * 7.3 核心無法編譯 * 7.4 新版的核心似乎不能啟動 * 7.5 你忘了執行 LILO,或系統根本不能啟動 * 7.6 系統表示 `warning: bdflush not running' * 7.7 系統說 undefined symbols 而且無法編譯 * 7.8 無法讓我的 IDE/ATAPI CD-ROM 正常工作 * 7.9 系統顯示關於 obsolete routing requests 的奇怪訊息 * 7.10 防火墻功能無法在 1.2.0 上工作 * 7.11 ``Not a compressed kernel Image file'' (非壓縮核心映像檔) * 7.12 升級至 1.3.x 後在控制臺終端機上的問題 * 7.13 核心升級後似乎無法編譯東西 * 7.14 增加上限 8. 升級至 2.0.x 的注意事項9. 可載入模組 * 9.1 安裝模組工具 * 9.2 與核心發行的模組 10. 其它配置選項 * 10.1 General setup (一般設定) * 10.2 Networking options (網路選項) 11. □訣和技巧 * 11.1 重導 make 或是 patch 指令的輸出 * 11.2 條件式的核心安裝 * 11.3 核心更新 12. 其它可能相關有用的 HOWTOs13. 雜項 * 13.1 作者 * 13.2 預定目標 * 13.3 貢獻者 * 13.4 版權聲明,許可,諸如此類的 _________________________________________________________________ 1. 簡介 你是否需要閱讀這份文件? 如果你有下列任何癥狀之一的話,是的: * ``哎呀!這套 wizzo-46.5.6 軟體說它需要 1.8.193 版的核心,而我卻仍然 只有 1.0.9 版!'' * 比較新的核心之一□面有你正好需要的一個設備驅動程式. * 你對於如何編譯核心真的一無所知. * ``在 README 檔案里面真的就是全部的資料了嗎?'' * 你來,你試,它還是不動. * 你需要某事給予一直要求你為他們安裝核心的人們. 1.1 請先看此! 這份文件中的某些□例假設你有 GNU tar,find 以及 xargs. 這些是 Linux 套 件里的標準工具,應該不是問題. 文件中也假設你知道你系統的檔案系統架構, 如果你并不知道,最好趕快寫下一份 mount 指令在系統正常運作下,所顯示的結 果作為參考(或者是一份 /etc/fstab 的列表,如果你能夠看得懂). 這些資訊很 重要,而且,除非你重新分割或加入新的磁碟,重新安裝你的系統以及做諸如此 類的操作,否則它們不會變動. 本文寫作時最新``產品''的核心版本號碼是 2.0.30,也就是說本文的參考及例子 是對應於該版本的. 雖然我嘗試讓這篇文章盡量跟版本無關,核心卻不斷地在發 展中. 因此如果你取得一新的版本,它不可避免地會有一些不同. 當然,這應 該不會造成大問題,但它可能會制造一些混淆. 有兩種版本的 Linux 核心原始碼,``產品'' 與 ``發展中'' 的. 產品版本從 1.0.x 開始而且目前是以偶數編號發表的; 1.0.x 是產品,1.2.x 是產品, 2.0.x 也是.這些版本應該比較穩定,在發表時是沒有臭□(bug)的版本. 發展 中的核心 (1.1.x, 1.3.x 等等) 是作為測試用的,給那些想要測試最新而且可能 有許多臭□的人用的. 已經警告過你了. 1.2 文章風格說明 看起來像這樣 text 的文字或者是某樣將出現你的螢幕上的東西,一個檔名, 或 是某樣可被直接鍵入的東西,像是命令,或命令的選項(如果你看的是純文字檔案 ,它看起來沒什麼不同). 命令與其它的輸入經常被框起來(用` '),這經常引起 典型的標點符號問題: 如果這樣的項目出現在句子的最後面,人們時常會在命令 後面加上一句號 `.', 因為美國人的引號習慣將句號放入引號里面. 即使用常 識(而不幸的是,這假設了擁有此``常識''的人是習慣於美國式的引號)想也知道 應先將這標點去掉,但很多人總是忘記. 所以在此情形下我將句號放在引號外頭 .換句話說,當我叫你要打 ``make config'' 時, 我會寫 `make config',而 不是 `make config.'. 2. 重要問題與解答2.1 不管怎麼樣,核心到底是做什麼的? 在 Unix 系統中,像是你的程式與硬體的一個仲裁者. 首先,它為所有執行中的 程式(程序)做記憶體管理, 并且確保它們都能夠平均(或不平均,如果你愿意)的 分享處理機的運算資源. 此外,它還提供了一個良好的介面讓剛剛提到的程式能 透過它與你的硬體溝通. 其實核心所處理的工作比這還要更復雜一些,不過這些基本的功能是最必要知道 的. 2.2 我為什麼要更新核心? 比較新的核心一般來說會提供更強的能力來與更多種奇奇怪怪的硬體溝通(也就是 說,它們擁有更多的設備驅動程式), 它們能夠有更好的行程管理,它們能夠執 行的比舊的版本更有效率,它們可能比舊的版本來的更穩定,而且它們修正了舊 版里的一些錯誤. 大部分的人是因為他們需要那些新的設備驅動程式以及錯誤修 正的部份而更新核心. 2.3 較新的核心支援那些硬體? 請看 [4]Hardware-HOWTO 文件. 另一個方法是,你可以查看 Linux 原始程式碼 中的 `config.in' 檔, 或者就在當你試著去 `make config' 時找出來. `make config' 將會讓你看到標準的核心原始程式碼支援的所有硬體,但這并不 是 Linux 所支援的全部硬體; 許多普通的設備驅動程式(像是 PCMCIA 驅動程式 以及某些磁帶機的驅動程式)是個別維護及發行的可載入模組. 2.4 我需要那個版本的 gcc 或是 libc ? Linus 對這個問題的建議放在 Linux 原始程式的 README 檔案□頭. 如果你沒 有該版本或是更新的版本,新版的 gcc 應該會告訴你是否需要更新 libc 的版本 . 這兩個操作都不會有什麼問題,只要照著說明做就可以了. 2.5 什麼是可載入模組? 它們是核心的一部分(通常是設備驅動程式),但是并沒有編譯到核心里面去. 它 們被分別編譯,然後幾乎可以在任何時候將它們插入運作中的核心或從中取出. 由於它的便利性,這已經成為一種增加東西到核心里去的較好方式. 許多常用的 設備驅動程式,例如 PCMCIA 驅動程式以及 QIC-80/40 磁帶機的驅動程式就是可 載入模組. 2.6 我需要多大的磁碟空間? 這與你系統的特殊配置有關.首先,壓縮過後的 Linux 原始程式碼在 2.0.10 版 時約占 6 MB. 許多站臺在解壓縮後仍會保留一份.解壓縮以後這將占掉約 24 MB. 但這還不是全部 — 你將會需要更多的磁碟空間來實際編譯這些東西. 這 與你配置多少東西到你的核心里頭去有關.例如,在某部機器上,我有網路 ,3Com 3C503 的驅動程式, 并且配置了三種檔案系統,而這全部共需要 30 MB .加上壓縮過的 linux 原始程式碼,這個配置大概需要用掉你 36MB . 在另外 一個系統上,不需要支援網路設備(但仍然需要支援網路),加上音效卡,結果吃 掉更多空間. 還有,一個新版本的核心幾乎總是比舊版本的占更大的空間. 所 以,一般來說,如果你有許多種硬體設備的話,確定你有足夠的硬碟空間來容納 這個配置. (以今日的價格來說,對於儲存空間的問題我不能不建議你再買一臺 磁碟機.) 2.7 這需要多久的時間? 對大部份的人而言,答案是``很久''.你的處理機速度有多快,以及你擁有的記 憶體數量有多少將是決定所需時間的主要因素, 但是,在把多少東西配置到核心 里頭去這方面還是可以做點努力. 在一臺有 16 MB 記憶體的 486DX4-100 電腦 上,一個有五種檔案系統、支援網路、以及音效卡驅動程式的 1.2 版核心可以在 二十分鐘以內完成. 類似的配置,在一臺 386DX/40(8 MB 記憶體)上大約需要要 1.5 個小時. 在編譯核心時通常一些好的建議是去喝一點咖啡,看點電視,織些 毛線,或任何你喜歡的事. 如果你的機器真的很慢的話你也該換臺較快的機器. 3. 如何真正進行核心的配置?3.1 取得原始程式碼 你可以經由匿名 ftp 站從 ftp.funet.fi 的 [5]/pub/Linux/PEOPLE/Linus, 或 是其它 MIRROR 站取得.([譯注] 臺灣可從 [6]ftp.edu.tw 取得.) 檔案名稱一 般是以標記成 linux-x.y.z.tar.gz 為代表,其中的 x.y.z 是版本編號. 較新 的(更好的?)版本以及修補檔一般是放在類似 `v1.1' 以及 `v1.2' 這樣的子目錄 下. 數字最大的是最新的版本,而且通常是``測試版'',也就是說如果你對 beta 或 alpha 版感到不安的話,你應該停留在主要的發行版本上. 強烈建議你去找 mirror 的 ftp 節點,而不要直接到 ftp.funet.fi 去! 底下是 一些 mirrors 以及其他節點的簡要列表: USA: sunsite.unc.edu:/pub/Linux/kernelUSA: tsx-11.mit.edu:/pub/linux/sources/systemUK: sunsite.doc.ic.ac.uk:/pub/unix/Linux/sunsite.unc-mirror/kernelAustria: ftp.univie.ac.at:/systems/linux/sunsite/kernelGermany: ftp.Germany.EU.net:/pub/os/Linux/Local.EUnet/Kernel/LinusGermany: sunsite.informatik.rwth-aachen.de:/pub/Linux/PEOPLE/LinusFrance: ftp.ibp.fr:/pub/linux/sources/system/patchesAustralia: sunsite.anu.edu.au:/pub/linux/kernel 一般來說,sunsite.unc.edu 的 mirror 站是很好找的. 檔案 /pub/Linux/MIRRORS 包含了已知的 mirror 節點. 如果你沒有辦法上 ftp ,有 個存放 linux 的 BBS 系統列表會定期刊登在 comp.os.linux.announce 上,試 著到那邊去找一下. 如果你想尋找一般的 Linux 資訊與套件,去 [7]http://www.linux.org/. 3.2 解開原始程式碼的包裝 確定你是以`root'的身份簽入,然後 cd 到 /usr/src. 如果你安裝 Linux 時已 經安裝了核心原始程式碼,在這個目錄底下應該已經存在一個叫做 `linux' 的子 目錄. 這是舊版的 linux 原始程式碼.如果你還有磁碟空間而且想要玩得安全 一點,那麼你會想要保留這個子目錄的. 有個好主意是根據你目前使用的核心版 本來修改這個子目錄的名稱. `uname -r' 這個指令將會告訴你目前的核心版本 . 所以,如果 `uname -r' 顯示 `1.0.9',你就可以把 `linux' 改名(用 `mv')為 `linux-1.0.9'. 如果你是個魯莽型的人,那就直接把這個子目錄清除 掉. 無論是哪一種情況,反正只要確定在解開全部的原始程式碼之前 ,/usr/src 目錄下沒有 `linux' 這個子目錄就對了. 在 /usr/src 目錄下,用 `tar zxpvf linux-x.y.z.tar.gz' 來解開原始程式碼 的包裝 (如果你拿到的是 .tar 的檔案,後面沒有加上 .gz,那就用 `tar xpvf linux-x.y.z.tar'). 你將會看到原始程式的內容飛逝而過.當它完成以後,在 /usr/src 將會出現一個新的 `linux' 子目錄. cd 到 linux 目錄下然後查看 README 檔, 里面應該會有一段標題為 `INSTALLING the kernel' 或類似的文字 . 如果適當的話,先依照說明里的指示 — 建立該有的符號鏈結,移除過時的 .o 檔案等等等諸如此類的工作. 3.3 配置核心 注意:這部份內容有些是重覆 Linus 的 README 檔案中的相應章節或加以修訂. 在 /usr/src/linux 下執行 `make config' 這個命令將會啟始一個指令稿, 而 這個指令稿會問你各種問題.它需要 bash ,所以要確定 bash 是 /bin/bash ,/bin/sh 或 $BASH. 還有其它種 `make config' 的方式你可能會覺得更容易使用. 對那些執行 X Window 的人你如果有裝 Tk 的話可以試著用 `make xconfig'. `make menuconfig' 是給那些有裝 (n)curses 而且喜歡文字模式選單的人用的. 這些 界面有個明顯的好處: 如果在配置過程中你不小心犯了錯,可以簡單地回去修正 . 你現在該準備好回答這些問題,通常用 `y' 或 `n' 就可以了. 設備驅動程式通 常會有一個 `m' 選項. 這表示``模組(module)'',表示說系統將會編譯它,但 不會直接放進核心里,而是做為一可載入模組. 一個有趣的說法是表 示``maybe''.有一些很明顯或是不重要的選項將不會在此加以說明. 請見`` [8]其它配置選項''一節對其中的簡短說明. 在 2.0.x 或以後的版本中有一個 `?' 選項,提供了這個配置參數的簡短描述. 這些資訊應該都是最新的. Kernel math emulation (核心的數學運算模擬) 如果你沒有數學輔助運算處理機(你只有一臺單純的 386 或 486SX),那麼你在 這里要回答 `y'.如果你已經有數學輔助運算處理機卻還回答 `y', 那也不必太 擔心 — linux 還是會去使用它而忽略掉核心的模擬程式. 唯一的影響是編譯出
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -