機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
linux內(nèi)核的編譯
linux內(nèi)核的編譯
 更新時(shí)間:2009-8-12 16:58:20  點(diǎn)擊數(shù):0
【字體: 字體顏色
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.

---------------------------------------------------------------------------

Linux 2.0 Kernel Changes
---------------------------------------------------------------------------
[ 簡(jiǎn)介 ]   [ 目前版本 ]   [ 升級(jí)須知 ]   [ 如何得知目前程序的版本 ]
[ 該到哪里去抓這些更新檔案 ]   [ 其他 ]   [ 後記 ]
---------------------------------------------------------------------------
簡(jiǎn)介
******
     這份文件包括一些 Linux 下重要 package 的最新版的資訊,希望能幫助初次
     接觸、升級(jí)為 kernel 1.3.xx 的使用者能成功無誤的使用新的 kernel。希望
     (雖 然我知道一定會(huì)希望落空的...) 以後不會(huì)再看到有人問:『為什麼我的
     make 不 能用了?』『怎麼 ps aux 每次都出錯(cuò)?』.....
     這份文件理論上應(yīng)該是 Linux kernel Documentation/Changes
     的翻譯,不過能力有限,如果你發(fā)現(xiàn)有看不懂的
     地方,建議還是翻翻原文吧.... :)
     ----------------------------------------------------------------------
目前版本
**********
      - Kernel modules        穩(wěn)定版: 1.3.57, 測(cè)試版: 1.3.69k
      - PPP daemon            穩(wěn)定版: 2.2.0f
      - Dynamic linker (ld.so)1.7.14
      - GNU CC                2.7.2
      - Binutils              2.6.0.14
      - Linux C Library       穩(wěn)定版: 5.2.18, Beta 測(cè)試版: 5.3.12
      - Linux C++ Library     2.7.1.4
      - Termcap               2.0.8
      - Procps                0.99a
      - Gpm                   1.09
      - SysVinit              2.62
      - Util-linux            2.5
     ----------------------------------------------------------------------
升級(jí)須知
**********
     Network errors
     ================
     許多網(wǎng)絡(luò)的 script 的初始設(shè)定會(huì)在啟動(dòng)的時(shí)候加個(gè) route 到 localhost
     (127.0.0.1),但是他們的方法錯(cuò)誤。要解決這個(gè)問題,從你的網(wǎng)絡(luò)設(shè)定檔里面
     找出 "route add -net 127.0.0.1" 并改成 "route add -net 127.0.0.0" 即
     可。
     這個(gè)問題出現(xiàn)在 Red Hat 以及從其延伸出去的系統(tǒng) (Ex: Caldera)。如果
     你正是使用這些系統(tǒng),修改你的 /etc/sysconfig/network-scripts/ifup-lo,
     將 "route add-net $(IPADDR)" 這一行改成 "route add -net 127.0.0.0" 即
     可。
     Booting Changes
     =================
     kernel 1.3.xx 的 boot 程序做了些改善,現(xiàn)在你可以載入較大的 kernel
     (bzImage),另外也可以直接由 loader 來啟動(dòng) ramdisk (initrd)。有關(guān)
     initrd 的部份請(qǐng)參閱 Documentation/initrd.txt。如果想編譯較大的
     kernel,請(qǐng)使用 下列的 make 參數(shù):bzImage, bzlilo, bzdisk (各相當(dāng)於
     zImage, zlilo 和 zdisk)。如果你想使用這項(xiàng)新功能,你必須升級(jí)你的
     bootloader。LILO 請(qǐng)升級(jí) 為 0.19 (lilo.19.tar.gz),loadlin 請(qǐng)升級(jí)到 1.6
     (lodlin16.tgz)。如果你使 用的是罕見的 SysLinux 或是
     etherboot,最新版本分別為 1.3 和 2.0。
     C Library
     ===========
     Linux 最新的穩(wěn)定版 C library 是 5.2.18,如果你從 5.0.9 之前版本升級(jí)
     為這個(gè)版本,請(qǐng)一定務(wù)必必須閱讀 release.libc-5.2.18,因?yàn)?nbsp;make 及一些重
     要工具可能因升級(jí)而無法正常工作。
     目前正在 beta 的版本則是 5.3.12。這版本有些重大改變,一些有□的程序
     可能會(huì)遭遇麻煩 (以前的版本用 free() 來處理不是由 malloc()
     傳回的指標(biāo)沒有 問題,但是新版的 library 就有麻煩了),因此請(qǐng)先仔細(xì)閱讀
     release.libc-5.3.9! 新版的 library 更正了 dirent 的 bug -- 如果有
     define USE_GNU 的話,將會(huì)錯(cuò)將 d->reclen 定義為 d->namlen,但是有些 GNU
     package 卻是以錯(cuò)為正,例如 GNU make 3.xx。要更正這項(xiàng)錯(cuò)誤你必須 path
     後重新 compile。(release.libc-5.3.9 中有 make 的 patch
     以及何處可取得編譯好的 binary)
     另外,libc-5.3.x 有保全的漏洞,而 libc-5.3.12 已經(jīng)補(bǔ)好這個(gè)洞。因此如果
     你要使用測(cè)試版的 library,請(qǐng)記得使用 5.3.12 版。
     如果你遇到以下的錯(cuò)誤訊息:
     `fcntl_setlk() called by process 123 with broken flock() emulation'
     你也必須升級(jí)到 5.2.18 版。1.3.x 版 kernel 增加了 BSD 形式的 flock 系
     統(tǒng)呼叫,如果你使用舊版的 library
     就會(huì)有這個(gè)錯(cuò)誤訊息。不過這訊息一點(diǎn)影響
     也沒有,因此你可以忽略不管。如果你覺得這個(gè)訊息很煩,那就升級(jí)你的
     library 吧。如果你又煩又懶,那直接把 kernel fs/locks.c 里面的
     printk(KERN_WARNING "fcntl_setlk() called by process %d with broken
     flock()
     emulation\n", current->pid);
     去掉然後重新 compile。如果你是使用 aout 格式,你可以升級(jí)成 libc-4.7.6
     來解決這個(gè)問題。
     Termcap Library
     =================
     目前 Termcap 的版本是 2.0.8。如果你升級(jí)成這個(gè)版本,請(qǐng)閱讀 README,
     取得有關(guān) tegtent 函式更改的重要訊息。
     Procps Utility
     ================
     kernel 1.3.x 的 /proc 結(jié)構(gòu)已經(jīng)改了,因此你必須將 proc 升級(jí)為 0.99a 版
     而在最新的 kernel 中,檔案結(jié)構(gòu)又再次更改,但是 procps
     還沒有個(gè)正式升級(jí)版 反應(yīng)這個(gè)改變,所以還是使用 0.99a
     吧。你也可以找找流傳在外解決讓 0.99a 可以 和 kernel 1.3.94 相容的
     patch。
     Kernel Modules
     ================
     kernel 1.3.x 版幾乎已經(jīng)全部模組化了,也加入了 kerneld。想使用個(gè)功能,
     你必須更新到最新版的 modules。目前最新的穩(wěn)定版 modules 是 1.3.57
     (注), beta 版則到了 1.3.69k。這些都可以在你抓 kernel
     的同一地點(diǎn)取得,或是到 它的
     Homepage:http://www.pi.se/blox/modules/index.html。注意:如果你載入
     modules 會(huì)出現(xiàn)以下的訊息:
     gcc2_compiled, undefined Failed to load module!
     The symbols fromkernel 1.3.foo don't match 1.3.foo
     那就是該換到 1.3.69 的時(shí)候了。會(huì)出現(xiàn)這個(gè)錯(cuò)誤是因?yàn)槟闶褂米钚掳娴?br>     binutil,因此大部份的人還是停留在 1.3.57 即可。
     另外一點(diǎn)要注意的,你不能同時(shí)把 a.out 和 ELF 支援編譯成 modules,否則
     當(dāng)你為了能夠使用 insmod 而用 insmod 來載入 a.out/ELF modules 時(shí)會(huì)有
     Catch/22 狀況發(fā)生 (這是啥啊?)如果你的系統(tǒng)主要是 ELF 而你偶爾會(huì)需要用到
     a.out,你可以把 a.out 支援編譯為 modules,否則你最好把它直接放入
     kernel 之中。如果你還沒進(jìn)入 ELF 的世紀(jì) (不會(huì)吧..),在 compiler kernel
     時(shí)可以 直接把 ELF 支援去掉。另外的另外,在開機(jī)就會(huì) mount 上來的
     partition 的 FS 、device driver 記得要 compiler 進(jìn)
     kernel,不能把它弄成 modules。請(qǐng)不要 夸張到為了完全模組化而忘了把
     ext2fs 和 IDE dirver compiler 進(jìn) kernel 里...
     *注:在 kernel 目錄下已經(jīng)可以看到 2.0.0 版的 modules 了
     PPP driver
     ============
     你的 pppd 必須是 2.2.0 版或更新。最新的穩(wěn)定版本是 2.2.0f 可以在
     ftp://sunsite.unc.edu/pub/Linux/system/Network/serial/ppp/ppp-2.2.0f.tar.gz
     取得。
     Named pipes (SysVinit)
     ========================
     Linux 處理 named pipes 的方式改變了 (從 SunOS 方式變成 "正確" 的方式)
     ,這使得某些程序因此而失效了,最值得注意的就是 SysVinit。如果你的
     SysVinit 是 2.59 或更早的版本,在 shutdown
     時(shí)雖然可以正常工作,但是你會(huì)看到這樣 的錯(cuò)誤訊息:INIT: error reading
     initrequest 或是這些字不停的在卷動(dòng)...
     如果你使用 NCSA 的 httpd,你必須把 daemon 的 pre-spawn 設(shè)為 0,不過我
     建議你直接換成 Apache 的 httpd。
     新的 named pipes 方式也讓 Hylafax 發(fā)生問題,如果你有 Hylafax daemon,
     它會(huì)不斷用掉 CPU time 直到系統(tǒng)沒有 idle time
     為止。要修正這個(gè)錯(cuò)誤,修改 Hylafax 的 port.h,把
     CONFIG_OPENFIFO="O_RDONLY"
     改成
     CONFIG_OPENFIFO="O_RDWR"
     類似的處理方式 (把 named pipe 開啟方式從 read only 改成 read/write)
     可以解決因這個(gè)改變引起的問題。
     File Locking (Sendmail)
     =========================
     從 pre2.0.6 (1.99.6) 以後,file locking 方式不能夠混用,例如:你不能
     同時(shí)使用 flock 和 fcntl 來鎖住檔案。請(qǐng)參閱 Documentation/lock.txt
     取得更 詳細(xì)資料。這個(gè)對(duì)較舊版的 sendmail 造成影響 (注)。如果你發(fā)現(xiàn)
     sendmail 抱怨 無法 lock aliases.dir (或其他檔案),你必須更新 sendmail
     到 8.7.x 版。最 新版的 sendmail 可以在
     ftp://ftp.cs.berkeley.edu/ucb/src/sendmail/sendmail.8.7.5.tar.gz
     取得。
     *注:這個(gè)問題在 elm 2.4 pl 25 之中也會(huì)發(fā)生。
     Uugetty
     =========
     舊版的 uugettys 在新 kernel 里會(huì)有問題,請(qǐng)更新之。
     ftp://sunsite.unc.edu/pub/Linux/system/Serial/getty_ps-2.0.7h.tar.gz
     Kbd
     =====
     使用非 ASCII 的字元/字型的人,應(yīng)該升級(jí)成:
     ftp.funet.fi:/pub/OS/Linux/PEOPLE/Linus/kbd-0.91.tar.gz
     *注:這個(gè)我也不太了解,不過我沒升級(jí)好像也沒事....
     Console
     =========
     Linux 的 console type (雖然知道是什麼東西可是不會(huì)翻) 改變了。如果
     你的版本太舊了,使用上發(fā)生問題 (像說 joe 不能用啦...),該是升級(jí)
     termcap 的時(shí)候了。要修正這個(gè)問題,把 linux 加入 /etc/termcap
     之中,或是到
     http://www.ccil.org/~esr/ncurses.html
     逛逛。另外你也需要更新 terminfo。以 root 來做下面的動(dòng)作:
     ln -s /usr/lib/terminfo/l/linux /usr/lib/terminfo/c/console
     當(dāng)然,最好的解決辦法,就是去抓最新的 termcap 回來安裝:
     ftp://sunsite.unc.edu/pub/Linux/GCC/termcap-2.0.8.tar.gz
     Also, the console driver is now responsible for keeping track of
     correspondence between character codes and glyph bitmaps. If you
     encounter problems, try `loadunimap def' to get back the default
     correspondence. (不太會(huì)翻,大概是說如果你的螢?zāi)槐緛響?yīng)該顯示文字的確
     變成一堆亂碼的話,可以用 loadunimap def 來解決)
     Hdparm
     ========
     Hdparm 為了利用到新版 kernel 的新功能而作了更新,最新版可以在:
     ftp://sunsite.unc.edu/pub/Linux/kernel/patches/diskdrives/hdparm-2.7.tar.gz
     抓到。(目前已經(jīng)有看到 2.9 版了)
     IP Accounting
     =============
     All IP packets coming in or going out via one of the network
     interfaces are now passing the accounting chain. So, packets being
     forwarded are passing this chain twice. Since pre2.0.7 (aka 1.99.7),
     accounting rules can be defined so that they will only match in one
     direction (either incoming or outgoing).
     There also exists a possibility to match on device names and/or device
     addresses, so that only packets coming in/going out via that device
     (network interface) match with a rule. You'll need to get ipfwadm from
     ftp://ftp.xos.nl/pub/linux/ipfwadm/ipfwadm-2.1.tar.gz ;to use this.
     IP Firewalls
     ============
     The IP firewall code has been changed drastically during 1.3.x. There
     are now 3 categories of firewall rules: one for incoming packets, one
     for outgoing packets, and one for packets being forwarded. There also
     exists a possibility to match on device names and/or device addresses,
     so that only packets coming in/going out via that device (network
     interface) match with a rule. This is especially useful to prevent
     spoofing. You'll need to get
     ftp://ftp.xos.nl/pub/linux/ipfwadm/ipfwadm-2.1.tar.gz ;to use this.
     IP Masquerading
     ===============
     IP masquerading is now part of the standard kernel. However, you
     always need to load separate modules (ip_masq_ftp.o and/or
     ip_masq_irc.o) if you are going to use FTP or IRC in combination with
     masquerading. You'll need to get
     ftp://ftp.xos.nl/pub/linux/ipfwadm/ipfwadm-2.1.tar.gz ;to use this.
     (不清楚、不了解、不會(huì)用,還是不要亂翻... 不過看起來都跟
     ipfwadm-2.1.tar.gz 有關(guān)...)
     ISDN support
     ==============
     新版的 kernel 支援 ISDN,要使用 ISDN 你必須有:
     ftp://ftp.franken.de/pub/isdn4linux/isdn4k-utils-1.3.97.tar.gz
     Term is broken
     ================
     Term (一個(gè)功能類似 slirp 的東西) 在 kernel 1.3.60 以後就無法使用
     了,偏偏作者現(xiàn)在正在渡假中,因此沒有解決的方法。我建議你學(xué)著改用
     slirp。
     Networking
     ============
     /proc/net 里有些欄位在新 kernel 里改變了,你必須升級(jí)你的 net-tools。
     目前最新的穩(wěn)定版是 net-tools-1.2.0.tar.gz,而最新的 beta 則是
     net-tools-1.32-alpha.tar.gz。如果你要升級(jí),或許升級(jí)為最新的 beta
     版會(huì)比 較好。
     Xntpd
     =======
     舊版的 Xntpd 和新版的 kernel 合不來,請(qǐng)升級(jí)為 xntp3.5f.tar.Z
     Sound driver
     ==============
     1.3.x 版 kernel 里的 sound driver 會(huì)讓 vplay 無法使用。要解決這個(gè)
     問題請(qǐng)抓新版的 sndkit:
     ftp://ftp.best.com/pub/front/tasd/snd-util-3.5.tar.gz
     有些使用者回報(bào)說許多音效工具程序 (Ex: cdd2wav-sbpcd) 必須重新 compile
     才能在新版的 kernel 下使用。
     Tcsh
     ======
     如果你的 tcsh 在新的 kernel 下舉止怪異,請(qǐng)從
     ftp://anise.ee.cornell.edu/pub/tcsh
     抓新版的 tsch source,并修改 config_f.h 加入一行:#define SYSMALLOC
     你可以在
     ftp://sunsite.unc.edu/pub/Linux/system/Shells/
     抓到新版的 binary,這應(yīng)該會(huì)更正這個(gè)問題。
     Make
     ======
     如果更新之後 make 卻罷工了,請(qǐng)仔細(xì)閱讀你更新的 libc 的 release note。
     這并不是 kernel 的錯(cuò),不過很多卻誤以為是。當(dāng)你更新 libc 到 5.3.9 時(shí)你
     也要更新 make 它才會(huì)正常工作。升級(jí) libc 也可能讓 xterm
     罷工,如果這不幸 是個(gè)事實(shí),請(qǐng)重新 compile xterm。
     Loop device
     =============
     1.3.x 的 kernel 有個(gè) loop device,讓你可以把一個(gè)檔案 mount 成一個(gè) file
     system,然後你可以作些有趣的事情,像是加密的文件系統(tǒng)(encrypted file
     systems)... 如果你想使用這個(gè)功能,你必須更新你的 mount:
     ftp://ftp.win.tue.nl/pub/linux/util/mount-2.5X.tar.gz
     加密的文件系統(tǒng)可以抓:
     ftp.funet.fi:/pub/OS/Linux/BETA/loop/des.1.tar.gz
     Multiple device
     =================
     新的 kernel 有支援 Multiple device (讓你可以把好幾個(gè) partition 結(jié)合成
     一個(gè) logic device)。要使用這個(gè)功能請(qǐng)抓:
     ftp://sweet-smoke.ufr-info-p7.ibp.fr/pub/Linux/md034.tar.gz
     Arp
     =====
     Arp daemon 也加入新的 kernel 之中,請(qǐng)到:
     http://www.loran.com/~layes/arpd/index.html
     取得更多資訊以及 arpd。
     Quota
     =======
     新的 kernel 之中也支援 quota。請(qǐng)抓:
     ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/subsystems/quota/all.tar.gz
     然後把里面的 mntent.h 蓋過 /usr/include/mntent.h,如此就可以快樂的
     compile 出 quota 來啦。
     Process Accounting
     ====================
     Process accounting 的功能也包含在新版的 kernel 之中。要使用這個(gè)
     功能請(qǐng)抓:
     ftp://iguana.hut.fi/pub/linux/Kernel/process_accounting/acct_1.3.73.tar.gz
     Bdflush
     =========
     bdflush 功能已經(jīng)加入新 kernel 之中,你不需要再去 patch 就可以
     直接擁有這個(gè)功能。
     AMP
     =====
     新的 kernel 之中直接支援 AMP (Advanced Power Management)。AMP 主要
     使用在膝上型電腦,讓你監(jiān)視目前電池的使用狀況,也可以幫你節(jié)省電池的電力
     。要發(fā)揮這項(xiàng)功能請(qǐng)抓:
     ftp://tsx-11.mit.edu/pub/linux/packages/laptops/apm/apmd-2.4.tar.gz
     iBCS and DOSEMU
     =================
     要支援 1.3.x 的 iBCS,請(qǐng)抓:
     ftp://tsx-11.mit.edu/pub/linux/BETA/ibcs2/ibcs-1.3-960404-ALPHA.tar.gz
     至於可在新 kernel 中使用的 DOSEMU,請(qǐng)抓:
     ftp://tsx-11.mit.edu/pub/linux/ALPHA/dosemu/Development/dosemu-0.63.1.19.tgz
     記得照 README.newkernel 里面所說的更新你的 /usr/include/sys/vm86.h,
     否則將無法 compile。
     Mtools and Fdutils
     ====================
     在 1.3.x kernel 之中,軟碟的控制程序已經(jīng)改變,但是為了向前相容,在 2.0
     之前的 kernel 舊的程序還是可用,不過會(huì)顯示警告訊息,但是到 2.1.x 時(shí)
     舊程序?qū)⑼耆А?br>     為了避免問題 (或說是免除那惱人的訊息),你必須重新編譯所有會(huì)用到軟碟
     控制的程序,像是 mtool 及 fdutil。請(qǐng)抓:
     ftp://sunsite.unc.edu/pub/Linux/utils/disk-management/mtools-3.0.src.tar.gz
     ftp://sunsite.unc.edu/pub/Linux/system/Misc/fdutils-4.3.src.tar.gz
     在將來,fdformat 將會(huì)完全消失,所以請(qǐng)僅早學(xué)會(huì) superformat 的使用方法。
     ----------------------------------------------------------------------
如何得知目前程序的版本
************************
      GNU CC:  gcc -v and gcc --version
      PPP:     pppd -h (wrong but it show the version)
      Libc:    ls -l /lib/libc.so.5
      Libc++:  ls -l /usr/lib/libg++.so
      Binutils:ld -v
      ldd:     ldd -v and ldd -V
      termcap: ls -l /lib/libtermcap.so.*
      modules: insmod -V
      procps:  ps --version
     ----------------------------------------------------------------------
該到哪里去抓這些更新檔案
**************************
     請(qǐng)愛用 CCCA ftp 及 ARCHIE.....
     ----------------------------------------------------------------------
其他
******
     以上提到的這些檔案在臺(tái)灣的 ftp server 上面都找得到,請(qǐng)自行用 archie
     搜尋。珍惜有限的頻寬,盡量避免出國..... 如果你的系統(tǒng)是 Red
     Hat,大部份的更新都有 RPM 可用。安裝之前先到 Red Hat 的 mirror site
     看看。注意,你可能要用 -force 參數(shù)才能完成這些 升級(jí)。
     如果你發(fā)現(xiàn)有軟體在 kernel 1.3.x 上面無法正常工作的,或是那些 kernel
     的功能需要另外抓別的套件來使用的,請(qǐng) mail 給 Chris Ricker
     (gt1355b@prism.gatech.edu)。 如果你發(fā)現(xiàn)翻譯上有任何誤謬,請(qǐng) mail 給
     Dinosaur.bbs@bbs.ee.nthu.edu.tw
  • 上一篇: Linux 網(wǎng)管 123 --- 第6章. 一般系統(tǒng)管理問題 -4.關(guān)閉刪除使用者帳號(hào)
  • 下一篇: 在Linux中制作VCD
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1