1. 要怎麼進行核心的配置? 1.1. 取得原始程序碼 你可以經由 ftp 從 ftp.funet.fi 或是 mirror in /pub/OS/Linux/PEOPLE/Linus 取 得原始程序碼。也可以到這個節點的 mirror 或其他節點去拿。檔案名稱一般是以標記 成 linux-x.x.x.tar.gz 為代表,其中的 x.x.x 是版本編號。較新的(更好的?)版 本以及修補檔一般是放在類似”v1.1 ”以及”v1.2”這樣的子目錄下。 強烈建議你去找 mirror 的 ftp 節點,而不要直接到 ftp.funet.fi 去!底下是一些 mirrors 以及其他節點的簡要列表 ( ftp.funet.fi 的 mirror 節點:) Germany: ftp.Germany.EU.net UK: doc.ic.ac.uk Australia: kirk.bu.oz.au ( 其它有擺放核心檔案的節點:) USA: tsx-11.mit.edu USA: sunsite.unc.edu Germany: ftp.dfv.rwth-aachen.de 如果你沒有辦法上 ftp ,有個存放 linux 的 BBS 系統列表會定期刊登在 comp.os.linux.announce 上,試著到那邊去找點幫助。 1.2. 解開原始程序碼的包裝 確定你是以″ root ″的身份簽入,然後 cd 到 /usr/src 。如果你的 linux 是從其 它任何可能的地方取得的,在這個目錄底下應該已經存在一個叫做” linux ”的子目 錄。這是舊版的 linux 原始程序碼。如果你還有磁碟空間而且想要玩得安全一點,那 麼你會想要保留這個子目錄的。有個好主意是根據你目前使用的核心版本來修改這個子 目錄的名稱。″ uname -r ″這個指令將會告訴你新的版本。 所以,如果″ uname -r ″顯示″ 1.1.47,″你就可以把″ linux ″改名為 ″ Linux-1.1.47 。″如果你是個魯莽型的人,那就直接把這個子目錄清除掉。無論是 哪一種情況,反正只要確定在解開全部的原始程序碼之前, /usr/src 目錄下沒有 ”linux ”這個子目錄就對了。 在 /usr/src 目錄下,用″zcat linux.x.x.tar.gz | tar xvf- ″來解開原始程序碼 的包裝(你也可以用更簡單的″ tar zxvf linux.x.x.x.tar.gz″;如果你拿到的是 ..tar 的檔案(後面沒有加上 gz ),那就用” tar xvf linux.x.x.x.tar ”)。你 將會看到原始程序的內容飛逝而過。當它完成以後,將會出現一個新的″ linux ”子 目錄。 ″ cd ″到 linux 目錄下然後查看 README 檔,里面應該會有一段標題為 ″INSTALLING the kernel″ 或類似的文字。如果適當的話,先執行說明里的指示 — 建立該有的符號鏈結,移除過時的 .o 檔案等等等諸如此類的工作。 1.3. 配置核心 注意:這部份內容有些是重覆 Linus 的 README 檔案中的相應章節或加以修訂。 在 /usr/src/linux 下執行″ make config ″ 這個命令將會啟始一個指令稿,而這個 指令稿會問你各種問題。它需要 bash ,所以要確定 bash 是 /bin/bash,/bin/sh 或 $BASH 。 你現在該準備好回答這些問題,通常用″ y ″或″ n ″就可以了。有一些很明顯或是 不重要的選項將不會在此加以說明。 1.3.1. Kernel math emulation (核心的浮點運算模擬) 如果你沒有數學輔助運算處理機(ie,你只有一臺單純的 386 或 486SX ),那麼你在 這里要回答″ y ″。如果你已經有數學輔助運算處理機卻還回答″ y ″,那也不必太 擔心 — linux 還是會去使用它而忽略掉核心的模擬程序。唯一的影響是編譯出來的核 心變大了。 1.3.2. Normal harddisk support (標準硬碟支援) 你在這里差不多都得回答″ y ″。它代表的意思是核心將會支援標準的 PC 磁碟,例 如大多數人使用的 IDE 界面硬碟。這不包括 SCSI 設備的支援。 1.3.3. Networking support (網絡支援) 如果你有連接網絡,譬如說,你與 internet 有連線,或是你將使用 SLIP,PPP,term 或其它方式撥接到 internet 上的話,回答″ y 。″ 1.3.4. Limit memory to low 16MB (限制記憶體在 16 MB) 如果你的記憶體不到 16 MB,幾乎一定要回答″ y ″;那麼當你使用這個核心的時候 將會節省一點記憶體。但是,當然羅,如果你有 16 MB 以上的記憶體而不回答″ n ″ 的話,這個新的核心將只使用其中的 16 MB ,即使你有 34 billion megs 也一樣。 也可能會有一些不良的 386 DMA controllers(或是一些與硬件有關的東西)無法正確 地定址到 16 megs 以上的記憶體位址;你的機器剛好有這種情況時(罕見),那麼你 也就只好回答″ y ″了。 1.3.5. Use -m486 flag for 486-specific optimizations (使用 -m486 旗標指定對 486 做最佳化) 這將會為核心做 486 最佳化處理。新的核心將會變得稍微大一些,如果你擔心的話的 話,其實它還是可以在 386 上執行。只是會比較慢,不過你感覺不出來的。 1.3.6. SCSI support (SCSI 的支援) 如果你有 SCSI 設備,那麼就回答” y 。”接著會有提示要求更進一步的資訊,像是 你是否要支援光碟機,磁碟機,還有你使用的是那一種 SCSI 介面卡。這部份請參閱 SCSI-HOWTO ,有更詳細的說明。 1.3.7. Network device support (網絡設備支援) 如果你有以太網絡卡,或者你想要使用 SLIP,PPP,或是并列埠界面卡,那就回答 ″ y ″,接著會有提示問你使用的是那一種網絡卡,或要使用那一種串列通訊協定。 1.3.8. Filesystems (文件系統) 這將會有提示要你回答所要支援的文件系統種類,計有: Standard( minix )— 新的套件不再建立 minix 文件系統,而且很多人不使用它, 但是把它配置在核心里仍然是個好主意。某些″ rescue-disk ″ 程序會用到它,而且 仍然有許多磁片可能用 minix 文件系統,因為 minix 文件系統對於處理磁片方面是最 好的。 Extended fs — 這是擴充文件系統的第一版,現在已經不再使用。使用的時機是,如 果你有需要,你就會知道的。 Second extented — 這是現在新發行的套件所廣泛采用的文件系統,你可能會有其中 一種。 xiafs filesystem — 這個文件系統曾經一度很普遍,但是在寫這份文件時,我已經不 知道有任何人在使用它了。 msdos — 嗯,你猜對了;如果你想要在 linux 下使用你硬碟中的 MS-DOS 分割區,或 是想將用 MS-DOS 格式化的磁片掛進來的話,回答″ y ″。 ums-dos — 這是一個相當 slick 的文件系統,它能使 MS-DOS 文件系統擁有更多的特 性,像是長檔名等等。這對那些不使用 MS-DOS 的人(像我)并不是很有用。 /proc — 這是最 slick 的文件系統之一(我猜這個概念是無恥地從貝爾實驗室里偷過 來的)。它不是你硬碟分割區里的任何東西,而是核心與程序之間的文件系統介面。許 多程序工具(像″ ps ″)都會用到它。 如果你已經將它安裝好了,有空不妨試試看″ cat /proc/meminfo ″或者是 ″ cat /proc/devices ″。有些 shells ,像是 rc ,會用 /proc/self/fd(在其它 系統上為 /dev/fd )來處理輸出入。幾乎可以確定你在這里得要回答″ y ″,有許多 重要的 Linux 標準工具是靠它來運作的。 NFS — 如果你在網絡環境下而且想要分享檔案,回答″ y 。″ ISO9660 — 絕大部分的光碟都使用這個文件系統。 OS/2 HPFS — 在編寫這份文件的時候,這個文件系統還只支援到 OS/2 HPFS 的讀取。 System V and Coherent — 這是為 System V 以及 Coherent 的分割區而設的。 1.3.8.1. 但是我不知道我需要那些文件系統! 好吧,鍵入″ 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 ″。它會給你一份目前使 用的核心所支援的文件系統列表。 1.3.9. Character devices (字元設備) 在這里,你將會發現許多設備名稱,用來設定你的印表機,匯流排滑鼠,PS/2 滑鼠( 大部分筆記型電腦使用內建的 PS/2 滑鼠),以及一些磁帶機驅動程序,selection 。 當有合適的選項時,回答” y ”。 注意:” Selection ”讓你能夠執行一個程序,這個程序使你可以在 X-windows 之外 使用滑鼠在各個虛擬控制臺間做剪貼的動作。如果你有串列滑鼠的話,這真的很棒,因 為它與 X-windows 之間的溝通良好,然而在編寫這份文件的時候,它跟 PS/2 滑鼠還 是處不來(它會鎖住滑鼠所使用的埠,使得你在殺掉這個 selection 程序之前都不可 能執行 X-windows 。)。 1.3.10. Sound card (聲卡) 如果你對於讓隔壁的人保持清醒有興趣的話,回答″ y ,″然後等一下會有一個配置 程序編譯并詳細詢問你所有關於你的聲卡的問題。 1.3.11. kernel hacking >這是從 Linus 的 README 里摘錄的: ″ kernel hacking ″配置的細節通常會產生一個更大或是更慢的核心(或者是又大又 慢),而且可能因為將一些常式配置成很活躍地去嘗試中斷一些不良的程序碼以便找出 核心里的問題( kmalloc() ),而使得核心變得比較不穩定。所以要產生一個核心″ 產品 ″的話,你在這里應該回答″ n ″。 1.4. 現在呢?( The Makefile ) 現在應該會有一個訊息告訴你核心已經配置好了,以及要你去″ check the top-level Makefile for additional configuration,”等等。 所以查看一下 Makefile。你應該不必改變它,但是看看無妨。一旦新核心完成, 你也可以用″ rdev ″指令來改變其中的選項。 2. 編譯核心 2.1. 清除與確認 當用來進行配置的指令稿執行完成時,它會告訴你去做″ dep ″跟″ clean 。”所以 要執行″ make dep 。″除非你的電腦真的很慢,否則它不會花太久時間的。Making depend 確定你已經具備所有必需的要件,像是含入檔以及諸如此類的東西。當它完成 後(你也可以在″ make dep ″之前執行它),執行″ make clean 。″這會清除核心 編譯的所有目的檔以及其它東西。不要忘記這個步驟。 2.2. 編譯時期 在執行清除與確認工作之後,你現在可以執行″ make ″或是″ make zdisk 。″ ″ make ″將會編譯核心,并且留給你一個叫做″ zImage ″的檔案(這一類的東西) 。這就是新的核心。″ make zdisk ″做的事也一樣,但是它會把核心放到你所希望的 磁片去,只要把這張磁片放在 a:。” zdisk ”對於測試新核心很方便;如果它完全 不行,只要把磁片拿掉再用舊的核心啟動即可。 如果你意外地刪除了核心或是什麼的,它也是個方便的啟動辦法。當你把一臺磁碟的內 容傾倒到另外一臺去時,你也可以用它來安裝新的系統(除了這些之外還有更多用途! NOW how much would you pay ?)。 所有近來的核心都是壓縮過的,所以有個” z ″在名字前面。核心是壓縮過的,當它 執行的時候會自動將自己解壓縮(一個節省磁碟空間的好方法)。 2.3. 其他可以″ make ″的東西 ″ make mrproper ″將會做更廣泛的″清除″。這個動作有時候是必須的,所以你可 能會希望在每次修補的時候執行它。″ make zlilo ″將會安裝核心,然後對它執行 LILO ,使你完成所有開機的準備,但是這只有在 lilo 已經以下列這種方式配置好的 時候才可以:核心為 /vmlinuz , lilo 在 /sbin 下,而且與你的 lilo 配置一致。 2.4. 安裝核心 在你已經獲得一個看起來能夠照你希望運作的新核心之後,現在是安裝它的時候了。大 大部份的人使用 LILO( Linux Loader )來做這件事。這是一個相當容易安裝的軟體 ,然而,它會因為配置檔而困擾人們。如果你沒有最新的版本,查看配置檔(不是舊版 的 /etc/lilo/config 就是新版的 /etc/lilo.conf ),看看里面有些什麼,它會告訴 你像這樣子的東西: image = /vmlinux label = Linux root = /dev/hda1 ... 首先,″ image = ″是設定為已經安裝的核心。大部份的人似乎都用 /vmlinuz ,但 是我用 /vmlinux 。″ lable ″ 則是由 lilo 用來告訴你現在要啟動的是那個核心或 作業系統,而″ root ″則是這個特別的作業系統的根目錄 / 。備份一份舊的核心( 無論什麼檔名),然後將你做的 zImage 拷貝進去,(例如,如果你用” /vmlinuz ″ 的話,就像這樣″ cp zImage /vmlinuz ”)。 接著重新執行 lilo — 在較新的系統上,你可以只執行″ lilo ,″但是在較舊的系 統上,你可能必須執行 /etc/lilo/install 或甚至是 /ect/lilo/lilo -C /etc/lilo/config 。 如果你想知道更多有關於 lilo 的配置,或是你并沒有 lilo 但是你想要安裝的話,從 你喜歡的 ftp 節點拿最新的版本然後依說明行事。 要能夠從硬碟啟動你的舊核心其中之一的話(這是另一個在新核心出狀況的情況下保護 你自己的方法),把 lilo 配置檔中所有的(包括一行)″ image = xxx ″ 拷貝到檔 案的最底端,然後把″ image = xxx ″改成″ image = yyy ,″其中的″ yyy ″是 你備份舊核心所存檔的名字。接著,把″ lable = xXx ″改成像是” lable = linux- backup。”然後重新執行 lilo 。 你可能得要加上一行″ delay = x ,″其中的 x 是以十分之一秒為單位的時間,這是 用來使 lilo 在啟動前先等一下,所以你可以中斷它的執行(例如用 shift 鍵)。然 後鍵入所備份的啟動映像之 lable (在發生了某些令人不愉快的事情的情況下)。 3. 修補核心 3.1. 使用修補檔 核心的小幅更新是以修補檔的方式發行。例如,如果你的版本是 1.1.45 ,而且你注意 到出現了一個″ patch46.gz ″可以用來升級它,這代表你可以藉由使用這個修補檔將 版本升級到 1.1.46 。你也許會想要先備份 source tree(″make clean ″然後″ cd /usr/src; tar cvf linux | gzip -c > old-tree.tar.gz″將會為你造出一份 tar 壓 縮檔,里面就是整個原始程序碼與其檔案架構。)。 現在接著繼續上面的例子,假設你已經取得了″ patch46.gz ″并放在 /usr/src 下。 cd 到 /usr/src 然後執行″ zcat patch46.gz | patch -p0 ″(如果并不是壓縮過的 修補檔,那麼就執行″ patch -p0 < patch46″)你將會看到許多東西飛逝而過(也許 它們會慢慢跳過,如果你的電腦真的很慢的話)告訴你它正試著應用 hunks ,以及是 否成功。 通常,這個過程快得無法仔細看清楚它的動作,所以你會無法確定它到底有沒有成功地 執行。那麼就得找找看一些可能不是那麼順利的事。cd 到 /usr/src/linux 并找尋檔 名有 .reg 的檔案。某些版本的修補檔(比較舊的版本,它們可能是在比較早期的檔案 系統上編譯的)會把這些沒有成功的操作記錄在檔名有 # 的檔案里。你可以用 ″ find ″來替你找;″ find . -name '*.reg' -print ″會處理這個工作。 如果一切正確無誤的話,執行第二節跟第三節所討論的″ make clean ,″″ config ,″以及″ dep ″。 關於 patch 指令另外還有一些選項。patch -s 將會抑制除了錯誤以外的所有其他訊息 。如果你把核心原始程序碼放在 /usr/src/linux 以外的地方,在該目錄下用 patch -p1 也可以乾凈俐落的執行修補任務。其它的 patch 選項在 manual pages 里 都有很詳細的描述。 3.2. 如果有錯誤發生 通常最常發生的問題是當 patch 修改一個叫做″ config.in ″ 的檔案時,這個檔案 看起來不怎麼對勁,因為你修改了一些選項來配合你的機器。這個問題已經小心的注意 過了,但還是可能有人會在較舊的版本上遭遇這個問題。 要修正這個問題的話,查看 config.in.rej 這個檔案里留下些什麼訊息。有修改過的 部份正常來說會在每一行開始的地方標上″ + ″和″ - ″。查看有標記的附近幾行, 然後記得它們是設成″ y ″或是″ n 。″現在編輯 config.in 檔,然後在適當的地 方把″ y ″改成″ n ″以及″ n″改成″y″。 執行″ patch -p0 < config.in.rej ,″如果成功的話(沒有錯誤),那麼你就完成 了。這個 config.in.rej 檔還是會留在那里,但是你可以砍掉它。 如果你仍然遭遇其它問題,那麼可能是你安裝了一份損壞的修補檔。如果 patch 顯示 ″ previously applied patch detected: Assume -R? ,″你可能使用了一些比你目 前的版本編號還低的修補檔(并不建議這樣做)。 要還原一個修補檔的話,在原先的修補檔上執行″ patch -R ″。 當修補檔真的失敗的時候,最好的辦法是從一個乾凈的,out-of-the-box source tree (例如從 linux-x.x.x.tar.gz 檔案其中之一)開始,再重新執行。 3.3. 砍掉 .orig 檔案 只要做過幾次修補以後,那些 .orig 的檔案將會開始堆積。例如,我的一個 1.1.51 版的 tree 最後一次做清掃是在 1.1.48 版(我想是吧)。刪除這些 .orig 檔案會節 省許多的磁碟空間。″ find . -name '*.orig' -exec rm -f {} ';' ″將會替你照料 這件事。某些版本的修補檔會用 tilde 來代替 .orig 。 有其它(更好的?)的辦法可砍掉這些 .orig 檔。用的最多的是以″ xargs ″來代替 ″ -exec: ″″find . -name '*.orig | xargs rm ″或是″ find . -name '*.orig' -print0 | xargs --null rm -- ″(後面這個比較安全。)。 3.4. 其它的修補檔 總是會有一些并不是由 Linus 發行的其它修補檔出現(我將稱之為″非標準的″ )。 如果你使用了它們, Linus 的修補檔可能會而無法正確地執行,那麼你不是得將它們 還原就是得因此而去修改原始程序碼或是修補檔。這個工作對初學者通常是很討厭,所 以,如果你對原始程序碼沒什麼研究,在使用 Linus 的修補檔之前先還原這些非標準 的修補檔。 然後你可以看看這些非標準的修補檔是否仍然可以執行。如果不行的話,那麼你要不就 繼續用舊的核心來修補以執行它們,要不就等別人發表能在你修補後的新核心上用的新 版非標準修補檔。 非標準的修補檔有多普遍?你有可能曾經聽過它們。我使用 Bill Paul 的不閃爍修補 檔來 make 我虛擬控制臺上的游標,因為我討厭會閃爍的游標。就我所知,到目前為止 這個特別的修補檔的最新版本是給 1.0 版的核心使用的,但是我仍然在 1.1.51 版下 使用它 — 我已經修改了它好幾次,因為它通常會搞亂 Linus 修補檔的 driver/char/ console.c 。 4. 附加的套件 你的 Linux 核心有許多在核心的原始程序碼本身里面并沒有說明的特性;這些特性一 般是經由外來的軟體來利用,在這里列出一部分最普遍的: 4.1. kbd Linux 的控制臺有著比你所能吃驚更多的特色。這包括切換字型,重新對映你的鍵盤, 切換顯示模式(比較新的核心)的能力等等。kbd 這套軟體里有能夠讓使用者做這些動 作的支援程序,還加上一大堆的字型以及幾乎足以適用任何鍵盤的一些鍵盤對映表。 4.2. hdparm 像很多軟體一樣,這曾經是一個核心修補檔及其支援程序。這些修補檔被公認為核心的 一部分,而用來最佳化以及調適你硬碟的支援程序一般是分開發行的。 5. 一些陷阱 5.1. 清除 如果你的新核心會做一些真的很奇怪的事(這曾經發生在我身上),有可能是因為你忘 了做清除( make clean )。癥狀從你的核心不正常地崩潰到奇怪的輸出入問題,一直 到可憐的執行效率等等不一而足,可以是任何事。最好也要確定你有做確認( make dep )。 5.2. 巨大或緩慢的核心 如果你的核心占用了大量的記憶體,或者它真的是很大很大,也或者是即使用你全新的 486DX6/440 來編譯卻都還像是永遠編譯不完的話,那麼有可能是因為你配置了太多不 必要的東西(設備驅動程序,文件系統等等)。如果你不會用到某些東西,那就不要配 置它,因為它真的會占用記憶體。 如果你的記憶體少於 16 Megs ,確定你在″ limit memory to low then 16MB ″這個 問題上回答的是″ y ″。這會造成很大的不同(尤其是只有在 4 MB 的系統上)最明 顯的癥狀是記憶體與磁碟之間異常大量的資料交換。如果你的磁碟發出很多噪音,檢查 一下你的核心配置。 你可以找出你機器上全部記憶體的數量,然後減掉 /proc/meminfo 里面的″ total mem ″或″ free ″指令所得的記憶體數量來得知核心使用了多少記憶體。你也可以執 行” dmesg ”(或者也可以查看核心的記錄檔,它一定在會你的系統里)。看起來就 像這一行: 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. 核心沒有編譯 如果它沒有被編譯,那麼可能是有個修補檔失敗了,或者是你從某個地方拿到的原始程 式碼有問題。也有可能是因為你的 gcc 版本不正確或壞掉了。確定 Linus 在 README 里所描述的符號鏈結都有正確建立。一般說來,如果核心沒能編譯,這表示在某些地方 有嚴重的錯誤。 5.4. 新版的核心似乎不能啟動 沒有執行 LILO ,或是沒有正確的配置它。有一次我曾經碰到的問題是出在配置檔里, 我用了″ root = /dev/hda ″而不是″ root = /dev/hda1″(這在剛開始時真的是 很討厭,但是一旦你有了一個可以用的配置檔,應該不需要去再去改變它) 5.5. 你忘了執行 lilo ,或系統根本不能啟動 噢!現在最好的辦法是用磁片啟動,并且準備另一張可以啟動的磁片(像是” make zdisk ”時做的磁片)。你得知道你的根目錄( / )所在的分割區以及它的格式( second extended, minix 等等)在下面的例子中,你也得知道你的 /usr/src/linux source tree 在那個分割區,它的格式,以及它一般會掛在那兒。 在這個例子中, 根目錄 / 是 /dev/hda1 ,而持有 /usr/src/linux 的分割區是 /dev/hda3 , 一般會掛在 /usr 下。它們都是 second extended 文件系統。可以運作 的核心映像叫做 zImage ,放在 /usr/src/linux 底下。 這個主意是這樣的,假若有一個可以運作的核心映像叫做 zImage 在 /usr/src/linux 下,可能可以把它用在新的磁片上。另外一個不一定會更好的變通辦法(這跟你的系統 怎麼組成的有關)在說明這個例子之後會討論到。 首先,從 boot/root 磁片或者是 rescue 磁片開機,然後將持有可運作核心的分割區 掛上來: mkdir /mnt mount -t ext2 /dev/hda3 /mnt 如果 mkdir 指令顯示該目錄已經存在,忽略掉不必理會它。現在,cd 到持有可運作核 心的地方(注意: /mnt + /usr/src/linux - /usr = /mnt/src/inux )。把一張格式 化過的磁片放進 a: 磁碟機,(確定不是你的 boot/root 磁片!),把映像檔傾倒到 磁片里去,然後配置你的根目錄分割區。 cd /mnt/src/linux dd if=zImage of=/dev/fd0 rdev /dev/fd0 /dev/hda1 cd 到根目錄 / 并且卸下標準 /usr 分割區: cd / umount /mnt 你現在應該可以從這張磁片正常的開機了。在這次開機後不要忘記執行 lilo (或是其 它無論你曾經做錯的什麼事)! 如同前面曾經提過的,還有另外一種很普遍的變通方式。如果情況是你有一個可以運作 的核心在放在 / (例如 /vmlinuz ),你也可以使用它。假定所有的條件都跟上面的 例子一樣,而我的核心映像是 /vmlinuz ,只要對上面的例子做這些改變: 把 /dev/hda3 改成 /dev/hda1( / 分割區),把 /mnt/src/linux 改成 /mnt ,并且 把 if=zImage 改成 if=vmlinuz 。至於前面有關注意如何推導出 /mnt/src/linx 的那 個部分可以忽略。 5.6. 系統表示” Warning: bdflush not running” 這可以算是一個相當嚴重的問題。從 1.0 版以後的核心開始(我記不清楚確實的版本 了,但大概是在 1994 年 4 月, 20 日左右),有個會周期性地更新文件系統緩沖區的 程序叫做″ update ”被升級或取代掉了。 取得″ bdflush ″的原始程序碼(你應該可以從你取得核心的地方找到),然後編譯 它(你可能會希望在舊版的核心下執行編譯及安裝)。它會以″ update ″為名安裝它 自己,而在此之後你的新核心應該會運作良好。 5.7. 系統顯示關於 obsolete routing requests 的奇怪訊息 取得新版的 route 程序,并且重新編譯舊的要件。 /usr/src/linux/route.h (這是 /usr/src/linux 下的一個檔案)已經做了修改。 6. □訣和技巧 6.1. 重導 make 或是 patch 指令的輸出 如果你想要記錄這些″ make ″或是″ patch ″ 指令到底做了些什麼,你可以把螢幕 的輸出重導到一個檔案去。首先,要知道你用的是是那一種 shell:″ grep root /etc/passwd″ 然後尋找看起來像″ /bin/csh ″一類的東西。 如果你使用的是 sh 或是 bash ,″ (command) 2>&1 | tee (output file) 。″將會 把一份 make 的輸出放到″ (output file) ″這個檔案去。 如果是 csh 或 bash,你應該使用″ (command) |& tee (output file) ″這個語法。 如果是 rc(注意:你應該不會是用 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.