翻譯文檔_LinuxKernelHOWTO.doc_第1頁
翻譯文檔_LinuxKernelHOWTO.doc_第2頁
翻譯文檔_LinuxKernelHOWTO.doc_第3頁
翻譯文檔_LinuxKernelHOWTO.doc_第4頁
翻譯文檔_LinuxKernelHOWTO.doc_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Linux 內(nèi)核幫助手冊(cè)布賴恩沃德,1.0版, 1999年6月5日這是一份對(duì)基于英特爾x86架構(gòu)的系統(tǒng)進(jìn)行內(nèi)核配置、編譯、升級(jí)和解決相關(guān)問題的詳細(xì)指南。1簡(jiǎn)介:你真的需要讀這篇文檔嗎?好,看看你是否已經(jīng)有下面的一些癥狀:?。∵@份wizzo-46.5.6的軟件包說它需要2.8.193版本的內(nèi)核,但我只有1.0.9版本!新版本的內(nèi)核里有一個(gè)你已經(jīng)有的設(shè)備的驅(qū)動(dòng)程序你確實(shí)完全不知道如何編譯一個(gè)內(nèi)核Readme里面真的包含了所有的內(nèi)容了嗎?你嘗試過,你努力了,但它還是不能工作。你需要給那些堅(jiān)持讓你為他們安裝內(nèi)核的人一些東西。1.1先讀讀這里!這篇文檔中的一些例子假定你已經(jīng)有了GNU下的tar、find和xargs程序,它們都是非常標(biāo)準(zhǔn)的,這不會(huì)引起任何問題。同時(shí)也假定你知道你的計(jì)算機(jī)中的文件系統(tǒng)結(jié)構(gòu)。否則,你要趕緊把mount命令在一般的系統(tǒng)操作下輸出的結(jié)果記下來作為參考(或者是/etc/fstab下的文件列表,如果你能夠看懂的話)。這些信息很重要,而且只要你不重新劃分或添加新的硬盤、重新安裝系統(tǒng)或是進(jìn)行其他類似的操作,它就不會(huì)改變。本文寫作時(shí)作為“產(chǎn)品”的最新的內(nèi)核版本是2.2.9,這意味著所有的例子和參考都是和該版本相一致的。雖然我盡力使得這篇文檔和內(nèi)核的具體版本無關(guān),但是內(nèi)核總是在不斷開發(fā)的,所以如果你得到了一個(gè)更新的版本,它難免會(huì)存在一些不同。同樣的,這不會(huì)造成什么大問題,但可能會(huì)引起一點(diǎn)混亂。Linux的內(nèi)核源代碼有兩類版本:“產(chǎn)品版”和“開發(fā)版”。產(chǎn)品版是版本號(hào)的第二個(gè)數(shù)字為偶數(shù)的版本,比如1.2.x、2.0.x、2.2.x等都是產(chǎn)品版。這樣的內(nèi)核被認(rèn)為是最穩(wěn)定、沒有問題的版本。在當(dāng)時(shí)發(fā)行的版本中是可以使用的。而開發(fā)版(例如2.1.x、2.3.x等)代表正在測(cè)試的內(nèi)核,是給那些想要測(cè)試內(nèi)核并發(fā)現(xiàn)可能存在的問題的人用的。我已經(jīng)警告過你了。1.2風(fēng)格簡(jiǎn)介這樣一些文本或許會(huì)出現(xiàn)在你的屏幕上:一個(gè)文件名,或是像一個(gè)命令或命令的選項(xiàng)一樣可以直接被鍵入的東西(如果你看到的是一個(gè)純文本文件,這看起來沒有什么不同)。命令和其他的輸入經(jīng)常被引用(用符號(hào)),這會(huì)引起下面的典型標(biāo)點(diǎn)問題:如果這樣的一項(xiàng)出現(xiàn)在一個(gè)被引用的句子的結(jié)尾,人們通常會(huì)和這個(gè)命令一起鍵入一個(gè)“.”號(hào)。因?yàn)槊绹?guó)人的引用習(xí)慣是把分段號(hào)放在引用符號(hào)的里面。即使常識(shí)(不幸的是,這里假設(shè)這個(gè)“常識(shí)”被用在所謂的美國(guó)人的引用習(xí)慣中)告訴我們應(yīng)當(dāng)分出這個(gè)標(biāo)點(diǎn),很多人還是不會(huì)記得。所以我在這種情況下會(huì)把它放在引號(hào)的外面,換句話說,當(dāng)說明需要鍵入“make config”時(shí),我會(huì)寫“make config”,而不是“make config.”2 重要的問題及其答案2.1內(nèi)核到底是干什么的?Unix的內(nèi)核在你的硬件設(shè)備和程序之間擔(dān)當(dāng)著調(diào)節(jié)員的工作。首先,它為正在運(yùn)行的程序(進(jìn)程)實(shí)現(xiàn)或安排內(nèi)存管理,并確保它們都能公平(或者不公平,如果你喜歡的話)地分享處理器的時(shí)間。另外,它為程序提供一個(gè)友好的、十分方便的接口來和硬件對(duì)話。內(nèi)核的功能當(dāng)然比這些要多,但這些基本的功能是必須知道的。2.2為什么我想要升級(jí)我的內(nèi)核?更新的內(nèi)核一般會(huì)提供訪問更多種類的硬件的能力(那是因?yàn)樗鼈冇懈嗟脑O(shè)備驅(qū)動(dòng)程序),它們可以有更好的進(jìn)程管理,能夠比舊的內(nèi)核運(yùn)行的更快,也能夠比舊的內(nèi)核運(yùn)行的更穩(wěn)定,而且它們能夠改進(jìn)舊版本的一些愚蠢的錯(cuò)誤。大多數(shù)人是為因?yàn)樾枰O(shè)備的驅(qū)動(dòng)程序和對(duì)錯(cuò)誤的改進(jìn)而升級(jí)內(nèi)核。2.3新的內(nèi)核支持什么樣的硬件?請(qǐng)看硬件的幫助手冊(cè)。你也可以看看Linux內(nèi)核源碼中的“config.in”文件或者在你嘗試“make config”的時(shí)候找出來,它會(huì)顯示出正式的內(nèi)核發(fā)行版本支持的全部硬件,但并不是Linux支持的所有設(shè)備。很多通用的設(shè)備驅(qū)動(dòng)程序(例如PCMCIA驅(qū)動(dòng)和一些磁帶機(jī)驅(qū)動(dòng))是單獨(dú)維護(hù)和發(fā)布的可加載模塊。2.4我需要什么版本的gcc和libc?Linus會(huì)在Linux源代碼包含的readme文件中推薦gcc的版本,如果你沒有這個(gè)版本,所推薦版本的gcc中的文檔會(huì)告訴你是否需要升級(jí)你的libc,這并不是一個(gè)困難的過程,但根據(jù)說明來操作十分重要。2.5什么是可加載模塊?它們是不直接鏈接(包含)在內(nèi)核中的內(nèi)核代碼片斷。一個(gè)模塊單獨(dú)編譯,并可以在幾乎任何時(shí)間被插入到正在運(yùn)行的內(nèi)核中或是從內(nèi)核中刪除。由于其靈活性,它現(xiàn)在是編寫某些內(nèi)核特性代碼的首選方式。很多流行的設(shè)備驅(qū)動(dòng)程序,例如PCMCIA驅(qū)動(dòng)程序和QIC-80/40 磁帶機(jī)驅(qū)動(dòng)程序,都是可加載模塊。2.6我需要多大的磁盤空間?這取決于你自己特定的系統(tǒng)配置。首先,2.2.9版本的Linux源代碼壓縮后大約有14MB,很多時(shí)候在解包后仍然保持這個(gè)大小。在解壓縮并進(jìn)行一個(gè)中等程度的配置后,它將另外占去67MB的空間。2.7這需要花費(fèi)多少時(shí)間?在更新的機(jī)器上,編譯所花費(fèi)的時(shí)間要明顯少于舊的機(jī)器,一臺(tái)帶有高速磁盤的AMD K6-2/300計(jì)算機(jī)編譯2.2.x版本的內(nèi)核大約需要幾分鐘,至于老式的奔騰計(jì)算機(jī)、486、386等,如果你打算進(jìn)行編譯的話,需要做好等待的準(zhǔn)備,可能是幾小時(shí),甚至幾天。3 如何實(shí)際配置一個(gè)內(nèi)核3.1獲得源代碼你可以從這個(gè)ftp站點(diǎn)上的/pub/linux/kernel/vx.y目錄下匿名得到源代碼,其中x.y是版本號(hào)(例如2.2)。正如前面提到的,以奇數(shù)結(jié)尾的是開發(fā)版本,可能是不穩(wěn)定的。它們被加上linux-x.y.z.tar.gz的標(biāo)簽,其中x.y.z是版本號(hào),這個(gè)網(wǎng)站也提供由bzip2程序壓縮的.bz2后綴名的文件(這些文件更小,在傳輸?shù)臅r(shí)候所花費(fèi)的時(shí)間更少)。最好使用的ftp地址,其中xx是國(guó)家代碼;例如是奧地利的地址,而是美國(guó)的地址。3.2將源代碼解包以root用戶身份登陸,并用cd命令切換到/usr/src目錄下,如果你在當(dāng)初安裝Linux的時(shí)候安裝了源代碼(像大多數(shù)情況一樣),這里會(huì)有一個(gè)叫做“l(fā)inux”的目錄包含整個(gè)原有的源代碼樹。如果你有足夠的硬盤空間又想保證安全,先保存一下這個(gè)目錄。一個(gè)好辦法是搞清楚你當(dāng)前系統(tǒng)上運(yùn)行的內(nèi)核的版本并據(jù)此把目錄重新命名?!皍name -r”命令可以打印出當(dāng)前的內(nèi)核版本號(hào)。因此如果“uname -r”命令顯示為“1.0.9”,你需要將目錄名(使用“mv”命令)由“l(fā)inux”改為“l(fā)inux-1.0.9”。如果你完全不顧后果,那就把整個(gè)目錄清除掉。無論如何,要保證在你解壓縮整個(gè)源代碼包之前,/user/src目錄下沒有“l(fā)inux”這個(gè)子目錄。現(xiàn)在,在/usr/src目錄下,用“tar zxpvf linux-x.y.z.tar.gz”命令將源代碼包解開(如果你得到的是一個(gè)以.tar為后綴名而后面沒有.gz的文件,則使用“tar xpvf linux-x.y.z.ta”命令),源代碼的內(nèi)容將被展開。當(dāng)解壓完成后,/usr/src目錄下將生成一個(gè)新的“l(fā)inux”目錄。用“cd”命令切換到該目錄下,瀏覽一下“README”文件,其中會(huì)有一段名為“安裝內(nèi)核”的內(nèi)容。在適當(dāng)?shù)臅r(shí)候按這里的步驟執(zhí)行符號(hào)鏈接必須合適,所有舊的.o文件都已經(jīng)刪除,等等。如果你有一個(gè).bz2后綴名的文件和bzip2程序(讀讀http:/www.muraroa.demon.co.uk/上的有關(guān)內(nèi)容),執(zhí)行下面的命令:bz2cat linux-x.y.z.tar.bz2 | tar xvf -3.3配置內(nèi)核注意:這里的部分內(nèi)容是對(duì)Linus的README文件中類似部分的重復(fù)和澄清。在/usr/src/linux目錄下執(zhí)行“make config”命令將啟動(dòng)一個(gè)配置腳本,詢問你很多內(nèi)容。這需要有bash,所以先確認(rèn)你的bash是/bin/bash、/bin/sh或者$BASH。但是,有一些比“make config”好的多的選擇,你會(huì)發(fā)現(xiàn)它們用起來更加方便和舒服。“make menuconfig”可能是使用最廣泛的。不管你選擇使用哪種方式,最好首先熟悉一下界面,因?yàn)槟銜?huì)發(fā)現(xiàn)它的發(fā)展比你想象中還要快。對(duì)于在X window下運(yùn)行的系統(tǒng),如果裝有TK的話可以嘗試“make xconfig”命令?!癿ake menuconfig”是為那些裝有(n)curses而且更喜歡文本界面菜單的人準(zhǔn)備的。這些界面具有更加清晰的優(yōu)點(diǎn):如果你在配置過程中出現(xiàn)了錯(cuò)誤的選擇,只需要返回去把它們改正就可以了。在“make menuconfig”和“make xconfig”方式下,配置選項(xiàng)是按層次顯示的。你已經(jīng)準(zhǔn)備好回答這些問題,通常是使用“y”(yes)或“n”(no)。設(shè)備驅(qū)動(dòng)程序還特別有一個(gè)“m”的選項(xiàng),它的意思是“模塊”。這意味著系統(tǒng)會(huì)編譯它,但并不直接編進(jìn)內(nèi)核中,而是作為一個(gè)可加載的模塊。一個(gè)更有趣的方式是把它描述為“maybe”。一些更顯然和不重要的選項(xiàng)并沒有在這里提到,其他一些內(nèi)容的簡(jiǎn)單介紹可以參見“其他配置選項(xiàng)”部分。用空格鍵可以進(jìn)行段落跳轉(zhuǎn)。在2.0.x及以后的版本中,有了一個(gè)“?”選項(xiàng),可以對(duì)配置參數(shù)進(jìn)行簡(jiǎn)要的描述。那里的信息應(yīng)當(dāng)是最新的,這里列出了一些重要的特性,它們位于什么層次,和一些簡(jiǎn)單的描述。內(nèi)核的數(shù)學(xué)運(yùn)算模擬(處理器種類和特性)如果你沒有數(shù)學(xué)協(xié)處理器(只有一個(gè)單獨(dú)的386或是486SX),你需要在此回答“y”。如果你有了協(xié)處理器卻仍然回答“y”也不用太擔(dān)心協(xié)處理器仍然會(huì)被使用,而模擬將被忽略,對(duì)任何較新的處理器,這里的回答都是no,但即使你不小心回答了yes也不必?fù)?dān)心,如果不需要的話,它是不會(huì)被使用的。增強(qiáng)型(MFM/RLL)硬盤和IDE硬盤/光驅(qū)支持(塊設(shè)備)你可能需要支持這些;這意味著內(nèi)核需要支持大部分人都會(huì)有的標(biāo)準(zhǔn)的PC硬盤。這個(gè)驅(qū)動(dòng)并不包括SCSI驅(qū)動(dòng),它們很快將在配置中被引入。你將被問到關(guān)于“old disk-only”和“new IDE”驅(qū)動(dòng)的情況,你需要從二者中選擇一個(gè)。它們的主要區(qū)別是“old disk-only”支持在一個(gè)接口上連接兩塊硬盤,而“new IDE”支持二級(jí)接口和IDE/ATAPI光驅(qū)的驅(qū)動(dòng)。新的驅(qū)動(dòng)比老的要大4KB,而且應(yīng)當(dāng)是“改進(jìn)的”。這意味著除了包含不同數(shù)量的問題以外,它會(huì)改進(jìn)你的硬盤的性能,特別是如果你有更新的(EIDE類型)硬件的話。網(wǎng)絡(luò)設(shè)置(通用設(shè)置)在原理上,只有你的機(jī)器連接到像因特網(wǎng)之類的網(wǎng)絡(luò)上,或者你打算使用SLIP、PPP、term等方式撥號(hào)連接因特網(wǎng),你才需要在這里回答“y”。然而由于很多軟件包(比如X window系統(tǒng))需要有網(wǎng)絡(luò)支持,即使你并沒有真正連接網(wǎng)絡(luò),你也需要在這里回答“y”。稍后,你將被問到是否支持TCP/IP網(wǎng)絡(luò);同樣的,如果你不能完全確定的話,回答“y”。System V IPC (通用設(shè)置)IPC(進(jìn)程間通信)的一個(gè)最好的定義在Perl書籍的術(shù)語表中。這毫不奇怪,一些Perl的程序員利用它使得進(jìn)程間能夠互相對(duì)話,就像很多其他的軟件包一樣(比如著名的DOOM)。所以除非你確切的知道自己在干什么,否則回答“n”不是一個(gè)好主意。處理器類型(處理器種類和特性)(在舊版的內(nèi)核中:使用 m486標(biāo)記啟動(dòng)486特效的優(yōu)化)傳統(tǒng)上,該編譯選項(xiàng)會(huì)為特殊的處理器做某些優(yōu)化。這樣的內(nèi)核在別的芯片上也會(huì)正常工作,但它可能會(huì)更大一些。但是在更新的內(nèi)核中就不一定了,因此你需要輸入你編譯的內(nèi)核所對(duì)應(yīng)的處理器類型。一個(gè)“386”的內(nèi)核可以在任何的機(jī)器上工作。SCSI支持如果你有SCSI設(shè)備,回答“y”。它將會(huì)提示你一些進(jìn)一步的信息,例如對(duì)光驅(qū)、硬盤、或是你有的其他SCSI適配器的支持。進(jìn)一步的細(xì)節(jié)請(qǐng)參見SCSI的幫助文檔。網(wǎng)絡(luò)設(shè)備支持如果你有一個(gè)網(wǎng)卡,或者你想使用SLIP、PPP或是并口適配器連接因特網(wǎng),回答“y”。配置腳本會(huì)詢問你有何種網(wǎng)卡,使用什么協(xié)議。文件系統(tǒng)之后配置腳本會(huì)問你是否需要支持如下的文件系統(tǒng):標(biāo)準(zhǔn)(minix)更新的發(fā)行版本不會(huì)創(chuàng)建minix文件系統(tǒng),而且很多人也不用它,但最好還是把這項(xiàng)配置加上。一些磁盤恢復(fù)程序會(huì)用到它,而且很多軟盤可能還有minix的文件系統(tǒng),因?yàn)閙inix文件系統(tǒng)用于軟盤較為可靠。Second extended這是Linux的標(biāo)準(zhǔn)文件系統(tǒng),你幾乎可以肯定會(huì)有它,因此選擇“y”。Msdos如果你想使用你的MS-DOS硬盤分區(qū),或者掛載MS-DOS格式的軟盤,選擇“y”。還有其他很多可以使用的不同的文件系統(tǒng)。/proc(我猜它來自貝爾實(shí)驗(yàn)室)。硬盤上并不存在proc文件系統(tǒng)。這是一個(gè)面向內(nèi)核和進(jìn)程的文件系統(tǒng)接口,很多進(jìn)程列表使用它。有時(shí)可以嘗試使用“cat /proc/meminfo”或“cat /proc/devices”命令。有些shell(特別是rc)使用/proc/self/fd(在其他系統(tǒng)里叫做/dev/fd)進(jìn)行I/O。你在這里基本上一定會(huì)選擇“y”;很多重要的linux工具依賴它。NFS如果你的機(jī)器依賴于網(wǎng)絡(luò),而且你想通過NFS使用其他計(jì)算機(jī)系統(tǒng)上的文件系統(tǒng),選擇“y”。ISO9660存在于大多數(shù)CD-ROM上,如果你有一個(gè)光驅(qū)并想在Linux下使用它,選擇“y”。但我不知道我需要什么文件系統(tǒng)!好吧,輸入“mount”,輸出一般會(huì)像下面這樣:bash# 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”的是文件系統(tǒng)的類型。在這個(gè)例子中,我的“/”和“/usr”文件系統(tǒng)都是“second extended”。我正在使用“/proc”,這是一個(gè)掛載的軟盤,使用msdos文件系統(tǒng)。如果你當(dāng)前的“/proc”是可用的,你可以試試“cat /proc/filesystems”命令;它會(huì)列出你當(dāng)前內(nèi)核的文件系統(tǒng)。對(duì)那些很少用到的、不重要的文件系統(tǒng)進(jìn)行配置會(huì)造成內(nèi)核的膨脹??梢詤⒁娔K部分來避免這種情況,看看“缺陷”部分來了解為什么內(nèi)核膨脹是不好的。字符設(shè)備這里,你啟動(dòng)了你的打印機(jī)(我是指并口打印機(jī))、總線鼠標(biāo)、PS/2接口鼠標(biāo)(很多筆記本電腦為它們內(nèi)部的導(dǎo)航球使用PS/2接口鼠標(biāo)的協(xié)議)的驅(qū)動(dòng),一些磁帶設(shè)備驅(qū)動(dòng),和很多這樣的“字符設(shè)備”的驅(qū)動(dòng)。在適當(dāng)?shù)那闆r下選擇“y”。注意:gpm是一個(gè)可以讓鼠標(biāo)在X window系統(tǒng)以外的虛擬控制臺(tái)之間進(jìn)行復(fù)制和粘貼的程序。如果你有一個(gè)串口鼠標(biāo)最好,因?yàn)樗梢院蚗 window很好的共存,但是如果你使用其他類型的鼠標(biāo)就需要一點(diǎn)技巧了。聲音如果你很想聽到biff程序發(fā)聲的話,選擇“y”。你可以告訴配置程序關(guān)于你的聲卡的全部信息(關(guān)于聲卡配置的一點(diǎn)注意:當(dāng)它詢問你是否需要安裝完整版本的驅(qū)動(dòng)程序時(shí),你可以回答“n”而只選擇你認(rèn)為需要的特性,以節(jié)省一些內(nèi)核存儲(chǔ)空間)。如果你對(duì)聲卡的支持很關(guān)心,可以看看.uk/OSS/上的免費(fèi)驅(qū)動(dòng)和/上商用的Open Sound System。其他配置選項(xiàng)這里并沒有列出所有的配置選項(xiàng),因?yàn)樗鼈冏兓锰旎蚴翘@然(例如,對(duì)3Com 3C509的支持只需要單獨(dú)編譯這塊網(wǎng)卡的驅(qū)動(dòng)程序)。這里有所有選項(xiàng)的一個(gè)相當(dāng)全面的列表(以及把它們加入配置腳本中的方法),它由??速悹柌疇柼兀ǎ┌l(fā)起并維護(hù),是一個(gè)在線的幫助文件。也可以在你的2.0以后版本的Linux內(nèi)核源代碼樹中的Documentation/Configure.help文件中找到。內(nèi)核堆砌來自Linus的README文件“內(nèi)核堆砌”的配置細(xì)節(jié)通常導(dǎo)致內(nèi)核變大或變慢(或兩者兼有),甚至可能由于配置一些程序去積極的中斷有問題的代碼以發(fā)現(xiàn)內(nèi)核的問題而造成系統(tǒng)的不穩(wěn)定。因此當(dāng)你被問到需要一個(gè)“產(chǎn)品版”的內(nèi)核的時(shí)候,應(yīng)當(dāng)回答“n”。3.4現(xiàn)在呢?(Makefile)在你配置完成后,一條信息會(huì)告訴你內(nèi)核已經(jīng)被配置完成,并“檢查頂層Makefile文件中的額外配置”等等。因此,看看Makefile。你可能不需要去修改它,但看看總沒有壞處。當(dāng)新的內(nèi)核配置好以后,你也可以用“rdev”命令去修改它的選項(xiàng)。如果你在看這個(gè)文件的時(shí)候被弄糊涂了,也不需要太擔(dān)心。4 編譯內(nèi)核4.1清除與依賴當(dāng)配置腳本完成后,它也會(huì)告訴你去“make dep”和(可能有)“clean”。所以,執(zhí)行“make dep”,這會(huì)確保所有的依賴關(guān)系,比如頭文件,設(shè)置正確。這不會(huì)花費(fèi)很多時(shí)間,除非你的電腦本來就很慢。對(duì)于較早版本的內(nèi)核,你需要在結(jié)束的時(shí)候執(zhí)行一下“make clean”。它會(huì)刪除原有版本留下的目標(biāo)文件和其他的一些東西。無論如何,在嘗試重新編譯內(nèi)核之前都不要忘記這一步。4.2編譯時(shí)間在關(guān)聯(lián)和清除完成后,你現(xiàn)在可以執(zhí)行“make bzImage”或“make bzdisk”(這是需要花費(fèi)較多時(shí)間的一步)?!癿ake bzImage”命令將編譯內(nèi)核,并在arch/i386/boot目錄下留下一個(gè)名為“bzImage”的文件(和其他文件一起),這是新生成的壓縮內(nèi)核。“make bzdisk”完成同樣的事情,但是把新的bzImage文件放在你插進(jìn)驅(qū)動(dòng)器A:里的軟盤上?!癰zdisk”是用于測(cè)試新內(nèi)核的相當(dāng)方便的手段,如果它崩潰了(或者只是工作不正常),只需要拔掉軟盤并從你的舊內(nèi)核啟動(dòng)就行了。如果你不小心刪除了你的內(nèi)核(或是發(fā)生了其他類似的可怕事情),它也可以很方便的啟動(dòng)。當(dāng)你把一個(gè)磁盤上的內(nèi)容轉(zhuǎn)移到另一個(gè)磁盤上時(shí),你也可以用它來安裝新的系統(tǒng)(除此以外還有很多!現(xiàn)在你覺得如何呢?)。所有較新的內(nèi)核都是壓縮的,因此在名字前面有“bz”。一個(gè)壓縮的內(nèi)核在執(zhí)行的時(shí)候會(huì)自動(dòng)解壓縮。在原先的內(nèi)核中,你沒有生成bzImage文件的選項(xiàng),只有一個(gè)簡(jiǎn)單的zImage。這個(gè)選項(xiàng)現(xiàn)在仍然可以使用,但是會(huì)使新的內(nèi)核和代碼一樣大,現(xiàn)在基本上都必須生成bzImage了,因?yàn)榕f的方法不能處理現(xiàn)在這種過于龐大的內(nèi)核。4.3其他可以make的東西“make mrproper”會(huì)做一些比“clean”更多的事情,這有時(shí)是必要的。你可能希望對(duì)每一個(gè)補(bǔ)丁包都這么做?!癿ake mrproper”也會(huì)刪除你的配置文件,因此如果你覺得它(.config文件)有價(jià)值的話,可能想對(duì)它做個(gè)備份?!癿ake oldconfig”會(huì)嘗試根據(jù)一個(gè)舊的配置文件去配置內(nèi)核,它會(huì)為你執(zhí)行“make config”的過程。如果你還沒有編譯過內(nèi)核或是沒有舊的配置文件,那你可能就無法使用它,因?yàn)槟愫芸赡芟胍薷哪J(rèn)的配置。請(qǐng)參見模塊部分描述“make modules”的章節(jié)。4.4安裝內(nèi)核在你有了一個(gè)似乎能夠按照你的要求工作的新內(nèi)核后,你應(yīng)當(dāng)安裝它。大多數(shù)人使用LILO(Linux 裝載器)來完成這個(gè)事情。“make bzlilo”命令會(huì)安裝內(nèi)核,在上面運(yùn)行l(wèi)ilo,并為你做好啟動(dòng)的準(zhǔn)備,但必須在lilo在你的系統(tǒng)上按照下面的方式配置好以后:內(nèi)核是/vmlinuz,lilo在/sbin目錄下,并和你的lilo配置文件(/etc/lilo.conf)一致。另外,你必須立即使用lilo。這是一個(gè)很容易安裝和使用的軟件包,但是它的配置卻容易導(dǎo)致人們困惑。瀏覽一下配置文件(舊版本的/etc/lilo/config或是新版的/etc/lilo.conf),看看當(dāng)前的設(shè)置是什么。配置文件如下所示:image = /vmlinuz label = Linux root = /dev/hda1“image =”被設(shè)定為當(dāng)前安裝的內(nèi)核。大多數(shù)人使用/vmlinuz?!發(fā)abel”是lilo用來確定需要啟動(dòng)何種內(nèi)核或是操作系統(tǒng)的,而“root”是所指定的操作系統(tǒng)的“/”目錄。對(duì)你的舊內(nèi)核做好備份,把你剛才生成的bzImage文件復(fù)制到指定的位置(如果你使用的是/vmlinuz,則使用“cp bzImage /vmlinuz”命令)。然后重新執(zhí)行l(wèi)ilo在新的系統(tǒng)上,你可以只運(yùn)行“l(fā)ilo”,但是在比較老的版本上,你可能需要執(zhí)行/etc/lilo/install或者甚至是/etc/lilo/lilo -C /etc/lilo/config。如果你想了解更多關(guān)于LILO的配置,可以從你喜歡的ftp服務(wù)器上獲取最新的版本并按照說明執(zhí)行。要運(yùn)行你硬盤上的一個(gè)舊的內(nèi)核(這是另一個(gè)在你的新內(nèi)核出現(xiàn)問題時(shí)進(jìn)行補(bǔ)救的辦法),把下面這行LILO的配置文件中所有的(包含)“image = xxx”復(fù)制到文件的最底部,然后把“image = xxx”改成“image = yyy”,其中“yyy”是你保存你的備份內(nèi)核的完整的路徑名。然后把“l(fā)abel = zzz”改成“l(fā)abel = linux-backup”并重新運(yùn)行l(wèi)ilo。你可能需要在配置文件中加上一行“delay=x”,其中x是以十分之一秒為單位的時(shí)間,它告訴LILO在啟動(dòng)前需要等待多長(zhǎng)時(shí)間,因此你可以打斷它(例如用shift鍵),并輸入備份的啟動(dòng)映像文件的名字(如果出現(xiàn)了什么異常情況的話)。5為內(nèi)核打補(bǔ)丁5.1應(yīng)用一個(gè)補(bǔ)丁對(duì)內(nèi)核不斷的升級(jí)是以補(bǔ)丁包的形式發(fā)布的。例如,你有一個(gè)1.1.45版本的內(nèi)核,而且你注意到有一個(gè)該版本的“patch46.gz”補(bǔ)丁包,這意味著你可以通過使用這個(gè)補(bǔ)丁包升級(jí)到1.1.46版。你可能首先想對(duì)內(nèi)核樹進(jìn)行備份(“make clean”之后執(zhí)行“cd /usr/src; tar zcvf old-tree.tar.gz linux”會(huì)為你生成一個(gè)壓縮的歸檔文件)。因此,繼續(xù)我們上面的例子。我們假設(shè)你在/usr/src目錄下有“patch46.gz”文件。切換到/usr/src目錄下執(zhí)行“zcat patch46.gz | patch -p0”(或者是“patch -p0 patch46”,如果補(bǔ)丁包不是壓縮的)。你會(huì)看到很多內(nèi)容快速掠過(或者是慢慢滑過,如果你的系統(tǒng)真的是那么慢的話),告訴你正在進(jìn)行修改,不管它是否成功。通常這些動(dòng)作執(zhí)行的非??煲灾劣谀銇聿患叭ラ喿x,而且你也不太確定它是否被執(zhí)行,因此你可能想對(duì)patch命令使用-s參數(shù) ,它只會(huì)報(bào)告錯(cuò)誤信息(這樣你就不會(huì)得到像“嘿,我的電腦正在進(jìn)行一些改變”的感覺,但你可能更喜歡這樣).為了尋找那些進(jìn)行的并不順利的部分,切換到/usr/src/linux目錄下,查找以.rej為擴(kuò)展名的文件。某些版本的補(bǔ)丁包(教老的版本可能是在低等的文件系統(tǒng)上編譯的)會(huì)把這些錯(cuò)誤記錄保存在以“#”為后綴名的文件里。你可以使用“find”命令來幫你查找:find . -name *.rej -print它會(huì)在標(biāo)準(zhǔn)輸出上打印出當(dāng)前目錄及其任何子目錄下以.rej為后綴名的所有文件的名稱。如果一切順利,按照第三和第四部分的描述,執(zhí)行“make clean”、“config”和“dep”。patch 命令有很多參數(shù),如前所述,patch s將抑止除了錯(cuò)誤信息以外的所有其他信息,如果你把內(nèi)核源代碼放在除了/usr/src/linux以外的別的某個(gè)地方,patch -p1(在哪個(gè)目錄下)會(huì)干脆的進(jìn)行修補(bǔ)。patch的其他參數(shù)在幫助手冊(cè)中有詳細(xì)的列出。5.2如果出現(xiàn)了問題(注意:該部分提到的主要是舊版本的內(nèi)核)最常見的問題是當(dāng)patch修改一個(gè)叫“config.in”的文件的時(shí)候它看起來有問題,因?yàn)槟愀淖兞死锩娴膮?shù)去適應(yīng)你的機(jī)器。這已經(jīng)被注意到了,但如果你使用較老的版本的話仍有可能遇到這個(gè)問題。要解決它,看一下config.in.rej文件,看看原始的補(bǔ)丁包里還有些什么,進(jìn)行的改動(dòng)都會(huì)在行首用“+”和“-”特別標(biāo)記出來。看看它周圍的行,記住它們是設(shè)置成“y”還是“n”。然后編輯config.in文件,在合適的地方把“y”改成“n”,把“n”改成“y”。執(zhí)行patch -p0 config.in.rej如果它報(bào)告成功(沒有錯(cuò)誤),那你可以繼續(xù)進(jìn)行配置和編譯。config.in.rej文件仍然存在,但你已經(jīng)可以將它刪除了。如果你遇到更進(jìn)一步的問題,你可能是沒有按照次序安裝補(bǔ)丁包,如果補(bǔ)丁包說“發(fā)現(xiàn)原先應(yīng)用的補(bǔ)丁:采用 R?”,你可能在安裝一個(gè)在你當(dāng)前版本之前的補(bǔ)丁包;如果你回答“y”,它會(huì)試圖降低你的源代碼,這將很有可能失?。贿@樣,你就需要得到一個(gè)全新的源代碼樹。要返回修補(bǔ)之前的狀態(tài),在原先的補(bǔ)丁包上執(zhí)行“patch -R”命令。當(dāng)打補(bǔ)丁真的出現(xiàn)問題時(shí),最好的辦法是用一個(gè)干凈的、剛解壓的源代碼樹(例如,從linux-x.y.z.tar.gz文件中解壓出的代碼之一)重新開始。5.3 去掉.orig文件在打過很多補(bǔ)丁包后,.orig文件就會(huì)堆積起來。例如我的一個(gè)1.1.51版本的代碼樹曾經(jīng)在1.1.48版本時(shí)被清理過,刪除.orig文件節(jié)約了大約半個(gè)MB的硬盤空間。find . -name *.orig -exec rm -f ;命令將會(huì)為你處理這些事情。某些版本的補(bǔ)丁包會(huì)使用“”來代替.orig文件.也有更好的方法來對(duì)付.orig文件,這依賴于GNU xargs:find . -name *.orig | xargs rm或者一種“相當(dāng)安全但有些冗長(zhǎng)的”辦法:find . -name *.orig -print0 | xargs -null rm -5.4其他的補(bǔ)丁除了Linus發(fā)布的補(bǔ)丁以外,也有一些其他的補(bǔ)?。ㄎ曳Q之為“非標(biāo)準(zhǔn)的”)。如果你應(yīng)用它們,Linus發(fā)布的補(bǔ)丁可能無法正常使用,你不得不將它們?nèi)サ?、修改源代碼或補(bǔ)丁包、安裝一個(gè)新的源代碼樹,或者上述幾種方法一起使用。這會(huì)讓人十分沮喪。因此如果你不想修改源代碼(可能會(huì)造成非常壞的后果),那么在應(yīng)用Linus發(fā)布的補(bǔ)丁包之前將這些非標(biāo)準(zhǔn)的補(bǔ)丁包卸載,或者直接安裝一個(gè)新的源代碼樹。然后你看看非標(biāo)準(zhǔn)的補(bǔ)丁包是否可以繼續(xù)使用。如果不能,你要么被舊的內(nèi)核纏住,去擺弄補(bǔ)丁包或是源代碼以使得它們能用,要么就等待(可能是乞求)一個(gè)新版本的補(bǔ)丁包出現(xiàn)。不是標(biāo)準(zhǔn)發(fā)布的補(bǔ)丁包的通用性究竟如何?你可能曾經(jīng)聽過它們。我曾經(jīng)因?yàn)橛憛掗W爍的光標(biāo)而為我的虛擬控制臺(tái)使用了不閃爍的補(bǔ)丁包(這個(gè)補(bǔ)丁包現(xiàn)在(或者至少曾經(jīng))經(jīng)常為新版本的內(nèi)核而升級(jí))。然而,隨著大多數(shù)設(shè)備驅(qū)動(dòng)程序作為可加載的模塊被開發(fā)出來,這種“非標(biāo)準(zhǔn)的”補(bǔ)丁包出現(xiàn)的頻率已經(jīng)顯著減少了。6附加軟件包你的Linux內(nèi)核有很多并沒有在內(nèi)核源代碼樹中說明的特性。這些特性是通過外部的軟件包來加以利用的。這里列出了其中一些最常見的。6.1 kbdLinux的控制臺(tái)或許有比它應(yīng)有的更多的特性。其中包括轉(zhuǎn)換字體的能力、重新映射你的鍵盤、切換顯示方式(在較新的內(nèi)核下)等等。kbd軟件包中的程序可以讓用戶完成這些功能,添加多種字體、為幾乎所有的鍵盤進(jìn)行鍵盤映射。它能在存放Linux內(nèi)核源代碼的站點(diǎn)找到。6.2util-linux里克費(fèi)思()收集了大量的Linux工具,稱之為util-linux。它們現(xiàn)在由安德萊斯布魯維爾維護(hù)(util-linuxmath.uio.no)。它們可以從上的/pub/Linux/system/misc目錄下匿名得到,其中包含了和內(nèi)核有關(guān)的setterm、rdev和ctrlaltdel等許多程序。按照里克所說,不要不假思索就安裝,你并不需要軟件包里的所有東西,如果你真的這么做的話,很可能造成嚴(yán)重的問題。6.3hdparam和許多軟件包一樣,它曾經(jīng)是內(nèi)核的一個(gè)補(bǔ)丁包和支持程序。這個(gè)補(bǔ)丁包把它加入到了官方內(nèi)核中,而用于優(yōu)化和操作你的硬盤的程序則被單獨(dú)發(fā)布。6.4gpmgpm是general purpose mouse的縮寫。這個(gè)程序允許你使用大多數(shù)種類的鼠標(biāo)在兩個(gè)控制臺(tái)之間進(jìn)行復(fù)制和粘貼以及其他的一些操作。7一些缺陷7.1make clean如果你的新內(nèi)核在例行的升級(jí)后確實(shí)出現(xiàn)了奇怪的現(xiàn)象,問題可能在于你在編譯新內(nèi)核之前忘記了make clean。出現(xiàn)的癥狀可能是系統(tǒng)直接崩潰、奇怪的I/O問題等等各種不同的表現(xiàn)。同時(shí)確定你執(zhí)行了make dep。7.2龐大而緩慢的內(nèi)核如果你的內(nèi)核占用了大量的內(nèi)存、過于龐大、而且/或者即使你在最新的Quadbazillium-III/4400機(jī)器上運(yùn)行卻還是好像永遠(yuǎn)編譯不完一樣,你很可能配置了很多不需要的組件(設(shè)備驅(qū)動(dòng)程序、文件系統(tǒng)等等)。如果你不用它就不要配置它,因?yàn)樗鼤?huì)占用內(nèi)存。內(nèi)核膨脹最明顯的癥狀是在內(nèi)存和硬盤之間大量進(jìn)行交換。如果你的硬盤不是那種老式的富士通“鷹”系列卻還是在關(guān)閉的時(shí)候發(fā)出大量的那種類似噴氣機(jī)著陸的噪音,那你應(yīng)當(dāng)檢查一下你內(nèi)核的配置。你可以通過統(tǒng)計(jì)你的機(jī)器所有的內(nèi)存數(shù)量再減去/proc/meminfo中“total mem”的數(shù)量或者是“free”命令的輸出結(jié)果來得到當(dāng)前內(nèi)核占用了多少內(nèi)存。7.3并口不工作/我的打印機(jī)不工作PC機(jī)的配置選項(xiàng)是:首先,在“通用設(shè)置”目錄下選擇“并口支持”和“PC類硬件”,然后在“字符設(shè)備”目錄下,選擇“并口打印機(jī)支持”。然后是名字。Linux2.2和以前的版本在打印機(jī)設(shè)備的命名上有所不同。結(jié)果是如果你在舊版的內(nèi)核上有一個(gè)lp1,它在新內(nèi)核上可能就是lp0??梢杂谩癲mesg”命令或者瀏覽一下/var/log下的日志文件看看。7.4內(nèi)核無法編譯如果不能編譯,很可能是打補(bǔ)丁包失敗,或者你的源代碼不知為何被損壞。也可能是你的gcc版本不對(duì),或是被損壞了(例如,頭文件可能出錯(cuò))。確認(rèn)Linus在README文件中描述的符號(hào)鏈接設(shè)置的正確。一般來說,一個(gè)標(biāo)準(zhǔn)的內(nèi)核不能編譯,應(yīng)該是你的系統(tǒng)出現(xiàn)了一些嚴(yán)重的問題,可能需要重新安裝一些工具。在某些情況下,gcc可能因?yàn)橛布栴}而損壞。出錯(cuò)的信息一般是“xxx exited with signal 15”而且看起來非常神秘。我可能不會(huì)提到這些,除非它們一旦在我身上發(fā)生我有一些毀壞的緩存,編譯器偶爾會(huì)隨機(jī)的崩潰。如果你遇到這種問題,先試著重裝gcc。如果你在關(guān)閉了外部緩存,或是減少了內(nèi)存數(shù)量后把內(nèi)核編譯成功了,你或許會(huì)覺得很可疑。告訴別人他們的硬件有問題會(huì)讓他們困惑。好吧,我不再談這些了。這里有一個(gè)這方面的常見問題的解答在http:/www.bitwizard.nl/sig11/上。7.5新版本的內(nèi)核似乎不能啟動(dòng)你沒有運(yùn)行LILO,或者是它沒有正確配置。配置文件里的一個(gè)問題曾經(jīng)讓我困惑:它寫道“boot = /dev/hda1”而不是“boot = /dev/hda”(這一開始確實(shí)很討厭,但是一旦你有了一個(gè)正確的配置文件,你就不用再去修改它)。7.6你忘記運(yùn)行LILO,或是系統(tǒng)根本不能啟動(dòng)噢!現(xiàn)在你最好使用軟盤或光盤啟動(dòng),并準(zhǔn)備好一張可以啟動(dòng)的軟盤(就像“make bzdisk”實(shí)現(xiàn)的那樣)。你需要知道根文件系統(tǒng)(/)的位置和類型(比如second extended、minix)。在下面的例子里,你還需要知道你的/usr/src/linux下的代碼樹在什么文件系統(tǒng)上、它的類型、它被正常掛載到了什么位置。在下面的例子里,“/”文件系統(tǒng)是/dev/hda1,/usr/src/linux下的文件系統(tǒng)是/dev/hda3,正常掛載在/usr下。二者都是second extended型文件系統(tǒng)。在/usr/src/linux/arch/i386/boot下運(yùn)行的內(nèi)核叫bzImage。只要這里有一個(gè)可用的bzImage,就有可能把它用到新的軟盤上。另一個(gè)有可能工作得更好的方法(這取決于你當(dāng)初系統(tǒng)出錯(cuò)的特定原因)將在例子之后討論。首先,從一個(gè)boot/root刻錄盤或是恢復(fù)盤啟動(dòng),掛載上包含內(nèi)核映像的文件系統(tǒng):mkdir /mnt mount -t ext2 /dev/hda3 /mnt如果mkdir命令告訴你這個(gè)目錄已經(jīng)存在,那就直接忽略它。現(xiàn)在,切換到所使用的內(nèi)核映像所在的目錄下。注意到/mnt + /usr/src/linux/arch/i386/boot - /usr = /mnt/src/linux/arch/i386/boot向驅(qū)動(dòng)器A中放進(jìn)一張格式化的磁盤(不是你的啟動(dòng)磁盤!),把映像轉(zhuǎn)移到磁盤上,并把它配置為你的根文件系統(tǒng):cd /mnt/src/linux/arch/i386/boot dd if=bzImage of=/dev/fd0 rdev /dev/fd0 /dev/hda1切換到“/”目錄下,正常卸載/usr文件系統(tǒng): cd /umount /mnt你現(xiàn)在需要從軟盤上正常的重啟你的系統(tǒng)。在重啟后不要忘記運(yùn)行LILO(或者是其他你曾經(jīng)做錯(cuò)的事情)!正如前面提到的,還有一個(gè)常見的辦法。如果你恰巧在“/”目錄下有一個(gè)運(yùn)行中的內(nèi)核映像(例如/vmlinuz)。你可以用它做啟動(dòng)盤。假如上面的條件都滿足,而且我的內(nèi)核映像是/vmlinuz,上面的例子可以做下面的修改:把/dev/hda3改成/dev/hda1(“/”文件系統(tǒng)),把/mnt/src/linux 改成 /mnt,再把if=bzImage 改成 if=vmlinuz。注意到如何獲得/mnt/src/linux的說明可以忽略。在大的驅(qū)動(dòng)器上使用LILO(大于1024個(gè)柱面)會(huì)造成問題。看看LILO的簡(jiǎn)要幫助或是這方面的幫助文檔。7.7它說“warning: bdflush not running”這可能是一個(gè)嚴(yán)重的問題。從1.0以后的內(nèi)核版本開始(大概在1994年4月20日前后),一個(gè)會(huì)周期地清空文件系統(tǒng)緩存的叫做“update”的程序被升級(jí)或代替了。找到“bdflush”的源代碼(你應(yīng)當(dāng)?shù)侥惬@得內(nèi)核源代碼的地方去找)并安裝它(你可能希望在做這些事的時(shí)候你的系統(tǒng)運(yùn)行在舊的內(nèi)核上)。它會(huì)以“update”為名稱安裝自己。內(nèi)核在重啟之后應(yīng)該不會(huì)再出現(xiàn)問題了。7.8我的IDE/ATAPI光驅(qū)不能工作夠奇怪吧,很多人的ATAPI驅(qū)動(dòng)器不能工作,因?yàn)榭赡苡泻芏嘣驎?huì)造成這種問題。如果你的光驅(qū)是某個(gè)特定的IDE接口上唯一的設(shè)備,它必須被配置成“master”或“single”,估計(jì)這是最常見的錯(cuò)誤。創(chuàng)新實(shí)驗(yàn)室現(xiàn)在已經(jīng)把聲卡放在IDE接口里。然而這會(huì)導(dǎo)致一些有趣的問題。有些人只有一個(gè)接口可用,而很多人的主板上都有兩個(gè)IDE接口(通常在IRQ5),因此一個(gè)普遍的方法是把soundblaster聲卡接口設(shè)置成第三個(gè)IDE接口(據(jù)我所知是IRQ11)。這在那些不支持第三個(gè)IDE接口的1.2.x版本Linux里會(huì)造成問題(在1.3.x系列中開始支持了,但記住,那是一個(gè)開發(fā)版本,并且不是自動(dòng)檢測(cè)的)。在這個(gè)問題上,你有一些選擇。如果你已經(jīng)有了第二個(gè)IDE接口,只要你不在使用它或者它上面并沒有插上兩個(gè)設(shè)備就有機(jī)會(huì)。卸載聲卡的ATAPI驅(qū)動(dòng)程序,把它放在第二個(gè)接口上,然后你可以禁用聲卡接口以節(jié)省中斷。如果你沒有第二個(gè)接口,就把聲卡的接口(不是指聲卡的聲音部分)配置成IRQ15,第二個(gè)接口。它就會(huì)工作了。7.9系統(tǒng)對(duì)于陳舊的路徑需求的奇怪信息獲取新版的路徑程序和其他進(jìn)行路徑操作的程序,/usr/include/linux/route.h(/usr/src/linux下的一個(gè)文件)被改變了。7.10在1.2.0版本上防火墻不工作至少升級(jí)到1.2.1版本。7.11“不是一個(gè)壓縮的內(nèi)核映像文件”不要用/usr/src/linux下生成的vmlinux文件作啟動(dòng)映像, /arch/i386/boot/bzImage才是正確的文件。7.12升級(jí)到1.3.x版本后控制臺(tái)終端的問題把/etc/termcap下的控制臺(tái)設(shè)置文件中的“dumb”改成“l(fā)inux”。你可能需要增加一項(xiàng)terminfo。7.13內(nèi)核升級(jí)后似乎不能編譯Linux的內(nèi)核源代碼包含了大量的頭文件(以.h結(jié)尾的東西),標(biāo)準(zhǔn)的都放在/usr/include下被引用。它們一般像這樣被引用(其中xyzzy.h應(yīng)當(dāng)是/usr/include/linux下的一些東西)#include 通常在/usr/include下有一個(gè)叫做linux的鏈接指向你的內(nèi)核源代碼目錄下的include/linux(典型的系統(tǒng)是/usr/src/linux/include/linux)。如果這個(gè)鏈接不存在或是指向了錯(cuò)誤的地方,很多東西都不能被編譯。如果你認(rèn)為內(nèi)核源代碼占用了太多磁盤空間而刪掉了它們,這顯然是一個(gè)問題。另一個(gè)可能導(dǎo)致錯(cuò)誤的是文件許可;如果你的root用戶有一個(gè)標(biāo)記默認(rèn)不允許其他用戶看到這些文件,而你釋放內(nèi)核源代碼的時(shí)候又沒有使用“p”(文件保護(hù)模式)參數(shù),那些用戶就不能使用C編譯器。即使你使用“chmod”命令修改,也很容易重復(fù)釋放頭文件。你可以像當(dāng)初處理整個(gè)源代碼一樣進(jìn)行,只要加上一個(gè)額外的參數(shù):bash#tar zxvpf linux.x.y.z.tar.gz linux/include注意:“make config”會(huì)重新生成/usr/src/linux這個(gè)鏈接,如果它不存在的話。7.14更多的限制下面幾個(gè)命令的例子可能對(duì)那些想知道如何增加被內(nèi)核強(qiáng)加的軟件限制的人有用。echo 4096 /proc/sys/kernel/file-maxecho 12288 /proc/sys/kernel/inode-maxecho 300 400 500 /proc/sys/vm/freepages8升級(jí)到2.0.x、2.2.x版本的注意事項(xiàng)據(jù)介紹,2.0.x和2.2.x版本的內(nèi)核在內(nèi)核安裝上有相當(dāng)多的改變。2.0.x版本的內(nèi)核源代碼樹中的Documentation/Changes文件中包含了當(dāng)你要升級(jí)到這些版本時(shí)需要知道的信息。你很有可能需要升級(jí)一些關(guān)鍵的軟件包,例如gcc、libc和SysVInit,并修改一些系統(tǒng)文件,所以期待它吧。不必驚慌。9模塊可加載的內(nèi)核模塊能夠節(jié)約內(nèi)存并容易配置。模塊的使用范圍已經(jīng)擴(kuò)大到了文件系統(tǒng)、以太網(wǎng)網(wǎng)卡驅(qū)動(dòng)、磁帶機(jī)驅(qū)動(dòng)、打印機(jī)驅(qū)動(dòng)等等。9.1安裝模塊工具模塊工具可以在獲得內(nèi)核源代碼的地方用modutils-x.y.z.tar.gz的名字得到;選擇小于等于你當(dāng)前內(nèi)核等級(jí)的最高的補(bǔ)丁包,用“tar zxvf modutils-x.y.z.tar.gz”命令把它解壓縮,切換到所生成的目錄下(modutils-x.y.z),瀏覽一下README文件,找出安裝步驟(通常是很簡(jiǎn)單的,例如make install)?,F(xiàn)在你應(yīng)該在/sbin目錄下有了insmod、rmmod、ksyms、lsmod、genksyms、modprobe和depmod等程序。如果你喜歡,可以用insmod里的“hw”樣例驅(qū)動(dòng)程序測(cè)試一下這些工具。瀏覽子目錄下的INSTALL文件以獲取詳細(xì)信息。insmd程序向運(yùn)行的內(nèi)核中插入一個(gè)模塊。模塊通常以.o為擴(kuò)展名;上面提到的樣例驅(qū)動(dòng)程序就叫做drv_hello.o。因此要插入它,你需要輸入“insmod drv_hello.o”。要觀察內(nèi)核正在使用的模塊,可以用lsmod命令。它的輸出一般如下:bash#lsmod Module: #pages: Used by: drv_hello 1drv_hello是模塊的名稱,它占用一頁(4KB)內(nèi)存,目前沒有其他的內(nèi)核模塊依賴它。要卸載這個(gè)模塊,使用“rmmod drv_hello”命令。注意rmmod使用的是模塊的名稱,而不是文件的名稱。你可以從“l(fā)smod”命令的列表中找到它。其他模塊工具的作用在它們的幫助手冊(cè)中列出。9.2隨內(nèi)核發(fā)布的模塊在2.0.30版本內(nèi)核中,幾乎所有東西都可以成為可加載模塊。要使用它們,首先確定你沒有把它們配置到常規(guī)內(nèi)核中。也就是說,在“make config”的時(shí)候不要回答“y”。編譯一個(gè)新的內(nèi)核并用它來重新啟動(dòng)。然后再切換到/usr/src/linux,執(zhí)行“make modules”。這會(huì)編譯所有你沒有指定到內(nèi)核配置中的模塊,并在/usr/src/linux/modules中放置它們的鏈接。你可以在那個(gè)路徑下直接使用它們,或是運(yùn)行“make modules_install”來把它們安裝到/lib/modules/x.y.z,其中x.y.z是內(nèi)核的版本號(hào)。這在文件系統(tǒng)上特別方便。你可能不經(jīng)常使用minix或是msdos文件系統(tǒng)。例如,如果我遇到一個(gè)msdos格式的軟盤,我會(huì)執(zhí)行“insmod /usr/src/linux/modules/msdos.o”命令,并在完成之后執(zhí)行“rmmod msdos”。這種方式在正常操作下大約在會(huì)內(nèi)核中節(jié)省50K內(nèi)存。關(guān)于minix文件系統(tǒng)有一點(diǎn)需要注意:你總是需要把它直接配置到內(nèi)核中,以便于使用恢復(fù)盤。10秘訣和技巧10.1將make和patch命令的輸出重定向如果你想記錄make和patch命令都做了些什么,你可以把它們的輸出重定向到一個(gè)文件中。首先,通過運(yùn)行“grep root /etc/passwd”命令和尋找一些諸如“/bin/csh”的東西來弄清楚你所使用的是什么shell。如果你使用的是sh或bash(command) 2&1 | tee (output file)會(huì)在(output file)中留下一份(command)命令的輸出結(jié)果。對(duì)于csh或tcsh,使用(command) |& tee (output file)對(duì)于rc(你很可能并不使用rc)則是(command) 2=1 | tee (output file)10.2有條件安裝內(nèi)核和使用軟盤不同,有好幾種不需要舊的內(nèi)核就可以測(cè)試新內(nèi)核的辦法。和很多Unix系統(tǒng)不同,LILO能夠從硬盤的任何地方啟動(dòng)內(nèi)核(如果你有一個(gè)很大的(500MB或更多)硬盤,請(qǐng)閱讀LILO的文檔中關(guān)于這種方法所可能引起的問題的部分)。因此,如果你添加了一些類似于image = /usr/src/linux/arch/i386/boot/bzImage label = new_kernel的內(nèi)容到L

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論