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