1. 要怎麼進(jìn)行核心的配置? 1.1. 取得原始程序碼 你可以經(jīng)由 ftp 從 ftp.funet.fi 或是 mirror in /pub/OS/Linux/PEOPLE/Linus 取 得原始程序碼。也可以到這個(gè)節(jié)點(diǎn)的 mirror 或其他節(jié)點(diǎn)去拿。檔案名稱一般是以標(biāo)記 成 linux-x.x.x.tar.gz 為代表,其中的 x.x.x 是版本編號(hào)。較新的(更好的?)版 本以及修補(bǔ)檔一般是放在類似”v1.1 ”以及”v1.2”這樣的子目錄下。 強(qiáng)烈建議你去找 mirror 的 ftp 節(jié)點(diǎn),而不要直接到 ftp.funet.fi 去!底下是一些 mirrors 以及其他節(jié)點(diǎn)的簡(jiǎn)要列表 ( ftp.funet.fi 的 mirror 節(jié)點(diǎn):) Germany: ftp.Germany.EU.net UK: doc.ic.ac.uk Australia: kirk.bu.oz.au ( 其它有擺放核心檔案的節(jié)點(diǎn):) USA: tsx-11.mit.edu USA: sunsite.unc.edu Germany: ftp.dfv.rwth-aachen.de 如果你沒有辦法上 ftp ,有個(gè)存放 linux 的 BBS 系統(tǒng)列表會(huì)定期刊登在 comp.os.linux.announce 上,試著到那邊去找點(diǎn)幫助。 1.2. 解開原始程序碼的包裝 確定你是以″ root ″的身份簽入,然後 cd 到 /usr/src 。如果你的 linux 是從其 它任何可能的地方取得的,在這個(gè)目錄底下應(yīng)該已經(jīng)存在一個(gè)叫做” linux ”的子目 錄。這是舊版的 linux 原始程序碼。如果你還有磁碟空間而且想要玩得安全一點(diǎn),那 麼你會(huì)想要保留這個(gè)子目錄的。有個(gè)好主意是根據(jù)你目前使用的核心版本來修改這個(gè)子 目錄的名稱! uname -r ″這個(gè)指令將會(huì)告訴你新的版本。 所以,如果″ uname -r ″顯示″ 1.1.47,″你就可以把″ linux ″改名為 ″ Linux-1.1.47 !迦绻闶莻(gè)魯莽型的人,那就直接把這個(gè)子目錄清除掉。無論是 哪一種情況,反正只要確定在解開全部的原始程序碼之前, /usr/src 目錄下沒有 ”linux ”這個(gè)子目錄就對(duì)了。 在 /usr/src 目錄下,用″zcat linux.x.x.tar.gz | tar xvf- ″來解開原始程序碼 的包裝(你也可以用更簡(jiǎn)單的″ tar zxvf linux.x.x.x.tar.gz″;如果你拿到的是 ..tar 的檔案(後面沒有加上 gz ),那就用” tar xvf linux.x.x.x.tar ”)。你 將會(huì)看到原始程序的內(nèi)容飛逝而過。當(dāng)它完成以後,將會(huì)出現(xiàn)一個(gè)新的″ linux ”子 目錄。 ″ cd ″到 linux 目錄下然後查看 README 檔,里面應(yīng)該會(huì)有一段標(biāo)題為 ″INSTALLING the kernel″ 或類似的文字。如果適當(dāng)?shù)脑,先?zhí)行說明里的指示 — 建立該有的符號(hào)鏈結(jié),移除過時(shí)的 .o 檔案等等等諸如此類的工作。 1.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 。 你現(xiàn)在該準(zhǔn)備好回答這些問題,通常用″ y ″或″ n ″就可以了。有一些很明顯或是 不重要的選項(xiàng)將不會(huì)在此加以說明。 1.3.1. Kernel math emulation (核心的浮點(diǎn)運(yùn)算模擬) 如果你沒有數(shù)學(xué)輔助運(yùn)算處理機(jī)(ie,你只有一臺(tái)單純的 386 或 486SX ),那麼你在 這里要回答″ y ″。如果你已經(jīng)有數(shù)學(xué)輔助運(yùn)算處理機(jī)卻還回答″ y ″,那也不必太 擔(dān)心 — linux 還是會(huì)去使用它而忽略掉核心的模擬程序。唯一的影響是編譯出來的核 心變大了。 1.3.2. Normal harddisk support (標(biāo)準(zhǔn)硬碟支援) 你在這里差不多都得回答″ y ″。它代表的意思是核心將會(huì)支援標(biāo)準(zhǔn)的 PC 磁碟,例 如大多數(shù)人使用的 IDE 界面硬碟。這不包括 SCSI 設(shè)備的支援。 1.3.3. Networking support (網(wǎng)絡(luò)支援) 如果你有連接網(wǎng)絡(luò),譬如說,你與 internet 有連線,或是你將使用 SLIP,PPP,term 或其它方式撥接到 internet 上的話,回答″ y ! 1.3.4. Limit memory to low 16MB (限制記憶體在 16 MB) 如果你的記憶體不到 16 MB,幾乎一定要回答″ y ″;那麼當(dāng)你使用這個(gè)核心的時(shí)候 將會(huì)節(jié)省一點(diǎn)記憶體。但是,當(dāng)然羅,如果你有 16 MB 以上的記憶體而不回答″ n ″ 的話,這個(gè)新的核心將只使用其中的 16 MB ,即使你有 34 billion megs 也一樣。 也可能會(huì)有一些不良的 386 DMA controllers(或是一些與硬件有關(guān)的東西)無法正確 地定址到 16 megs 以上的記憶體位址;你的機(jī)器剛好有這種情況時(shí)(罕見),那麼你 也就只好回答″ y ″了。 1.3.5. Use -m486 flag for 486-specific optimizations (使用 -m486 旗標(biāo)指定對(duì) 486 做最佳化) 這將會(huì)為核心做 486 最佳化處理。新的核心將會(huì)變得稍微大一些,如果你擔(dān)心的話的 話,其實(shí)它還是可以在 386 上執(zhí)行。只是會(huì)比較慢,不過你感覺不出來的。 1.3.6. SCSI support (SCSI 的支援) 如果你有 SCSI 設(shè)備,那麼就回答” y !苯又鴷(huì)有提示要求更進(jìn)一步的資訊,像是 你是否要支援光碟機(jī),磁碟機(jī),還有你使用的是那一種 SCSI 介面卡。這部份請(qǐng)參閱 SCSI-HOWTO ,有更詳細(xì)的說明。 1.3.7. Network device support (網(wǎng)絡(luò)設(shè)備支援) 如果你有以太網(wǎng)絡(luò)卡,或者你想要使用 SLIP,PPP,或是并列埠界面卡,那就回答 ″ y ″,接著會(huì)有提示問你使用的是那一種網(wǎng)絡(luò)卡,或要使用那一種串列通訊協(xié)定。 1.3.8. Filesystems (文件系統(tǒng)) 這將會(huì)有提示要你回答所要支援的文件系統(tǒng)種類,計(jì)有: Standard( minix )— 新的套件不再建立 minix 文件系統(tǒng),而且很多人不使用它, 但是把它配置在核心里仍然是個(gè)好主意。某些″ rescue-disk ″ 程序會(huì)用到它,而且 仍然有許多磁片可能用 minix 文件系統(tǒng),因?yàn)?nbsp;minix 文件系統(tǒng)對(duì)於處理磁片方面是最 好的。 Extended fs — 這是擴(kuò)充文件系統(tǒng)的第一版,現(xiàn)在已經(jīng)不再使用。使用的時(shí)機(jī)是,如 果你有需要,你就會(huì)知道的。 Second extented — 這是現(xiàn)在新發(fā)行的套件所廣泛采用的文件系統(tǒng),你可能會(huì)有其中 一種。 xiafs filesystem — 這個(gè)文件系統(tǒng)曾經(jīng)一度很普遍,但是在寫這份文件時(shí),我已經(jīng)不 知道有任何人在使用它了。 msdos — 嗯,你猜對(duì)了;如果你想要在 linux 下使用你硬碟中的 MS-DOS 分割區(qū),或 是想將用 MS-DOS 格式化的磁片掛進(jìn)來的話,回答″ y ″。 ums-dos — 這是一個(gè)相當(dāng) slick 的文件系統(tǒng),它能使 MS-DOS 文件系統(tǒng)擁有更多的特 性,像是長(zhǎng)檔名等等。這對(duì)那些不使用 MS-DOS 的人(像我)并不是很有用。 /proc — 這是最 slick 的文件系統(tǒng)之一(我猜這個(gè)概念是無恥地從貝爾實(shí)驗(yàn)室里偷過 來的)。它不是你硬碟分割區(qū)里的任何東西,而是核心與程序之間的文件系統(tǒng)介面。許 多程序工具(像″ ps ″)都會(huì)用到它。 如果你已經(jīng)將它安裝好了,有空不妨試試看″ cat /proc/meminfo ″或者是 ″ cat /proc/devices ″。有些 shells ,像是 rc ,會(huì)用 /proc/self/fd(在其它 系統(tǒng)上為 /dev/fd )來處理輸出入。幾乎可以確定你在這里得要回答″ y ″,有許多 重要的 Linux 標(biāo)準(zhǔn)工具是靠它來運(yùn)作的。 NFS — 如果你在網(wǎng)絡(luò)環(huán)境下而且想要分享檔案,回答″ y 。″ ISO9660 — 絕大部分的光碟都使用這個(gè)文件系統(tǒng)。 OS/2 HPFS — 在編寫這份文件的時(shí)候,這個(gè)文件系統(tǒng)還只支援到 OS/2 HPFS 的讀取。 System V and Coherent — 這是為 System V 以及 Coherent 的分割區(qū)而設(shè)的。 1.3.8.1. 但是我不知道我需要那些文件系統(tǒng)! 好吧,鍵入″ mount !逅雌饋頃(huì)像這樣: 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) 仔細(xì)看看每一行;在” type ”後面的那個(gè)字就是文件系統(tǒng)的格式。在這個(gè)例子中,我 的 / 和 /usr 分割區(qū)是 second extended 格式,我有使用 /proc ,而且掛有一張以 msdos (bleah) 為文件系統(tǒng)格式的磁片。 如果你有使用 /proc ,可以試試″ cat /proc/filesystems ″。它會(huì)給你一份目前使 用的核心所支援的文件系統(tǒng)列表。 1.3.9. Character devices (字元設(shè)備) 在這里,你將會(huì)發(fā)現(xiàn)許多設(shè)備名稱,用來設(shè)定你的印表機(jī),匯流排滑鼠,PS/2 滑鼠( 大部分筆記型電腦使用內(nèi)建的 PS/2 滑鼠),以及一些磁帶機(jī)驅(qū)動(dòng)程序,selection 。 當(dāng)有合適的選項(xiàng)時(shí),回答” y ”。 注意:” Selection ”讓你能夠執(zhí)行一個(gè)程序,這個(gè)程序使你可以在 X-windows 之外 使用滑鼠在各個(gè)虛擬控制臺(tái)間做剪貼的動(dòng)作。如果你有串列滑鼠的話,這真的很棒,因 為它與 X-windows 之間的溝通良好,然而在編寫這份文件的時(shí)候,它跟 PS/2 滑鼠還 是處不來(它會(huì)鎖住滑鼠所使用的埠,使得你在殺掉這個(gè) selection 程序之前都不可 能執(zhí)行 X-windows 。)。 1.3.10. Sound card (聲卡) 如果你對(duì)於讓隔壁的人保持清醒有興趣的話,回答″ y ,″然後等一下會(huì)有一個(gè)配置 程序編譯并詳細(xì)詢問你所有關(guān)於你的聲卡的問題。 1.3.11. kernel hacking >這是從 Linus 的 README 里摘錄的: ″ kernel hacking ″配置的細(xì)節(jié)通常會(huì)產(chǎn)生一個(gè)更大或是更慢的核心(或者是又大又 慢),而且可能因?yàn)閷⒁恍┏J脚渲贸珊芑钴S地去嘗試中斷一些不良的程序碼以便找出 核心里的問題( kmalloc() ),而使得核心變得比較不穩(wěn)定。所以要產(chǎn)生一個(gè)核心″ 產(chǎn)品 ″的話,你在這里應(yīng)該回答″ n ″。 1.4. 現(xiàn)在呢?( The Makefile ) 現(xiàn)在應(yīng)該會(huì)有一個(gè)訊息告訴你核心已經(jīng)配置好了,以及要你去″ check the top-level Makefile for additional configuration,”等等。 所以查看一下 Makefile。你應(yīng)該不必改變它,但是看看無妨。一旦新核心完成, 你也可以用″ rdev ″指令來改變其中的選項(xiàng)。 2. 編譯核心 2.1. 清除與確認(rèn) 當(dāng)用來進(jìn)行配置的指令稿執(zhí)行完成時(shí),它會(huì)告訴你去做″ dep ″跟″ clean !彼 要執(zhí)行″ make dep !宄悄愕碾娔X真的很慢,否則它不會(huì)花太久時(shí)間的。Making depend 確定你已經(jīng)具備所有必需的要件,像是含入檔以及諸如此類的東西。當(dāng)它完成 後(你也可以在″ make dep ″之前執(zhí)行它),執(zhí)行″ make clean !暹@會(huì)清除核心 編譯的所有目的檔以及其它東西。不要忘記這個(gè)步驟。 2.2. 編譯時(shí)期 在執(zhí)行清除與確認(rèn)工作之後,你現(xiàn)在可以執(zhí)行″ make ″或是″ make zdisk ! ″ make ″將會(huì)編譯核心,并且留給你一個(gè)叫做″ zImage ″的檔案(這一類的東西) 。這就是新的核心! make zdisk ″做的事也一樣,但是它會(huì)把核心放到你所希望的 磁片去,只要把這張磁片放在 a:。” zdisk ”對(duì)於測(cè)試新核心很方便;如果它完全 不行,只要把磁片拿掉再用舊的核心啟動(dòng)即可。 如果你意外地刪除了核心或是什麼的,它也是個(gè)方便的啟動(dòng)辦法。當(dāng)你把一臺(tái)磁碟的內(nèi) 容傾倒到另外一臺(tái)去時(shí),你也可以用它來安裝新的系統(tǒng)(除了這些之外還有更多用途! NOW how much would you pay ?)。 所有近來的核心都是壓縮過的,所以有個(gè)” z ″在名字前面。核心是壓縮過的,當(dāng)它 執(zhí)行的時(shí)候會(huì)自動(dòng)將自己解壓縮(一個(gè)節(jié)省磁碟空間的好方法)。 2.3. 其他可以″ make ″的東西 ″ make mrproper ″將會(huì)做更廣泛的″清除″。這個(gè)動(dòng)作有時(shí)候是必須的,所以你可 能會(huì)希望在每次修補(bǔ)的時(shí)候執(zhí)行它! make zlilo ″將會(huì)安裝核心,然後對(duì)它執(zhí)行 LILO ,使你完成所有開機(jī)的準(zhǔn)備,但是這只有在 lilo 已經(jīng)以下列這種方式配置好的 時(shí)候才可以:核心為 /vmlinuz , lilo 在 /sbin 下,而且與你的 lilo 配置一致。 2.4. 安裝核心 在你已經(jīng)獲得一個(gè)看起來能夠照你希望運(yùn)作的新核心之後,現(xiàn)在是安裝它的時(shí)候了。大 大部份的人使用 LILO( Linux Loader )來做這件事。這是一個(gè)相當(dāng)容易安裝的軟體 ,然而,它會(huì)因?yàn)榕渲脵n而困擾人們。如果你沒有最新的版本,查看配置檔(不是舊版 的 /etc/lilo/config 就是新版的 /etc/lilo.conf ),看看里面有些什麼,它會(huì)告訴 你像這樣子的東西: image = /vmlinux label = Linux root = /dev/hda1 ... 首先,″ image = ″是設(shè)定為已經(jīng)安裝的核心。大部份的人似乎都用 /vmlinuz ,但 是我用 /vmlinux 。″ lable ″ 則是由 lilo 用來告訴你現(xiàn)在要啟動(dòng)的是那個(gè)核心或 作業(yè)系統(tǒng),而″ root ″則是這個(gè)特別的作業(yè)系統(tǒng)的根目錄 / 。備份一份舊的核心( 無論什麼檔名),然後將你做的 zImage 拷貝進(jìn)去,(例如,如果你用” /vmlinuz ″ 的話,就像這樣″ cp zImage /vmlinuz ”)。 接著重新執(zhí)行 lilo — 在較新的系統(tǒng)上,你可以只執(zhí)行″ lilo ,″但是在較舊的系 統(tǒng)上,你可能必須執(zhí)行 /etc/lilo/install 或甚至是 /ect/lilo/lilo -C /etc/lilo/config 。 如果你想知道更多有關(guān)於 lilo 的配置,或是你并沒有 lilo 但是你想要安裝的話,從 你喜歡的 ftp 節(jié)點(diǎn)拿最新的版本然後依說明行事。 要能夠從硬碟啟動(dòng)你的舊核心其中之一的話(這是另一個(gè)在新核心出狀況的情況下保護(hù) 你自己的方法),把 lilo 配置檔中所有的(包括一行)″ image = xxx ″ 拷貝到檔 案的最底端,然後把″ image = xxx ″改成″ image = yyy ,″其中的″ yyy ″是 你備份舊核心所存檔的名字。接著,把″ lable = xXx ″改成像是” lable = linux- backup!比会嶂匦聢(zhí)行 lilo 。 你可能得要加上一行″ delay = x ,″其中的 x 是以十分之一秒為單位的時(shí)間,這是 用來使 lilo 在啟動(dòng)前先等一下,所以你可以中斷它的執(zhí)行(例如用 shift 鍵)。然 後鍵入所備份的啟動(dòng)映像之 lable (在發(fā)生了某些令人不愉快的事情的情況下)。 3. 修補(bǔ)核心 3.1. 使用修補(bǔ)檔 核心的小幅更新是以修補(bǔ)檔的方式發(fā)行。例如,如果你的版本是 1.1.45 ,而且你注意 到出現(xiàn)了一個(gè)″ patch46.gz ″可以用來升級(jí)它,這代表你可以藉由使用這個(gè)修補(bǔ)檔將 版本升級(jí)到 1.1.46 。你也許會(huì)想要先備份 source tree(″make clean ″然後″ cd /usr/src; tar cvf linux | gzip -c > old-tree.tar.gz″將會(huì)為你造出一份 tar 壓 縮檔,里面就是整個(gè)原始程序碼與其檔案架構(gòu)。)。 現(xiàn)在接著繼續(xù)上面的例子,假設(shè)你已經(jīng)取得了″ patch46.gz ″并放在 /usr/src 下。 cd 到 /usr/src 然後執(zhí)行″ zcat patch46.gz | patch -p0 ″(如果并不是壓縮過的 修補(bǔ)檔,那麼就執(zhí)行″ patch -p0 < patch46″)你將會(huì)看到許多東西飛逝而過(也許 它們會(huì)慢慢跳過,如果你的電腦真的很慢的話)告訴你它正試著應(yīng)用 hunks ,以及是 否成功。 通常,這個(gè)過程快得無法仔細(xì)看清楚它的動(dòng)作,所以你會(huì)無法確定它到底有沒有成功地 執(zhí)行。那麼就得找找看一些可能不是那麼順利的事。cd 到 /usr/src/linux 并找尋檔 名有 .reg 的檔案。某些版本的修補(bǔ)檔(比較舊的版本,它們可能是在比較早期的檔案 系統(tǒng)上編譯的)會(huì)把這些沒有成功的操作記錄在檔名有 # 的檔案里。你可以用 ″ find ″來替你找;″ find . -name '*.reg' -print ″會(huì)處理這個(gè)工作。 如果一切正確無誤的話,執(zhí)行第二節(jié)跟第三節(jié)所討論的″ make clean ,″″ config ,″以及″ dep ″。 關(guān)於 patch 指令另外還有一些選項(xiàng)。patch -s 將會(huì)抑制除了錯(cuò)誤以外的所有其他訊息 。如果你把核心原始程序碼放在 /usr/src/linux 以外的地方,在該目錄下用 patch -p1 也可以乾凈俐落的執(zhí)行修補(bǔ)任務(wù)。其它的 patch 選項(xiàng)在 manual pages 里 都有很詳細(xì)的描述。 3.2. 如果有錯(cuò)誤發(fā)生 通常最常發(fā)生的問題是當(dāng) patch 修改一個(gè)叫做″ config.in ″ 的檔案時(shí),這個(gè)檔案 看起來不怎麼對(duì)勁,因?yàn)槟阈薷牧艘恍┻x項(xiàng)來配合你的機(jī)器。這個(gè)問題已經(jīng)小心的注意 過了,但還是可能有人會(huì)在較舊的版本上遭遇這個(gè)問題。 要修正這個(gè)問題的話,查看 config.in.rej 這個(gè)檔案里留下些什麼訊息。有修改過的 部份正常來說會(huì)在每一行開始的地方標(biāo)上″ + ″和″ - ″。查看有標(biāo)記的附近幾行, 然後記得它們是設(shè)成″ y ″或是″ n !瀣F(xiàn)在編輯 config.in 檔,然後在適當(dāng)?shù)牡?br>方把″ y ″改成″ n ″以及″ n″改成″y″。 執(zhí)行″ patch -p0 < config.in.rej ,″如果成功的話(沒有錯(cuò)誤),那麼你就完成 了。這個(gè) config.in.rej 檔還是會(huì)留在那里,但是你可以砍掉它。 如果你仍然遭遇其它問題,那麼可能是你安裝了一份損壞的修補(bǔ)檔。如果 patch 顯示 ″ previously applied patch detected: Assume -R? ,″你可能使用了一些比你目 前的版本編號(hào)還低的修補(bǔ)檔(并不建議這樣做)。 要還原一個(gè)修補(bǔ)檔的話,在原先的修補(bǔ)檔上執(zhí)行″ patch -R ″。 當(dāng)修補(bǔ)檔真的失敗的時(shí)候,最好的辦法是從一個(gè)乾凈的,out-of-the-box source tree (例如從 linux-x.x.x.tar.gz 檔案其中之一)開始,再重新執(zhí)行。 3.3. 砍掉 .orig 檔案 只要做過幾次修補(bǔ)以後,那些 .orig 的檔案將會(huì)開始堆積。例如,我的一個(gè) 1.1.51 版的 tree 最後一次做清掃是在 1.1.48 版(我想是吧)。刪除這些 .orig 檔案會(huì)節(jié) 省許多的磁碟空間! find . -name '*.orig' -exec rm -f {} ';' ″將會(huì)替你照料 這件事。某些版本的修補(bǔ)檔會(huì)用 tilde 來代替 .orig 。 有其它(更好的?)的辦法可砍掉這些 .orig 檔。用的最多的是以″ xargs ″來代替 ″ -exec: ″″find . -name '*.orig | xargs rm ″或是″ find . -name '*.orig' -print0 | xargs --null rm -- ″(後面這個(gè)比較安全。)。 3.4. 其它的修補(bǔ)檔 總是會(huì)有一些并不是由 Linus 發(fā)行的其它修補(bǔ)檔出現(xiàn)(我將稱之為″非標(biāo)準(zhǔn)的″ )。 如果你使用了它們, Linus 的修補(bǔ)檔可能會(huì)而無法正確地執(zhí)行,那麼你不是得將它們 還原就是得因此而去修改原始程序碼或是修補(bǔ)檔。這個(gè)工作對(duì)初學(xué)者通常是很討厭,所 以,如果你對(duì)原始程序碼沒什麼研究,在使用 Linus 的修補(bǔ)檔之前先還原這些非標(biāo)準(zhǔn) 的修補(bǔ)檔。 然後你可以看看這些非標(biāo)準(zhǔn)的修補(bǔ)檔是否仍然可以執(zhí)行。如果不行的話,那麼你要不就 繼續(xù)用舊的核心來修補(bǔ)以執(zhí)行它們,要不就等別人發(fā)表能在你修補(bǔ)後的新核心上用的新 版非標(biāo)準(zhǔn)修補(bǔ)檔。 非標(biāo)準(zhǔn)的修補(bǔ)檔有多普遍?你有可能曾經(jīng)聽過它們。我使用 Bill Paul 的不閃爍修補(bǔ) 檔來 make 我虛擬控制臺(tái)上的游標(biāo),因?yàn)槲矣憛挄?huì)閃爍的游標(biāo)。就我所知,到目前為止 這個(gè)特別的修補(bǔ)檔的最新版本是給 1.0 版的核心使用的,但是我仍然在 1.1.51 版下 使用它 — 我已經(jīng)修改了它好幾次,因?yàn)樗ǔ?huì)搞亂 Linus 修補(bǔ)檔的 driver/char/ console.c 。 4. 附加的套件 你的 Linux 核心有許多在核心的原始程序碼本身里面并沒有說明的特性;這些特性一 般是經(jīng)由外來的軟體來利用,在這里列出一部分最普遍的: 4.1. kbd Linux 的控制臺(tái)有著比你所能吃驚更多的特色。這包括切換字型,重新對(duì)映你的鍵盤, 切換顯示模式(比較新的核心)的能力等等。kbd 這套軟體里有能夠讓使用者做這些動(dòng) 作的支援程序,還加上一大堆的字型以及幾乎足以適用任何鍵盤的一些鍵盤對(duì)映表。 4.2. hdparm 像很多軟體一樣,這曾經(jīng)是一個(gè)核心修補(bǔ)檔及其支援程序。這些修補(bǔ)檔被公認(rèn)為核心的 一部分,而用來最佳化以及調(diào)適你硬碟的支援程序一般是分開發(fā)行的。 5. 一些陷阱 5.1. 清除 如果你的新核心會(huì)做一些真的很奇怪的事(這曾經(jīng)發(fā)生在我身上),有可能是因?yàn)槟阃?br>了做清除( make clean )。癥狀從你的核心不正常地崩潰到奇怪的輸出入問題,一直 到可憐的執(zhí)行效率等等不一而足,可以是任何事。最好也要確定你有做確認(rèn)( make dep )。 5.2. 巨大或緩慢的核心 如果你的核心占用了大量的記憶體,或者它真的是很大很大,也或者是即使用你全新的 486DX6/440 來編譯卻都還像是永遠(yuǎn)編譯不完的話,那麼有可能是因?yàn)槟闩渲昧颂嗖?br>必要的東西(設(shè)備驅(qū)動(dòng)程序,文件系統(tǒng)等等)。如果你不會(huì)用到某些東西,那就不要配 置它,因?yàn)樗娴臅?huì)占用記憶體。 如果你的記憶體少於 16 Megs ,確定你在″ limit memory to low then 16MB ″這個(gè) 問題上回答的是″ y ″。這會(huì)造成很大的不同(尤其是只有在 4 MB 的系統(tǒng)上)最明 顯的癥狀是記憶體與磁碟之間異常大量的資料交換。如果你的磁碟發(fā)出很多噪音,檢查 一下你的核心配置。 你可以找出你機(jī)器上全部記憶體的數(shù)量,然後減掉 /proc/meminfo 里面的″ total mem ″或″ free ″指令所得的記憶體數(shù)量來得知核心使用了多少記憶體。你也可以執(zhí) 行” dmesg ”(或者也可以查看核心的記錄檔,它一定在會(huì)你的系統(tǒng)里)?雌饋砭 像這一行: Memory: 15124k/16384k available (552k kernel code, 384k reserved, 324k data) 我的 386(配置很少垃圾)顯示如下: Memory: 7000k/8192k available (496k kernel code, 384k reserved, 312k data) 5.3. 核心沒有編譯 如果它沒有被編譯,那麼可能是有個(gè)修補(bǔ)檔失敗了,或者是你從某個(gè)地方拿到的原始程 式碼有問題。也有可能是因?yàn)槟愕?nbsp;gcc 版本不正確或壞掉了。確定 Linus 在 README 里所描述的符號(hào)鏈結(jié)都有正確建立。一般說來,如果核心沒能編譯,這表示在某些地方 有嚴(yán)重的錯(cuò)誤。 5.4. 新版的核心似乎不能啟動(dòng) 沒有執(zhí)行 LILO ,或是沒有正確的配置它。有一次我曾經(jīng)碰到的問題是出在配置檔里, 我用了″ root = /dev/hda ″而不是″ root = /dev/hda1″(這在剛開始時(shí)真的是 很討厭,但是一旦你有了一個(gè)可以用的配置檔,應(yīng)該不需要去再去改變它) 5.5. 你忘了執(zhí)行 lilo ,或系統(tǒng)根本不能啟動(dòng) 噢!現(xiàn)在最好的辦法是用磁片啟動(dòng),并且準(zhǔn)備另一張可以啟動(dòng)的磁片(像是” make zdisk ”時(shí)做的磁片)。你得知道你的根目錄( / )所在的分割區(qū)以及它的格式( second extended, minix 等等)在下面的例子中,你也得知道你的 /usr/src/linux source tree 在那個(gè)分割區(qū),它的格式,以及它一般會(huì)掛在那兒。 在這個(gè)例子中, 根目錄 / 是 /dev/hda1 ,而持有 /usr/src/linux 的分割區(qū)是 /dev/hda3 , 一般會(huì)掛在 /usr 下。它們都是 second extended 文件系統(tǒng)。可以運(yùn)作 的核心映像叫做 zImage ,放在 /usr/src/linux 底下。 這個(gè)主意是這樣的,假若有一個(gè)可以運(yùn)作的核心映像叫做 zImage 在 /usr/src/linux 下,可能可以把它用在新的磁片上。另外一個(gè)不一定會(huì)更好的變通辦法(這跟你的系統(tǒng) 怎麼組成的有關(guān))在說明這個(gè)例子之後會(huì)討論到。 首先,從 boot/root 磁片或者是 rescue 磁片開機(jī),然後將持有可運(yùn)作核心的分割區(qū) 掛上來: mkdir /mnt mount -t ext2 /dev/hda3 /mnt 如果 mkdir 指令顯示該目錄已經(jīng)存在,忽略掉不必理會(huì)它,F(xiàn)在,cd 到持有可運(yùn)作核 心的地方(注意: /mnt + /usr/src/linux - /usr = /mnt/src/inux )。把一張格式 化過的磁片放進(jìn) a: 磁碟機(jī),(確定不是你的 boot/root 磁片!),把映像檔傾倒到 磁片里去,然後配置你的根目錄分割區(qū)。 cd /mnt/src/linux dd if=zImage of=/dev/fd0 rdev /dev/fd0 /dev/hda1 cd 到根目錄 / 并且卸下標(biāo)準(zhǔn) /usr 分割區(qū): cd / umount /mnt 你現(xiàn)在應(yīng)該可以從這張磁片正常的開機(jī)了。在這次開機(jī)後不要忘記執(zhí)行 lilo (或是其 它無論你曾經(jīng)做錯(cuò)的什麼事)! 如同前面曾經(jīng)提過的,還有另外一種很普遍的變通方式。如果情況是你有一個(gè)可以運(yùn)作 的核心在放在 / (例如 /vmlinuz ),你也可以使用它。假定所有的條件都跟上面的 例子一樣,而我的核心映像是 /vmlinuz ,只要對(duì)上面的例子做這些改變: 把 /dev/hda3 改成 /dev/hda1( / 分割區(qū)),把 /mnt/src/linux 改成 /mnt ,并且 把 if=zImage 改成 if=vmlinuz 。至於前面有關(guān)注意如何推導(dǎo)出 /mnt/src/linx 的那 個(gè)部分可以忽略。 5.6. 系統(tǒng)表示” Warning: bdflush not running” 這可以算是一個(gè)相當(dāng)嚴(yán)重的問題。從 1.0 版以後的核心開始(我記不清楚確實(shí)的版本 了,但大概是在 1994 年 4 月, 20 日左右),有個(gè)會(huì)周期性地更新文件系統(tǒng)緩沖區(qū)的 程序叫做″ update ”被升級(jí)或取代掉了。 取得″ bdflush ″的原始程序碼(你應(yīng)該可以從你取得核心的地方找到),然後編譯 它(你可能會(huì)希望在舊版的核心下執(zhí)行編譯及安裝)。它會(huì)以″ update ″為名安裝它 自己,而在此之後你的新核心應(yīng)該會(huì)運(yùn)作良好。 5.7. 系統(tǒng)顯示關(guān)於 obsolete routing requests 的奇怪訊息 取得新版的 route 程序,并且重新編譯舊的要件。 /usr/src/linux/route.h (這是 /usr/src/linux 下的一個(gè)檔案)已經(jīng)做了修改。 6. □訣和技巧 6.1. 重導(dǎo) make 或是 patch 指令的輸出 如果你想要記錄這些″ make ″或是″ patch ″ 指令到底做了些什麼,你可以把螢?zāi)?br>的輸出重導(dǎo)到一個(gè)檔案去。首先,要知道你用的是是那一種 shell:″ grep root /etc/passwd″ 然後尋找看起來像″ /bin/csh ″一類的東西。 如果你使用的是 sh 或是 bash ,″ (command) 2>&1 | tee (output file) !鍖(huì) 把一份 make 的輸出放到″ (output file) ″這個(gè)檔案去。 如果是 csh 或 bash,你應(yīng)該使用″ (command) |& tee (output file) ″這個(gè)語法。 如果是 rc(注意:你應(yīng)該不會(huì)是用 rc ),語法是″ (command) >[2=1] | tee (output file) 。" 7. Misc 7.1. Author The original revision was -0.1 on 3 October 1994 by Brian Ward (ward@blah.tu-graz.ac.at). Please send me any comments, additions, corrections, or computers. Corrections are, in particular, the most important to me! Even though I try to be attentive as possible with mail, please remember that I get a lot of mail per day, so it may take a little time to get back to you. Especially when emailing me with a question, please try extra hard to be clear and detailed in your message. I'd like to thank everyone who's given me feedback. 7.2. History and other forms of this document I originally wrote this in ASCII, then I put some TeX around it, and then horrified the TeX so that I could convert the TeX into SGML with a perl script. Because of the original in TeX, the first version of this document that appeared on sunsite had two section numbers with each section (It wouldn't have looked that bad if they weren't different.). I also realize that it's kind of nonstandard to make revision numbers negative, but oh well. And if any of the above sounds kind of stupid, I don't blame you. 7.3. To do The ``Tricks and tips'' section is a little small. I hope to expand on it with suggestions from others. So is ``Additional packages.'' More debugging/crash recovery info needed. 7.4. Contributions A small part of Linus' README (Re: kernel hacking options) is inclusive. (Thanks, Linus!) uc@brian.lunetix.de (Ulrich Callmeier): patch -s and xargs.
quinlan@yggdrasil.com (Daniel Quinlan): corrections and additions in many sections. nat@nataa.frmug.fr.net (Nat MAKAREVITCH): mrproper The people who have sent me mail with questions and problems have been helpful, too!
7.5. Copyright notice and copying Copyright (c) Brian Ward, 1994, 1995. This document may be distributed in any medium as long as it and this notice remain unaltered. Permission is granted for translation into any language, so long as the translator's name is added to the document. There is no warranty on this document and its contents; no one may be held liable for any unfortunate outcome of its content. Commercial redistribution is allowed and encouraged; however, it is strongly recommended that the redistributor contact the author before the redistribution, in the interest of keeping things up-to-date. The same is true for translations.