Linux編譯內核

Linux編譯內核

準備工作
通常要運行的第一個命令是:
#cd /usr/src/linux;make mrproper
該命令確保源代碼目錄下沒有不正確的.o文件以及文件的互相依賴

配置
接下來的內核配置過程比較煩瑣,但是配置的適當與否與日後Linux的運行直接相關,有必要了解一下一些主要的且經常用到的選項的設置。
配置內核可以根據需要與愛好使用下面命令中的一個:
#make config(基於文本的最爲傳統的配置界面,不推薦使用)
#make menuconfig(基於文本選單的配置界面,字符終端下推薦使用)
#make xconfig(基於圖形窗口模式的配置界面,Xwindow下推薦使用)
#make oldconfig(如果只想在原來內核配置的基礎上修改一些小地方,會省去不少麻煩)
這三個命令中,make xconfig的界面最爲友好,如果你可以使用Xwindow,那麼就推薦你使用這個命令.
在繁雜的配置工作完成以後,下面你就可以自己到杯茶耐心等候了。與編譯有關的命令有如下幾個:
#make dep
#make clean
#make zImage
#make bzImage
#make modules
#make modules_install
#depmod -a
第一個命令make dep實際上讀取配置過程生成的配置文件,來創建對應於配置的依賴關係樹,從而決定哪些需要編譯而那些不需要;
第二命令make clean完成刪除前面步驟留下的文件,以避免出現一些錯誤;
第三個命令make zImage和第四個命令make bzImage實現完全編譯內核,二者生成的內核都是使用gzip壓縮的,只要使用一個就夠了,
它們的區別在於使用make bzImage可以生成大一點的內核,比如在編譯2.4.0版本的內核時如果使用make zImage命令,那麼就會出現system too big的錯誤提示。
建議大家使用make bzImage命令。
後面三個命令只有在你進行配置的過程中,在回答Enable loadable module support (CONFIG_MODULES)時選了"Yes"纔是必要的,
make modules和make modules_install分別生成相應的模塊和把模塊拷貝到需要的目錄中。
嚴格說來,第七個命令和編譯過程並沒有關係,它是生成模塊間的依賴關係,這樣你啓動新內核之後,使用modprobe命令加載模塊時就能正確地定位模塊。

更新
經過以上的步驟,我們終於得到了新版本的內核。爲了能夠使用新版本的內核,我們還需要做一些改動:
#cp /usr/src/linux/System.map /boot/System.map-2.4.0test8
#cp /usr/src/linux/arch/i386/bzImage /boot/vmlinuz-2.4.0test8
以上這兩個文件是我們剛纔編譯時新生成的。下面修改/boot下的兩個鏈接System.map和vmlinuz,使其指向新內核的文件:
#cd /boot;rm -f System.map vmlinuz
#ln -s vmlinuz-2.4.0test8 vmlinuz
#ln -s System.map-2.4.0test8 System.map
#shutdown -r now
正常啓動.您的機器現在就使用你的新內核了.

下面是RH 推薦的編譯方式. 注意edit Makefile
老話新說,RedHat 公司 推薦編譯內核方法
本文部分取自於RH300(RHCE Rapid Track Course)課本.
本文假定你用的是Redhat 7.2,用grub 管理啓動.準備編譯7.2 自帶的內核
cd /usr/src/linux-2.4
make mrproper
edit Makefile 文件
把EXTRAVERSION= 改成有你特色的文字, 比如:
EXTRAVERSION=-10me
make menuconfig or make xconfig
make dep
make bzImage
make modules
make modules_install
cp System.map /boot/System.map-2.4.7-10me
cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.7-10me
new-kernel-pkg --install --mkinitrd --depmod 2.4.7-10me

重新編譯內核指南
摘要

  Linux的一個重要的特點就是其源代碼的公開性,全世界任何一個軟件工程師都可以將自己認爲優秀的代碼加入到其中,由此引發的一個明顯的好處就是Linux修補漏洞的快速以及對最新軟件技術的利用。而Linux的內核則是這些特點的最直接的代表。


Linux的一個重要的特點就是其源代碼的公開性,全世界任何一個軟件工程師都可以將自己認爲優秀的代碼加入到其中,由此引發的一個明顯的好處就是Linux修補漏洞的快速以及對最新軟件技術的利用。而Linux的內核則是這些特點的最直接的代表。

  爲什麼要升級內核

  正如它的名字的字面意義,Linux的內核承擔着Linux操作系統的最爲核心的任務,是其它程序和硬件等運行過程中的仲裁者:它要管理所有進程的內存,保證它們都能平等得到處理器的時隙。此外,它還提供程序和硬件之間的接口等功能。

  通常,更新的內核會支持更多的硬件,具備更好的進程管理能力,運行速度更快、更穩定,並且一般會修復老版本中發現的許多漏洞等,經常性地選擇升級更新的系統內核是Linux使用者的必要操作內容。

  一般,內核的版本序列號使用三個數字表示,如2.2.14,版本號越高表示功能越強。版本號分爲兩個系列:一種是產品系列,以偶數命名,例如,1.2.x、2.0.x、2.2.x等,運行穩定,已經經過較爲周密的測試;另外一種是開發測試系列,以奇數命名,用以進行最新功能的測試,不建議初學者和生產過程中使用。

  本文的後面部分將分別以內核2.0.34到2.2.14的升級過程介紹內核升級用到的步驟、概念、注意事項以及可以參考的更多文檔,文中出現的斜體字是直接輸入的命令。

  內核的配置與編譯

  Linux當前支持的CPU類型包括x86、ARM、DEC Alpha、SUN Sparc、M68000、MIPS、PowerPC等,應該說上述類型已經包括絕大多數用戶使用的CPU型號。在安裝與配置過程中,Linux會自動識別這些型號。

  通常要運行的第一個命令是:#cd /usr/src/linux;make mrproper。確保源代碼目錄下沒有不正確的.o文件以及文件的互相依賴。

  接下來的內核配置過程比較煩瑣,但是配置的適當與否與日後Linux的運行直接相關,有必要了解一下一些主要的且經常用到的選項的設置。

  配置內核可以根據需要與愛好使用下面命令中的一個:

  #make config (基於文本的最爲傳統的配置界面)

  #make menuconfig (基於文本選單的配置界面)

  #make xconfig (基於圖形窗口模式的配置界面)

  #make oldconfig (如果只想在原來內核配置的基礎上修改一些小地方,會省去不少麻煩)

  進行配置時,大部分選項可以使用其缺省值,只有小部分需要根據用戶不同的需要選擇。例如,如果需要內核支持DOS分區的文件系統,則要在文件系統部分選擇FAT或DOS系統支持;系統如果配有網卡、PCMCIA卡等,需要在網絡配置中選擇相應卡的類型。

  選擇相應的配置時,有三種選擇,它們分別代表的含義如下:

  “Y”- 將該功能編譯進內核

  “N”- 不將該功能編譯進內核

  “M”- 將該功能編譯成可以在需要時動態插入到內核中的模塊。

  將與核心其它部分關係較遠且不經常使用的部分功能代碼編譯成爲可加載模塊,有利於減小內核的長度,減小內核消耗的內存,簡化該功能相應的環境改變時對內核的影響。許多功能都可以這樣處理,例如像上面提到的網卡的支持、對FAT等文件系統的支持。

  配置完內核,接下來需要對內核源代碼文件的依賴性和完整性進行檢驗,並且進行編譯,此時要保證系統所使用的gcc版本在gcc-2.7.2以上:

  #make dep (確保關鍵文件在正確的位置)

  #make clean (確保所有有關文件都處於最新版本狀態)

  #make zImage (編譯壓縮形式的內核)

  在需要內核支持較多的外設和功能時,內核可能變得很大,此時可以編譯大內核:

  #make bzImage

  編譯的時間與機器的硬件條件及內核的配置等因素有關,以筆者的64MB內存的賽揚300爲例,編譯內核一次大致需要20多分鐘。所獲得的內核的位置在/usr/src/linux/arch/i386/boot目錄下,當然這裏假設用戶的CPU是x86型的。

  如果選擇了可加載模塊,編譯完內核後,要對選擇的模塊進行編譯:

  #make module (編譯選擇的模塊)

  #make module-install (將編譯後的模塊轉移到系統標準位置)

  模塊在系統中的標準目錄位於/lib/modules/x.y.z,後面的x.y.z是版本號,爲安全起見,在運行#make modules-install之前最好對/lib/modules進行備份。模塊通常是帶有擴展名.o的文件,使用命令#lsmod可以對當前內核的模塊進行列表。

  軟件下載與解包

  選擇相對快速並且具有權威性的站點下載最新的內核源代碼包,例如條件允許的話可以到下面的站點下載:

  ftp://sunsite.unc.edu/pub/linux/kernel

  國內Linux用戶可以到下面的站點下載:

  http://studio.openunix.org

  http://www.clinuxworld.com

  注意,如果升級版本的跨度很大,並且預計會配置外部模塊時,還要下載最新的模塊工具modules-x.y.z.tar.gz。

  Linux系統的核心代碼存放於目錄/usr/src/linux,實際上,該目錄是一個鏈接,指向當前所用的核心版本的目錄,例如如果當前使用的版本是2.0.34,則該核心的實際目錄應該是:/usr/src/linux-2.0.34。而新下載的內核中的目錄是linux,這樣,直接在/usr/src下解包會導致原來的內核目錄被覆蓋。所以穩妥的做法是,首先刪除鏈接linux,然後解包、更名、重新鏈接。

  在解包前要確認在/usr/src目錄下沒有叫linux的目錄,或者不再想保留該目錄。

  另外,隨着Linux內核功能的增強及對更多外設的支持,文件包也越變越大,當前最新的穩定版2.2.14內核壓縮包的大小約爲14MB,但實際上解壓縮及編譯等環節,要求/usr/src目錄所在的分區的空閒空間大於60MB字節。

  啓用新內核

  將編譯好的新內核拷貝到系統目錄/boot下,例如


#cp /usr/src/linux/arch/i386/boot/zImage /boot/zImage-2.2.14

  然後,編輯系統引導配置文件/etc/lilo.conf,仿照原有選項添入新內核選項,給它起一個明顯好記的標籤(label),記住此時最好保留原有內核以及相應的選項,這樣不用害怕升級失敗而機器啓動不了,至少還可以使用舊的內核引導自己的計算機。保存編輯後退出,此時要記住運行命令:#lilo,更新系統引導映象,這樣對lilo.conf的修改才能起作用。

  重啓機器後,在LILO的提示符下按“Tab”鍵,則應該看到加入的新內核選項。

  對於當前國內進行漢化後的Linux版本,由於其中的幾個主要版本是在內核中進行,例如衝浪平臺的Xteam Linux、藍點Bluepoint Linux等,所以使用這些發行版本的用戶如果按照上面的步驟進行內核升級則會導致漢化失敗、系統運行不穩定等後果。用戶需要等待廠家發行新內核的漢化包,然後到廠家指定的下載站點下載,按照其中的說明進行升級。

LINUX KERNEL 配置編譯中文指南


  開發嵌入式操作系統

  BY THE WAY ,想成爲LINUX高手嗎?你需要熟練掌握KERNEL COMPILE 、XCONFIGRATER 、LINUXCONFIG、 SAMBA四大利器,你隨時可以找到後三者的大量相關資料,但內核編譯就只好啃爲數不多的英文了。

目錄

  序言

  第一章 內核編譯的基礎

  第一節內核簡介

  第二節內核版本

  第三節編譯原因

  第四節準備工作

  第二章 內核編譯的流程

  第一節編譯開始

  第二節配置內核 {核心內容}

  1.代碼成熟等級

  2..處理器類型和特色

  3.對模塊的支持

  4.基本的選擇

  5.即插即用支持

  6.塊設備支持

  7.網絡選項

  8.電話支持

  9.SCSI設備的支持

  10.I2O接口適配器

  11.網絡設備支持

  12.配置業餘無線廣播

  13.紅外支持

  14.ISDN的文件系統

  15.舊型光驅類型(非IDE界面的光驅)

  16.字符設備

  17.USB支持

  18.文件系統

  19.控制檯驅動

  20.聲卡驅動

  21.Kernel hacking

  第三節編譯內核

  第四節啓用內核

  附錄:LILO分析

  第三章 內核編譯的應用

  第一節嵌入式Linux技術

  第二節你的Linux有多大(及實踐結果)

第一章 內核編譯的基礎

第一節 內核簡介

  內核,是一個操作系統的核心,它負責管理系統的進程、內存、設備驅動程序、文件和網絡系統,決定着系統的性能和穩定性。 就好比DOS下的IO.SYS和MSDOS.SYS一體,我們可以把這兩個文件叫做DOS的核心。Linux也有它的核心,通常在根目錄下,一個叫 vmlinuz的文件。我們用這個文件來控制我們的整臺PC,包括周邊設備和軟硬磁盤機、CD-ROM、聲卡等。簡單地說,核心就是操作系統本身。沒有了 它,就像一個無人住的家,沒有人去維持這個家的動作。一個安定的家需要一個很用心已能當機立斷的主人:一部電腦也需要很有效率已穩定的核心,也就是操作系 統。因此,核心是整個系統維持下去的關鍵。

  Linux的一個重要的特點就是其源代碼的公開性,所有的內核源程序都可以在/usr/src/linux下找到,大部分應用軟件也都 是遵循GPL而設計的,你都可以獲取相應的源程序代碼。任何一個軟件工程師都可以將自己認爲優秀的代碼加入到其中,由此引發的一個明顯的好處就是 Linux修補漏洞的快速以及對最新軟件技術的利用。而Linux的內核則是這些特點的最直接的代表。

  想象一下,擁有了內核的源程序對你來說意味着什麼?首先,我們可以瞭解系統是如何工作的。通過通讀源代碼,我們就可以瞭解系統的工作原 理,這在Windows下簡直是天方夜譚。其次,我們可以針對自己的情況,量體裁衣,定製適合自己的系統,這樣就需要重新編譯內核。在Windows下是 什麼情況呢?相信很多人都被越來越龐大的Windows整得莫名其妙過。再次,我們可以對內核進行修改,以符合自己的需要。這意味着什麼?沒錯,相當於自 己開發了一個操作系統,但是大部分的工作已經做好了,你所要做的就是要增加並實現自己需要的功能。在Windows下,除非你是微軟的核心技術人員,否則 就不用癡心妄想了。
先介紹一下編譯核心的選項,希望能對大家消除對內核的神祕感有所幫助。

  1.代碼成熟等級

  2..處理器類型和特色

  3.對模塊的支持

  4.基本的選擇

  5.即插即用支持

  6.塊設備支持

  7.網絡選項

  8.電話支持

  9.SCSI設備的支持

  10.I2O接口適配器

  11.網絡設備支持

  12.配置業餘無線廣播

  13.紅外支持

  14.ISDN的文件系統

  15.舊型的光驅類型(非IDE界面的光驅)

  16.字符設備

  17.USB支持

  18.文件系統

  19.控制檯驅動

  20.聲卡驅動

  21.Kernel hacking

第二節 內核版本

  由於Linux的源程序是完全公開的,任何人只要遵循GPL,就可以對內核加以修改併發布給他人使用。Linux的開發採用的是集市模 型(bazaar,與cathedral--教堂模型--對應),爲了確保這些無序的開發過程能夠有序地進行,Linux採用了雙樹系統。一個樹是穩定樹 (stable tree),另一個樹是非穩定樹(unstable tree)或者開發樹(development tree)。一些新特性、實驗性改進等都將首先在開發樹中進行。如果在開發樹中所做的改進也可以應用於穩定樹,那麼在開發樹中經過測試以後,在穩定樹中將 進行相同的改進。一旦開發樹經過了足夠的發展,開發樹就會成爲新的穩定樹。開發數就體現在源程序的版本號中;源程序版本號的形式爲x.y.z:對於穩定樹 來說,y是偶數;對於開發樹來說,y比相應的穩定樹大一(因此,是奇數)。確定是以″ root ″的身份簽入,然後cd 到 /usr/src 。uname -r 這個指令將會顯示版本。內核版本的更新可以訪問<http://www.kernel.org/>。

第三節 編譯原因

  Linux作爲一個自由軟件,在廣大愛好者的支持下,內核版本不斷更新。新的內核修訂了舊內核的bug,並增加了許多新的特性。如果用戶想要使用這些新特性,或想根據自己的系統度身定製一個更高效,更穩定的內核,就需要重新編譯內核。

  通常,更新的內核會支持更多的硬件,具備更好的進程管理能力,運行速度更快、更穩定,並且一般會修復老版本中發現的許多漏洞等,經常性地選擇升級更新的系統內核是Linux使用者的必要操作內容。

  爲了正確的合理地設置內核編譯配置選項,從而只編譯系統需要的功能的代碼,一般主要有下面四個考慮:

  ---自己定製編譯的內核運行更快(具有更少的代碼)

  ---系統將擁有更多的內存(內核部分將不會被交換到虛擬內存中)

  ---不需要的功能編譯進入內核可能會增加被系統攻擊者利用的漏洞

  ---將某種功能編譯爲模塊方式會比編譯到內核內的方式速度要慢一些

  以上是針對成熟的Linux套件如Redhat Linux而言,我的目的是爲建造嵌入式Linux操作系統做準備,也是必由之路。

第四節 準備工作

第一部分 新版本內核的獲取和更新

  Linux內核版本發佈的官方網站是<http://www.kernel.org/>, 國內各大ftp上一般都可以找到某些版本的內核。新版本的內核的發佈有兩種形式,一種是完整的內核版本,另外一種是patch文件,即補丁。完整的內核版 本比較大,比如linux-2.4.0-test8.tar.bz2就有18M之多。完整內核版本一般是.tar.gz(.tgz)文件或者是.bz2文 件,二者分別是使用gzip或者bzip2進行壓縮的文件,使用時需要解壓縮。patch文件則比較小,一般只有幾十K到幾百K,極少的會超過1M。但是 patch文件是針對於特定的版本的,需要找到自己對應的版本才能使用。

  編譯內核需要root權限。把需要升級的內核拷貝到/usr/src/下(下文中以2.2.16的內核的linux-2.2.16tar.gz爲例)

                        #cp linux-2.2.16tar.gz /usr/src


  先查看當前/usr/src的內容,注意到有一個linux的符號鏈接,它指向一個類似於linux-2.2.14(對應於現在使用的內核版本號)的目錄。首先刪除這個鏈接:


                        #cd /usr/src

#rm -f linux


  現在解壓下載的源程序文件。如果所下載的是.tar.gz(.tgz)文件,使用命令:




#tar -xzvf linux-2.2.16tar.gz


  如果下載的是.bz2文件,例如linux-2.2.16tar.bz2,使用命令




#bzip2 -d linux-2.2.16tar.bz2

#tar -xvf linux-2.2.16tar


  現在再來看一下/usr/src下的內容,發現現在有了一個名爲linux的目錄,裏面就是需要升級到的版本的內核的源程序。還記得那 個名爲linux的鏈接麼?之所以使用那個鏈接就是防止在升級內核的時候會不慎把原來版本內核的源程序給覆蓋掉了。現在也需要同樣處理:




#mv linux linux-2.2.16

#ln -s linux-2.2.16 linux


  如果還下載了patch文件,比如patch-2.2.16,就可以進行patch操作(下面假設patch-2.2.16已經位於/usr/src目錄下了,否則需要先把該文件拷貝到/usr/src下):




#patch -p0 < patch-2.2.16


第二部分 準備主機板和相關硬件的說明手冊

  其實也不用太詳細,只要知道您的硬件是屬於哪一類型就行了。例如:有一張SCSI卡,那就要知道這張卡的名字,有一臺cd-rom,就 要知道這臺光驅是哪一種牌子的,是否爲標準的IDE/ATAPI界面,還是另有專屬接口卡呢?或者,主機版是否有支持Triton芯片(通常586以上的 電腦常有),這些信息能幫助我們,使得設定變得清楚且容易。

  因此,不管您有什麼使用手冊,準備好吧。即使現在不用,將來還是會用到的(設X-window system時要顯示卡的手冊)。

第三部分 檢查聲卡的IRQ設定和其種類

  如果配有一張聲卡,除了要知道卡的種類外(例如 Sound Blaster)還需要知道這張卡的IRQ地址。一般來說,盧卡的IRQ地址是5或7而IO地址則爲220。DMA則l,不過,有時不同的聲卡可能會有不同的設定。因爲稍後的選項裏,就會要填入這些數字。

第四部分 編譯核心的硬件需求

  在編譯核心時,確定您的RAM最好在8MB以上, 否則可能會很慢而且問題會很多,記得查看swap有沒有打開(用free指令)。此外,最好不要超頻,不然很有可能會發生signal 11的錯誤,使得編到一半的核心停了下來,其實編譯核心就好比編譯程序一樣,只是因爲構成核心的程序太多了,因此我們能小心儘量小心。


第二章 內核編譯的流程

  概述編譯的流程:

  編譯開始----- make mrproper;檢查所需的連接

  配置核心

  編譯核心

  編輯/etc/lilo.conf

  重新啓動新核心

  重新啓動機器

  發現並修理故障(仔細看我的文章,應該沒多少問題了)

第一節 編譯開始

  通常要運行的第一個命令是:




#cd /usr/src/linux

#make mrproper


  該命令確保源代碼目錄下沒有不正確的目標.o文件以及文件的互相依賴。如使用剛下載的完整的源程序包進行編譯,本步可以省略。而如果多次使用了這些源程序編譯內核,那麼最好要先運行一下這個命令。

  確保/usr/include/目錄下的asm、linux和scsi等鏈接是指向要升級的內核源代碼的。它們分別鏈向源代碼目錄下的 真正的、該計算機體系結構(對於PC機來說,使用的體系結構是i386)所需要的真正的include子目錄。如:asm指向 /usr/src/linux/include/asm-i386等。若沒有這些鏈接,就需要手工創建,按照下面的步驟進行:




# cd /usr/include

# rm -r asm linux scsi

# ln -s /usr/src/linux/include/asm-i386 asm

# ln -s /usr/src/linux/include/linux linux

# ln -s /usr/src/linux/include/scsi scsi


  這是配置非常重要的一部分。刪除掉/usr/include下的asm、linux和scsi鏈接後,再創建新的鏈接指向新內核源代碼 目錄下的同名的目錄。這些頭文件目錄包含着保證內核在系統上正確編譯所需要的重要的頭文件。也是上面又在/usr/src下"多餘"地創建了個名爲 linux的鏈接的原因之一.

  一旦萬事俱備,轉到/usr/src/linux。現在你也許想停下細讀一下文檔文件,實際上如果你有些特別的硬件,或幾種光驅驅動程 需要自己動手設置,他們通常這樣做,當引導時這些驅動程序將給出警告,這並不礙事他們照常工作少,閱讀擴展名爲.txt .h.c的文件。通常我發現他們具有共性且易於配置。如果你不想冒險,你沒必要做。記住你照樣可以解開tar文件(或再次安裝.rpm文件)恢復前的文 件。


第二節 配置內核 核心內容

  接下來的內核配置過程比較煩瑣,但是配置的適當與否與日後Linux的運行直接相關,有必要了解一下選項的設置。

  配置內核可以根據需要與愛好使用下面命令中的一個:

  #make config(基於文本的最爲傳統的配置界面,不推薦使用)

  #make menuconfig(基於文本選單的配置界面,字符終端下推薦使用,必須安裝ncurses-dev和tk4-dev庫)

  #make xconfig(基於圖形窗口模式的配置界面,Xwindow下推薦使用)

  #make oldconfig(如果只想在原來內核配置的基礎上修改一些小地方,會省去不少麻煩)

  如果不能使用Xwindow,那麼就使用make menuconfig好了。界面雖然比上面一個差點,總比make config的要好多了。

  選擇相應的配置時,有三種選擇,它們分別代表的含義如下:

  Y--將該功能編譯進內核

  N--不將該功能編譯進內核

  M--將該功能編譯成可以在需要時動態插入到內核中的模塊

  在每一個選項前都有個括號, 但有的是中括號有的是尖括號,還有一種圓括號。 用空格鍵選擇時可以發現,中括號裏要麼是空,要麼是"*",而尖括號裏可以是空,"*"和"M"。這表示前者對應的項要麼不要,要麼編譯到內核裏;後者則 多一樣選擇,可以編譯成模塊。而圓括號的內容是要在所提供的幾個選項中選擇一項。

  在編譯內核的過程中,最煩雜的事情就是這步配置工作了,不清楚到底該如何選取這些選項。實際上在配置時,大部分選項可以使用其缺省值, 只有小部分需要根據用戶不同的需要選擇。選擇的原則是將與內核其它部分關係較遠且不經常使用的部分功能代碼編譯成爲可加載模塊,有利於減小內核的長度,減 小內核消耗的內存,簡化該功能相應的環境改變時對內核的影響;不需要的功能就不要選;與內核關心緊密而且經常使用的部分功能代碼直接編譯到內核中。下面對 選項分別加以介紹


  1.Code maturity level options代碼成熟等級

  此處只有一項:prompt for development and/or incomplete code/drivers,如果要試驗現在仍處於實驗階段的功能,比如khttpd、IPv6等,就必須把該項選擇爲Y了;否則可以把它選擇爲N。 在Linux的世界裏,每天都有許多人爲它發展支持的driver和加強它的核心。但是有些driver還沒進入穩定的階段。但其作者很歡迎其他人去測試 這些driver並提出一些bugs。這個問題是說,有一些drive還在做測試中,問您是否要選擇這些drive或支持的程序碼。

  如果鍵入Y,往後將會出現一些還在測試中的東西給您做選擇。(像Java的程序碼和PCI bridge),臺則就鍵入N。

  2. Processor type and features處理器類型和特色

  #Processor family (386, 486/Cx486, 586/K5/5x86/6x86, Pentium/K6/TSC,PPro/6x86MX) [PPro/6x86MX] ------選擇處理器類型,缺省爲Ppro/6x86MX。它會對每種CPU做最佳化,讓它跑得快又好。一般來說,沒有選擇正確的CPU並不會有重大的 影響(特別是選擇386 ,這樣編譯出來的核心也許會比較小但它的速度可能就會變慢了)。所以,最好要知道您的CPU是哪一種。不過,如果您的gCC編譯器是2.7.0版以前的。 那麼只能選擇386或是486。

  #High Memory Support------內核支持的最大內存數,缺省爲1G。可以支持到4G、6.4G,一般可以不選.

  #Math emulation------這項詢問是否需L1nux核心模擬數學浮點運算器。如果有486Dx、AMD以及Pentium機器的話,這個選項就不必 選了,因爲它們都有內建的浮點運算器。協處理器是在386時代的寵兒,現在早已不用了。不過,對於有內建浮點運算器的人來說,選了這個選項並不會因此讓內 建的浮點運算器失效。但它會增大核心約45KB。

  #MTTR (memory type range register)support------選擇該選項,系統將生成/proc/mtrr文件對MTRR進行管理,供X server使用。同時用來啓動pentinum pro和pentinum II 的特殊功能,如果你用的不是這類CPU就選N,否則也僅僅是使內核變大而已。

  #Symmetric multi-processing support------對稱多處理支持。除非有多個CPU,否則就不用選了。


  3. Loadable module support對模塊的支持.

  首先,瞭解一點關於模塊的知識。模塊就像你特意插入核心中的某些東西,如果辦公室有一個小網絡並且有時想用一下(但並不經常),也許你 想把網卡編譯成一個模塊。使用這個模塊,機器必運行和存取/libs下的模塊,意思是驅動程序(IDE,SCSI等但必須是NFS支持的網卡),文件系統 (通常是ext2但也可以是nfs)和核心類型(最好是elf)必須編譯在內核並且不能是模塊,模塊只有核心引導時才起作用,驅動程序(來網絡)的存取, 和文件系統安裝。這些文件必須編譯在覈心內否則將能安裝啓動分區。如果安裝啓動分區和網絡,你需要網絡系統文件,和己經編譯的網卡。爲什麼要使用模塊? 模塊化使核心變的更簡捷,它減少核心釋放大量的受保護的空間。模塊的安裝和卸載使用的空間是可重複分配利用的。如果你打開機器有90%以上的時間用到一個 模塊,編譯它。運用這類模塊是浪費內存的,原因是一旦你編譯了模塊它們同樣將佔用大量的內存,核心需要一些代碼來掛上模塊。記住,核心在保護空間運行,但 模塊並不是。這麼說,並不經常使用我的設備,把它編譯成只支持ext2,ide和elf。而一直使用的網卡,把其它的編譯成模塊:如a.out, java, floppy, iso9960, msdos, minix, vfat,smb,nfs,smcultra(ethernetcard),serial,printer,sound,ppp,等等。它們許多只是在這 或那用上那麼幾分鐘。嚴格的說,這樣做會使核心增大許多而降低它的執行速度。這時我們就可以把這些可能會用的驅動程序編譯成一個—個的模塊,在需要用的時 候才用insmod這個指令加入核心,不用的時候也能rmmod把它從核心移除,或是用lsmod察看目前所載入的模塊。這裏面有三項:

  #Enable loadable module support------除非準備把所有需要的內容都編譯到內核裏面,否則該項應該是必選的。

  #Set version information on all module symbols------通常,我們更新核心版本之後,模塊耍重新的編譯。這個選項使您不必更新編譯模塊而能使用以前的模塊。可以不選它。但如果您選 y,則按照它的說明,您必須有genksyms這個程序(可用whereis指令查看有無此程序)。

  #Kernel module loader------讓內核在啓動時有自己裝入必需模塊的能力,建議選上。

  注意:在開機就會 mount 上來的 partition 的 FS 、device driver 記得要 compiler 進 kernel,不能把它弄成 modules。請不要誇張到爲了完全模組化而忘了把ext2fs和IDE dirver compiler 進 kernel 裏。


  4. General setup普通的屬性設置

  這部分內容非常多,一般使用缺省設置就可以了。下面介紹一下經常使用的一些選項:

  #Networking support------網絡支持。因爲在Linux裏面,有虛擬的網絡設備(1ookback),可以模擬整個網絡。而且,—些程序需要它。必須,沒 有網卡也建議你選上。注意:選N,則7.(Networking options 網絡選項)和11.(Network device support網絡設備支持) 不會出現。


  #Limit memory to low 16MB ------大部分的人這一選項 N。除了主機板沒有辦法處理16MB以上的內存,或者有超過16MB以上的內存但卻常常發生一些很奇怪的問題。這時,您可以試試這個選項。有些主機板對超 16MB內存的處理並不是很好,通常這些都是舊型的主機板。還有,在說明文件中有提到,如果內存超過64MB的話,用LILO加一些參數給Linux核心 (例:mem=80M),並且把您主機板上的Cache加到512K。這樣,整體效率才能提升。

  #PCI support ------PCI支持。如果使用了PCI的卡,當然必選。

  #PCI bios support ------主機板是否有PCI界面。如果有,則您必須回答y。

  PCI是586電腦的主要界面(一些486主機板上也有),這個界面能讓您插入所謂的PCI顯示卡,或是PCI的網絡卡等。這種界面是 現在電腦的主要趨勢,因此如果有PCI的插槽。您就可以選Y。除了一些很舊很舊但有支持PCI的主機板外(這些有bugs的舊型主機板可能會因爲這個選項 而讓核心掛掉)。


  #PCI access mode (BIOS, Direct, Any) [Any] ------設置Linux探測PCI設備的方式。選擇“BIOS”,Linux將使用BIOS;選擇“Direct”,Linux將不通過BIOS;選 擇“Any”,Linux將直接探測PCI設備,如果失敗,再使用BIOS。

  #Support for hot-pluggabel devices ------熱插拔設備支持。支持的不是太好,可不選。

  #PCMCIA/CardBus support------PCMCIA/CardBus支持。有PCMCIA就必選了。

  #PCI bridge optimization (experimental) ------在某些支持BIOS上,它能讓存取速度加快,建議是選Y。

  #Backward-compatible /proc/pci------設備兼容,自己看help。

  #System V IPC 如果將來想編譯dosemu(DOS模擬器),則這個選項一定要選,它是一個讓各個程序(process)同步且能彼此交換數據的函數庫和一些系統的調用,沒它,很多的程序將會無法執行。


  #BSD Process Accounting------

  #Sysctl support------除非你的內存少的可憐,否則你應該啓動這個功能,啓用該選項後內核會大8K,但能讓你直接改變內核的參數而不必重新開機。

  #Kernel support for A.OUT binaries ------a.out的執行文件是比較古老的可執行碼,用在比較早期的UNIX系統上。Linux最初也是使用這種碼來執行程序,一直到ELF格式的可 執行碼出來後,有愈來俞多的程序碼隨着ELF格式的優點而變成了ELF的可執碼。將來勢必完全取代a.out格式的可執行碼。但目前由於沿有許多的程序還 沒有取代過來,所以只好選擇Y,等將來有一天,全部的程序都變成了ELF的天下時,那時再disable掉。

  #Kernel support for Linux/Intel ELF binaries ------由上所述,這個當然y哩,因爲目前gcc-2.7.0以上的都有支持ELF了,如果沒有選擇這一項,可能會使用相當多的程序因此無法執行。

  注意:編譯模塊成ELF和編譯支持ELF二進制。不編譯適當的支持’’gotcha’’是明智的,如果機器結構是Pentium或 486你將得到高效的代碼,但一個386的核心將運行在32-bit compatible clone;一個Pentium核心將不。爲大多機器製作一張緊急啓動盤,最好在386下編譯,而386並不能運行在Pentium下編譯的核心。


  另外一點要注意的,你不能同時把 a.out 和 ELF 支援編譯成 modules,否則當你爲了能夠使用 insmod 而用 insmod 來載入 a.out/ELF modules 時會有 Catch/22 狀況發生。如果你的系統主要是 ELF 而你偶爾會需要用到a.out,你可以把 a.out 支援編譯爲 modules,否則你最好把它直接放入 kernel 之中。如果你還沒進入 ELF 的世紀,在 compiler kernel 時可以直接把 ELF 支援去掉。

  #Kernel support for JAVA binaries ------ 這一項是正在做測試中的產品,但是如果想寫有關Java的程序,希望它能在Linux的機器上跑。那麼,可以選擇把它編成一個模塊或是直接把它編進核心裏。


  #Power Management support ------電源管理支持。

  ##Advanced Power Management BIOS support------高級電源管理BIOS支持。這通常是用在筆記本電腦上的東西,如果您有APM的BIOS,支持省電的設備的(有電池的那種), 那麼您可以選上這項,一般人這一項是選n,以避免一些可能會發生的問題。後有8個選項。


  #Parallel port support ------串口支持。

  5. Plug and Play configuration即插即用支持

  Linux對即插即用目前支持的不如Windows,好有些情況下會和其他設備產生衝突(I/O,DMA,IRQ等)。這個選項對PCI設備沒有影響,因爲他們天生就是PNP設備。。

  #Plug and Play support (CONFIG_PNP) ------ 選擇“y”,內核將自動配置即插即用設備。原來PNP還有這個意思。

  # ISA Plug and Play support ------ 選擇“y”,內核將自動配置基於ISA總線的即插即用設備。


  6. Block devices塊設備支持

  這個就得針對自己的設備情況來選了:

  #Normal PC floppy disk support (CONFIG_BLK_DEV_FD) [Y/m/n/?]------普通PC軟盤支持。

  #Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support ------選擇“y”,內核將提供對增強IDE硬盤、CDROM和磁帶機的支持。在硬盤沒有做得很大的時候,一般的 IDE卡和 BIOS只能支持小於 540 MB的硬盤。不但如此,那時也只能支持二顆硬盤。但現今的硬盤動不動就是1GB以上,今年主流是30~50G,而且常常都會超過一二顆硬盤。如此一來,新 的主機板就開始支持加強型的IDE界而(Enhanced IDE),以支持到540MB以上的硬盤。所以,如果您的IDE界面是Enhanced的,請您選Y,底下就會出現八部分IDE界面的選項,這些選項能加 快您的IDE界面的速度和對某些芯片做一些最佳化。但如果您的硬盤或光盤全都是SCSI界面的,那麼選N以跳過下面選項。

  #use old disk-only driver on primary interface------通常是選擇N。因爲我們有其他新的drivers可用。這個選項的意思是說,如果您的IDE界面是很舊很舊的那種的。那 麼,就可以使用這個drives 驅動那個舊型的IDE界面(可裝二臺硬盤;或是一臺硬盤,一臺光盤)。而現今流行的 Enhanced IDE則有兩個界面,共可以接四臺硬盤。我們稍後會有 driver支持它。

  #Include IDE/ATAPI CDROM support------如果希望核心支持IDE/ATAPI界而的光驅,選擇Y。如果有光驅,但它附有一張接口卡,必須把排線接到那張專屬接口卡上; 或者是接到聲卡上的,則這個選項也需要選N,稍後我們會有非IDE的光驅廠牌讓我們挑選。現今的光驅通常是IDE/ATAPI界而的,所以這個選項通常是 Y。


  #Support removable IDE interfaces(PCMCIA)------這個選項對大部分的人全選n,除非您有PCMCIA的東西,這通常是筆記本電腦上看得到的東西。 PCMCIA是一個組織,在以前是設計內存條的。但現在他們對於PC CARDS定了一個標排,並很廣泛的應用在1aptap的電腦上。不但有所謂的PCMCIA的硬盤,甚至有網絡卡、SCSI卡等,不過,大部分的人並不需 要這個選項。

  這個選項選完後,以下則是Linux核心對幾種芯片的IDE界面做修正或是加強它。  

  #CMD640 chipset bugfix/support------ 很多 486和 586的主機板都是用 CMD640的芯片,它是Neptune芯片和 SIS芯片的結合。不過,這種芯片有它的缺點,在許多的情形下,它會造成數據的流失和錯誤。如果您選了這一項,則Linux核心會爲您小心的尋找這些錯誤 並修正它。而且,它會打開對二個IDE界面的支持。不過,在它的說明文件中提到,如果您的主機板沒有PCI界面只有VESA總線界面卻希望有這項功能的 話,則您必須傳一些參數給核心(ideo=cmd640_vlb)。如果不確定上面所說的,選擇Y。

  #CMD640 enhanced support------一般來說,對於硬盤的存取速度來說,有所謂的 PIO MODES值設定,現今的 IDE界面及 BIOS應該都能偵測到正確的硬盤PIO MODE值了。此值愈高表示硬盤的存取的速度愈快。可是,有些主機板的B10S還是舊式的,不能抓到比較高的 PIO MODE值,如此一來,便不能發揮整臺硬盤的效率。這個設定告訴讀者說:如果您的IDE界面是CMD640爲基礎的界面,但是您的BIOS並不能抓到正確 的PIO MODE值,那麼,這個選項可以自動的找到硬盤正確的PIO MODE值。

  #RZ1000 chipset bugfix/support------這個選項如同前面的CMD640一樣。不過,它的芯片是RZ1000的芯片,這種芯片是以Neptune芯片爲 主的一種芯片,而目、有很多的486和 586的主機板都在使用它。可以查查主機板的說明書或是 IDE接口卡的說明書做確定。文件上提到,選擇這個將會降低一些速度,但是數據能百分之百的正確。


  #Intel 82371 PIIX(Triton I/II) DMA support------對於586的Pentium電腦來說,有相當多的主機板都是用Intel的Triton芯片,使用這種芯片的最大好處是支持直 接內存存取DMA,而節省您的CPU時間。在以往還沒有DMA這個東西時,讀取硬盤需要耗用許多的CPU時間。如此一來,CPU被佔用,就不能充分的發揮 它的功效。後來,DMA出來後,硬盤的讀取便靠Triton或其他有支持DMA的IDE界面的芯片,直接與它們做溝通,而節省了大量的 CPU時間,但這必須您的硬盤和主機板有同時支持 DMA的 IDE界面的芯片,直接與它們做溝通而節省了大量的 CPU時間。但這必須您的硬盤和主機板有同時支持DMA MODE才行。


  ##other IDE chipset support------如果這上選項選y,則會出現下列六種其他的芯片或廠牌供您選擇。




* NOte: most of these also require special kernel boot paraaeters

ALI M14xx support

DTC-2278 support

Holtek HT65608 support

PROMISE DC4030 support

QDI QD6580 support

UMC 8672 support


  上面這六種廠牌的芯片依硬件配備而使用,但它們有共同的特點就是必須傳一些參數給核心。如果找不到您的芯片,那麼也沒關係。上這些選項只不過對這些芯片做最佳化罷了。


  ## Additional Block Devices其他的塊設備


  #Loopback device support------大部分的人這一個選項都選N,因爲沒有必要。這個選項的意思是說,可以將一個文件掛成一個文件系統。如果要燒光盤片的,那麼您 很有可能在把一個文件燒進去之前,看看這個文件是否符合IS09660的文件系統的內容,是否符合您的需求。而且,可以對這個文件系統加以保護。不過,如 果您 想做到這點的話,您必須有最新的mount程序,版本是在2.5X版以上的。而且如果您希望對這個文件系統加上保護,則您必須有des.1.tar.gz 這個程序。注意:此處與網絡無關。


  #Multlnle devices driver support------這個選項可以讓把整個硬盤分區變成一個單獨的區塊設備,您必須有md035.tgz這個程序。而且在做這件事之前請將您的硬盤備份,因爲它尚在測試階段。一般人對這個選項是選N。


  #RAM disk support------如果使用過DOS下的ramdrive程序,應該能瞭解這個選項的意義。它可以把內存當成硬盤來做存取就如同一般的硬盤一樣, 可以format它,或是放一些文件在裏頭。然後,當您關機這些數據也隨着之而去了。如果的RAM夠大,可以考慮玩玩這選項,但一般人都不需要。


  #XT hard disk support------支持XT的古董硬盤,這是IBM電腦時代的東西,如果您還有這種很舊很舊的硬盤。那麼,您可以把它編進核心或是編成一個模塊。大部分的人這個選項都是選擇N的。


  #Compaq SMART2 support------


  #Mulex DAC960/DAC1100 PCI RAID Controller support------RAID鏡像用的。


  #Logical volume manager(LVM)support------邏輯卷管理支持。


  #Multiple devices driver support------多設備驅動支持。


  #RAM disk support------RAM盤支持。


  7. Networking options  網絡選項


  這裏配置的是網絡協議。 


  #Packet socket ------ 選擇“Y”,一些應用程序將使用Packet協議直接同網絡設備通訊,而不通過內核中的其它中介協議。


  #Kernel/User Network link driver------這個是在測試中的程序碼,一般人不需要用。依它的說明,它允許在覈心、模塊或程序間的某些部分間,彼此做雙向的溝通。如果想使用arpd,則這個程序碼就要加進核心裏。


  #TCP/IP networking------選擇“Y”,內核將支持TCP/IP協議。這個選項無論如何請您選擇Y,即使沒有網絡卡,或是沒有連到網絡上的設備,在 linux上仍有所謂的lookback設備而且有些程序需要這個選項。在說明文件中提到,如果您沒有打開這個設定,則X-window system可能會有問題(回爲它也需要 TCP/IP)。 


  #Network firewalls------選擇“Y”,內核將支持防火牆。Firewalls依英文看是防火牆。在網絡愈來愈發達的今天,網絡安全的考慮也愈來愈重 要了。在局域網上找一臺電腦來保護自己的考慮也愈來愈多了。可以在一局域網上找一臺電腦來保護自己區域內的電腦。這樣的結果是,所有外部的電腦如果要連進 內部的電腦就必須通過這臺裝有Firewalls電腦的同意。所以,如果您希望這臺電腦有着過濾網絡的功能的話,那麼這個選項要選 Y。而且,等一下有個IP firewalling的選項也要選y;但下面的forwarding/gatewaying要選n,如此才能讓它正常動作。大部分的人這個選項選N。


  #Network alasing------允許有多個IP地址。


  #IP:forwarding/gatewaying ------ 和 Firewall相反,這個選項是用來疏導網絡的。一個gateway(也就是router),要幫忙疏導兩個網絡間的數據傳送。這臺機器必須要有兩張網 絡卡,連接兩個個同的網絡,做疏導網絡的工作。如果選擇了這個選項,則表示想讓這臺負責做router。那麼,就必須有兩張網絡卡了。另外有一種情形是, 如果您有MODEM(通過串列界面以 SLIP和 PPP協議)和網絡卡,並用它們來連上Internet。這時您也一樣可以執行IP-routing服務,也需把這個選項打開。


  #IP:multicasting------所謂的multicasting是羣組廣播,它是用在視頻會議上的協議,如果想送一個網 絡封包(網絡的數據),同樣的一份數據將送往十部機器上。您可以連續送十次給十臺機器(點對點的傳送),也可以同時送一次,然後讓十臺機器同時接收到。當 然後者比前者好,由於視頻會議要求是最好每個人都能同時收到同一份信息,所以如果您有類似的需要,這個選項就要打開。同時您還必須去找相關的軟件。


  #IP: accounting------如果您打開這個選項,您就可以在/proc/net下看到系統對於整個網絡狀況的紀錄。所以一般的人這個選項都是選y。 而且,如果您設計把這臺Linux機器當router用,那麼讀者可以因爲這個選項而獲得許多有關於網絡lP控制的信息和它的輸送情形。不過,您必須在底 下的選擇中選擇proc系統(其實proc文件系統一定要選,不選很多程序會不能用!)


  #IP:aliasing support------也許您只有一張網絡卡,但經由這個設定,您可以擁有數個IP地址。假設您已經有一個lP地址了,您還想再加入其他的IP地址,這時,您可以依下面的程序來做。


  在 shell下鍵入:


  sunlyy:/#ifconfig eth0:0其他的IP地址(這個IP地址不能與其他機器重複)


  sunlyy:/# route-add-host其他的IP地址 dev eth0: 0


  如此您就可以同時擁有兩個IP地址了。當然,如果想把這個IP地址去除,那麼可以鍵人:


  sunslyy:/# ifconfig eth0:0- IP地址


  這樣您就可以把加入的IP地址去除。不過在使用此選項前,前面的那一個aliasing Network選項也要選上去。


  #IP: PC/TCP compatibility mode------大部分人都選n。除非在使用DOS下的NCSA-TCP/IP軟件連進Linux機器時遇到了困難,或者有不相容的情形出現。這時,您可以試着把這個選項打開,看看是否能解決這個問題。


  #IP Reverse ARP------如果您的Linux希望提供bootd的服務,就是讓沒有硬盤或軟盤也能夠開機並且上網絡,只要它們有網絡卡有連接到網絡的話。此時, 您必須執行一個指令叫rarp來設定哪些電腦的網絡卡可以如此。不過一般人都沒有這個需要,所以答n。


  #IP:Disable Path MTU Discovery (normall yenable)------ 大部分的人這個選項是選擇N。除非發現用DOS下的ncsa的telnet程序連到Linux機器上出問題。這是很多人的問題,如果發生了DOS下的 telnet程序不能連進Linux時,除了可以改用Nsysutel的telnet程序來解決外,還可以在編譯核心的時候,把這一項選 Y。 MTU(Maximal Transfer Unit)叫做最大的傳輸單位,是說我們一次送往網絡的信息大小。而Path MTUD iscovery的意思是,當Linux發現一些機器的傳輸量比較小時,我們會分送網絡信息給它。如此可以增加網絡的速度,所以我們大部分都選N,也就是 Enable。


  #Ip:Dorp source routed frames------通常我們一個網絡的封包在丟出去後就不管它了,不過,在TCP/IP協議裏,您可以設定讓那些幫您繞路的機器回送一個是否這個封 包已經送達了的消息。不過,這會導至網絡安全上的問題,所以很少用,一般來說我們選擇Y。


  #IP:Allow large windows(not recommended if<16Mb of memory=)------如果有超過16MB以上的內存,那麼建議打開這個選項,可以增加傳輸的速度。在一般長距離的網絡傳輸下要預備傳輸的數據可以 先儲存在緩衝區,等到對方的迴應時再一次會過去。因此,您必須有內存來作爲緩衝區。


  #The IPX Protocol------IPX是一種傳輸協議,它是Novell的一種網絡協議,通常用在區域或是Windows的網絡下。如果您希望Novell 的機器資源共享(例如用他們的打印機或是硬盤),那麼這個選項則要選y。至於存取文件的格式是NCPFS的格式,稍後把這個文件系統選上來,以便支援這個 文件系統。 如此一來,您就可以通過Novell的IPX通訊協議去存取它們的數據了。或者,您希望從dosemu(DOS的模擬器)裏用IPX協議,這時也要把它選 進來。


  #Full internal IPX network------提供了一個完整的內部IPX網絡,預設選項是N,因爲它可能會讓一些應用的服務程序(RIP/SAP)當掉。


  #Appletalk DDP------AppleTalk是存在於蘋果機上的一種通訊協議,用來蘋果電腦之間的網絡通迅,通過AppleTalk,彼此的電腦間可以打印和分 享文件。如果您需要連上這樣的網絡,可以把這個選項打開,如此就能加入他們與這些電腦做溝通了,或者把這項編成一個模塊亦可。


  #Amateur Radio AX.25 Level2------


  #Bridging(EXPERIMENTAL)------選這兩個可以讓Linux變成一個網絡上的網橋,用來做不同網絡間的溝通,通常一般人不需要。


  #Qos and/or fair queueing(服務質量公平調度)也支持了,還有kHTTPd,不過這些都還在實驗階段。


  8. Telephony Support電話支持


  原來是Linux下可以支持電話卡,這樣你就可以在IP上使用普通的電話提供語音服務了。記住,電話卡可和modem沒有任何關係。


  9. SCSI support SCSI設備支持


  如果有 SCSI 設備,就回答 Y 。現在一般PC機不會有SCSI。接着會有提示要求更進一步的資訊,像是你是否要支援光驅,硬盤,還有你使用的是那一種 SCSI 界面卡。這部份請參閱SCSI-HOWTO ,有更詳細的說明。如果你的啓動分區是SCSI設備,不要選擇SCSI模塊支持。在一般的SCSI後是SCSI低級設備驅動程序。再次重申,模塊僅僅是用 在不在啓動分區的設備。


  #SCSI disk support------指硬盤而言,如果有SCSI硬盤,那麼就要選這個選項。


  #SCSI tape support------指磁帶機而言,如果您有SCSI的磁帶機,那麼就要選這個選項。


  #SCSI CDROM support------指CDROM,如果您有SCSI光驅,這一項一定要選。


  #SCSI generic support------指其他有關SCSI的東西,也許您有一臺SCSI的掃描器或是燒錄機,或是其他有關SCSI的配備,您就要選這一項。而且,除此之外,您還必須準備關於這些配備的軟件。


  ##Some SCSI devices(e.g. CD jukebox)support multiple LUNs


  #Probe a11 LUNs on each SCSI device------通常這個選項大部分的人都不會選。我們舉個例子來說,如果您的SCSI光驅是那種多片裝的,就是一臺光驅,但可以一次放好幾片光盤片的那種。這種我們叫做Lun。


  #Verbose SCSI error reporting(kernel size+=12K)------如果認爲您的SCSI硬件配備有些問題,想了解一下它出現的錯誤信息。那麼您可以把這個選項選y,Linux核心會告訴 您有關於您的SCSI配備的問題(如果有的話)。不過,它會增加核心約 12KB左右。


  ##SCSI low—level drivers


  下面總共有接近30張的SCSI卡,您可以依需求做選擇SCSI卡牌子。




c AIA1542 support

AdaPtec AIHA1740 support

AdaDtec AHA274X/284X/294X support

AdaPte 7000FASST SCSI support

AdaPtec AHA152X/2825 support

Advansys SCSI support

Always IN2000 SCSI support

Advansys SCSI support

Always IN2000 scsi support

AM53/79C974 PCI SCSI sppport

Buslogic SCSI Support

DTC3180/3280 SCSI support

EATA ISA/EISA(DPT PM2011/021/012/022/122/322) support

EATA-DMA(DPT,NEC,AT&T,SNI,AST,01ivetti,Alphatronix)support

EATA-PIO(old DPT PM2001,PM2012A) support

Future Domain 16xx SCSI support

Generic NCR5380/53c400 SCSI support

NCR53c405a SCSI support

NCR53c7,8xx SCSI support

NCR53CSXX SCSI support

IOMEGA Parallel Port ZIP drive SCSI support

PAS16 SCSI SUpport

Qlogic FAS SCSI support

Qlogic lSP SCSI support

Seagate ST-02 and future Domain TMC-8xx SCSI support

Trantor T128/T128F/T228 scsi support

Ultrastor 14F/34F support

Ultrastor SCSI support


  10. I2O device support

  這個也不清楚,幫助裏說是這個需要I2O接口適配器才能支持的,在智能Input/Output(I2O)體系接口中使用,又是要硬件,不選了。


  11. Network device support網絡設備支持

  上面選好協議了,現在該選設備了,內容多得很。還好裏面大概分類了,有ARCnet設備、Ethernet(10 or 100 Mbit)、Ethernet(1000Mbit)、Wireless LAN(non-hamradio)、Token Ring device、Wan interfaces、PCMCIA network device support幾大類。耐心點,一般說來都能找到自己用的網卡。如果沒有,你只好自己到廠商那裏去要驅動了。 如果這個選項沒有打開的話,那麼以下的選項將不會出現。它是在選擇網絡卡或是網絡的設備。例如,PLIP,PPP,SLIP,還有各式各樣的網絡卡,所以 這個選項通常是選y。


  #Dummy net driver support------如果有SLIP或PPP的傳輸協議,那麼要把這一項打開。因爲一來它不會讓您的Linux核心增大。二來,對某些應用程序來 說,它可以讓我們模擬出來的TCP/IP環境更像TCP/IP環境。如果您沒有SLIP或PPP協議,就不用打開了。


  #EQL(serial line load balancing) support------如果有兩個MODEM,兩條電話線,而且用SLIP或PPP協議,可以用這個Driver以便讓您的MODEM有兩倍的速度。當然,在網絡的另一端也要有同樣的設備。


  #PLIP(parallel port) support------依字面上看,它是一種利用打印機的接口(平行接口),然後利用點對點來模擬TCP/IP的環境。它和 SLIP/PPP全都屬於點對點通訊,您可以把兩臺電腦利用打印機的連接接口串聯起來,然後,加入此通訊協議。如此一來,這兩部電腦就等於一個小小的網絡 了。不過,如果電腦有提供打印服務的話,這個選項最好不要打開,不然可能會有問題(因爲都是用平行接口)。


  #PPP(point-to-point)support------點對點協議,近年來,PPP協議已經慢慢的取代SLIP的規定了,原因是PPP協議可以獲取相同的IP地址,而SLIP則一直在改變IP地址,在許多的方面,PPP都勝過SLIP協議。


  #SLIP(serial line) support------這是MODEM族常用的一種通訊協議,必須通過一臺Server(叫ISP)獲取一個IP地址,然後利用這個IP地址,可以模擬以太網絡,使用有關TCP/IP的程序。


  ##Ethernet(10 or 100Mbit)


  如果您在學校接了校園網絡並且使用網絡卡,那麼這個選項一定要選y,否則以下對網絡卡的選擇將不會出現。或是您有網絡卡,這時您同樣的也要選y。之後,下面會列出許多網絡卡讓您選擇。像我們平常用的都是NE2000相容卡。




#3COM cards

#AMD LANCE and PCnet(AT1500 and NE2100) support

#Western Digital/SMC cards

##other ISA Cards(CONFIG.ISA)------

選y,以下才會列出有關ISA的網絡卡。包括NE2000的兼容卡。

Cabletron E21xx support

DEPCA, DE10x, DE200, DE201, DE202, DE422 support

EtherWORKS 3(DE203, DE204, DE205) support

EtherExpress 16 support

HP PCLAN+(27247B and 27252A) support

HP PCLAN(27245 and other 27xxx series) support

HP 10/100VG PCLAN(ISA, EISA, PCI) support

NE2000/NE1000 support

SK.G16 support


  # EISA, VLB, PCI and on board controllers ------選擇網絡卡,包括直接附在主機板上的那種。如果選擇y,則底下會列出其他的網絡卡讓您做選擇,這些卡對於一般人來說很少會去用到。所以大部分的人這項是選N的。


  #Pocket and portable adaptors------通常用在可攜式的電腦上,這類型的網絡卡(口袋型的),由於體積很小在安裝和取下方面很方便,因此筆記本相關電腦上便常常採用這種網絡卡。


  #Token Ring driver support------Token Ring是 IBM電腦上的網絡。它叫令牌環網絡,和以太網絡是很類似的東西。如果您希望使用的Token Ring網絡卡以便連接到這種網絡,那麼選Y,一般人都選N。


  #ARCnet support------這也是一種網絡卡,通常一般人用不到,所以選n。如果您有這樣的網絡卡,請看Documentation/networking/arcnet.txt的說明。

 

  12. Amateur Radio support 業餘無線廣播


  可以用來啓動無線網絡的基本支持,目前的無線網絡可以通過公衆頻率傳輸數據,如果你有此類設備就可以啓用,具體請參考AX25和HAM HOWTO 文檔。


  13. IrDA(infrared)support紅外支持


  14. ISDN subsystem


  如果使用ISDN上網,這個就必不可少了。ISDN(Integrated Services Digital Network),它的中文名稱是綜合數字服務網絡,是一個利用電話線,把聲音,影片信息以數字的方式傳送的數字網絡,它需要電話交換機設備有支持 ISDN,這通常需要電信局來做安裝,對於在家工作的人來說,ISDN可能是最舒適最便宜的一種方式,因此有愈來愈多的人使用它。不過,除非是公司,不然 一般人很少會使用到ISDN的,所以這部分的選項大都選N。如果您選擇Y,則下面會出現一些有關ISDN的問題。如果需要用到ISDN,可以去看看雜誌的 介紹。只要是有關網絡的雜誌應該都會有介紹。還需要啓用Support synchronous PPP選項(參考PPP over ISDN)。


  15. Old CD-ROM drivers(not SCSI、 IDE)非SCSI/IDE口的光驅


  如用IDE的CD-ROM,不選。


  以下是選擇非 IDE/ATAPI和 SCSI界面的光驅,這些光驅通常有自己專屬的接口卡也是比較舊型的光驅類型。如果有這些光驅,則這個選項要選y,否則選n。如果您選擇n,則會跳過以下光驅的選項。




Aztech/ orchid/okano/Wearnes/IXC/CyDROM CDROM support

Goldstar R420 CDROM support

Matsllshita/panasonic/Creative,longshine,TEAC CDRW Support

Mitsllmi(no XA/MUltisessIon) CDROM Support

Mitsumi(XA/Multisession) CDROM support

optics Storage DCLPHIN 8000AT CDROM support

Philips/LMS CM206 CDROM support

Sanyo CDR-h94A CDROM sunnort

Soft configurable CDROM interface card support

Sony CDU3lA CDROM sunnort

Sony CDU535 CDROM support


  16. Character devices字符設備


  所謂字符設備通常是指以字符爲單位做處理的設備,例如終端機就是其中一項。原則上,我們對於這些選項的選擇也是以預設爲主。這個內容又太多了,先使用缺省設置,需要的話自己就修改。把大類介紹一下吧:


  #Virtual terminal ------ 選擇“y”,內核將支持虛擬終端。


  #Support for console on virtual terminal------選擇“y”,內核可將一個虛擬終端用作系統控制檯。


  #Standard/generic (dumb) serial support-------選擇“y”,內核將支持串行口。標準序列接口的選定。如果您是用serial的鼠標(大部分的人都是用這個),或是 MODEM的話,則這一項一定要選。大部分的人這一項都選y。


  #Support for console on serial port------選擇“y”,內核可將一個串行口用作系統控制檯。


  ##I2C support------I2C是Philips極力推動的微控制應用中使用的低速串行總線協議。如果你要選擇下面的Video For Linux,該項必選。


  #Mice鼠標。現在可以支持總線、串口、PS/2、C&T 82C710 mouse port、PC110 digitizer pad------根據需要選擇。非串行的鼠標,支持象PS/2。看一看你鼠標的鍵。許多雙鍵鼠標是PS/2,即使它們的連接看起來象串行的.。


  #PS/2 mouse (aka "auxiliary device") support ------- 如果用戶使用的是PS/2鼠標,則該選項應該選擇“y”。


  #Joysticks------手柄。即使在Linux下把手柄驅動起來意義也不是太大,遊戲太少了。


  #Watchdog Cards:雖然稱爲Cards,這個可以用純軟件來實現,當然也有硬件的。如果你把這個選中,那麼就會在你的/dev下創建一個名爲watchdog的 文件,它可以記錄你的系統的運行情況,一直到系統重新啓動的1分鐘左右。有了這個文件,你就可以恢復系統到重啓前的狀態了。


  #Video For Linux------支持有關的音頻/視頻卡。


  ##Ftape, the floppy tape device driver---  


  #Digiboard PC/Xx Support------這是一張叫 Digiboard PC/XX卡的 driver,這種卡上面有很多個 serial port的插槽(一般來說只有兩個),可以用來連接很多個MODEM,在民間的BBS站很常用到,如果您有這樣的東西,您必須選這項爲y。有興趣的讀者可 以讀讀Documentation/digiboard.txt的內容。


  #Cyclades async mux support------同上,這也是一種能接很多個serial port插槽的卡的驅動程序。


  #Stallion multlport serial support------同上,這也是其中一種卡。


  #SDL RISCom/8 card support------這也是其中的一個支持muti-serial卡的driver。


  #Parallel printer support------有打印機的或是使用到並行接口的人這一項一定要選。除非是用serial的打印機。還有如果您有使用PLIP,那麼這項也請選上。


  #Mouse support------大部分的人這一項並不用選y。因爲大部分的人是用serial的鼠標,除非有些人是用一種附有接口卡的鼠標,這時這個選項纔要選上,如果您選y,則底下會列出您的BUS鼠標所用的接口卡。


  #support for user misc device modules------除非您有所謂的觸摸式顯示器或是光筆等東西,否則這一項選n。


  #QIC-02 tape support------非 SCSI界面的磁帶機,除非您有,否則選 n。


  #Ftape(QIC-80/Travan)support------如果有磁帶機,而這個磁帶機是接在軟盤控制卡上,這個選項纔要選y。


  #Watchdog Timer support------一般人不需要這個選項,如果您選上這個選項,則您要用mknod在/dev下建一個watchdog的文件。請看Documentation/watchlog.txt的解釋。


  #Enhanced Real Time Clock Support------關於系統上Clock的東西,您必須自己用mknod在/dev/下建立一個文件叫rtc。如此一來,在/proc/下將可以 看到rtc的信息。有關於rtc的內容請看Documentation/rtc.txt。一般是選n。


  17. USB supprot USB支持  


  很多USB設備,比如鼠標、調制解調器、打印機、掃描儀等,在Linux都可以得到支持,根據需要自行選擇。


  18. File systems文件系統


  Linux上有支持約二十幾種的文件系統,有支持某個文件系統的意思是,可以存取某個文件系統的數據或是做拷貝動作。在這些文件系統 中,通常的選擇方法是按照原來預設的方式,不過,在其中,EXT2FS那個選項無論如何一定要選,因爲那是Linux系統所使用的文件系統。其他的則依需 求做選擇。


  通常是ext2而讓其餘的使用模塊。


  #Kernel automounter support------選擇“y”,內核將提供對automounter的支持,使系統在啓動時自動 mount遠程文件系統。


  #Standard( minix )------新的套件不再建立 minix 文件系統,而且很多人不使用它,但是把它配置在覈心裏仍然是個好主意。某些″rescue-disk ″ 程序會用到它,而且仍然有許多磁片可能用 minix 文件系統,因爲 minix 文件系統對於處理磁片方面是最好的。當初Linus是因爲對Minix這個小型的操作系統有很深的經驗,所以才寫出Linux這個操作系統。Minix文 件系統通常用在磁盤上,有時會用到它。


  #Extended fs ------ 這是擴充文件系統的第一版,現在已經不再使用。


  #Second extented fs------這是現在新發行的套件所廣泛採用的文件系統,你可能會有其中一種。這個是linux文件系統,請務必選y,如果問我說選n會有什麼後果,我也不知道。除非您能把 Linux裝在 DOS的目錄下。


  #xiafs filesystem-----這個文件系統曾經一度很普遍,但是在寫這份文件時,我已經不知道有任何人在使用它了。


  #DOS FAT fs ------DOS FAT文件格式的支持,可以支持FAT16、FAT32。這個選項是DOS的文件系統,如果您沒有選y,則下面的MSDOS,VFAT,umsdos將不會出現。


  #msdos------DOS文件系統的格式。如果你想要在 linux 下使用你硬盤中的 MS-DOS 分割區,或是想將用 MS-DOS 格式化的磁盤掛進來的話,回答y 。


  #VFAT(Windows95) fs ------windows95所支持的文件系統,是我們常說的vfat文件系統,如果您的系統中裝有windows95,那麼選擇這個文件系統將對以讓您看到windows95的長文件名。


  #umsdos: UNIX like fs on top of std MSDOS FAT fs ------ 如果把Linux裝進DOS的一個目錄下那麼您則要選擇這一項。不建議這樣做,因爲如此一來,就不能看到長文件名了。而且效率上,井不是很好。


  #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 標準工具是靠它來運作的,否則有些指令會出問題。


  #Root file system on NFS------一般不選,除非您的電腦上沒有硬盤,希望通過網絡由別人的硬盤開機過Linux如此一來纔有需要選這項。同時對方也要執行rarp的服務。


  #System V and Coherent------這是爲 System V 以及 Coherent 的分割區而設的。如果希望支持System V或Xenix的相關UNIX系統的FS並讀取它們的數據,那麼纔有必要選這個,否則一般來說這個選項是選n的。


  #Quota support ------Quota可以限制每個用戶可以使用的硬盤空間的上限,在多用戶共同使用一臺主機的情況中十分有效。


  #ISO 9660 CD-ROM file system support------光盤使用的就是ISO 9660的文件格式。


  #Mandatory lock support------有些很特殊的database應用軟件會用到它,一般人這個選項是選n。而且,如果選y的話,必須有最新版的NFS軟件,最新版的samba軟件等。


  #NTFS file system support------ntfs是NT使用的文件格式。


  #UFS filesystem support-----這是BSD,SunoS,FreeBSD,NetBSD或Nextstep所使用的文件系統。如果您在電腦上有這些操作系統的話,那麼可以選這一項。否則一般人都選n。


  ##Network File Systems------網絡文件系統


  # NFS------如果你在網絡環境下而且想要分享檔案,回答 y 。如果希望掛上別的電腦的文件系統,那麼這個選項一定要選進去。它可以讓您利用網絡把別人的硬盤當成自己的來使用(把它變成一個目錄)。對於一般人來說,這個選項是選y。


  #SMB filesystem support------這個文件系統讓您可以掛上windows95或windowsNT的文件系統,也就是您也可以抓到在windows下,網上鄰居上的電腦。


  #SMB long filename support------支持windows95的長文件名。


  #NCP filesystem support------NCP是一種網絡的通訊協議,用在跑IPX協議上,它可以利用IPX協議讓兩臺電腦之間的文件共享,並做溝通。如果您想掛上有關Novell的Netware文件系統,那麼這個選項就選上去吧。


  ##Partition Types-----分區類型,該選項支持一些不太常用的分區類型,用戶如果需要,在相應的選項上選擇“y”即可。


  ##Native Language Support------本地語言支持


  附:不知道需要那些文件系統怎末辦?


  鍵入″ mount ″它看起來會像這樣:




sunlyy% 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 ″。它會給你一份目前使用的核心所支援的文件系統列表。


  19. Console drivers 控制檯驅動


  #VGA text console ------ 選擇“y”,用戶就可以在標準的VGA顯示方式下使用Linux了。一般使用VGA text console就可以了,標準的80*25的文本控制檯。


  #Video mode selection support


  20. Sound sound聲卡驅動


  如果你能在列表中找到聲卡驅動那自然最好,否則就試試OSS了。閱讀幫助文件從列表中小心的選取。確信爲你聲卡真確的選擇了I/O和 IRQ。聲卡的MPU I/O是0選項。一般是330,如果不對不必擔心。模塊的好處就是在覈心編譯以後你還能重新編譯、安裝模塊並掛上核心。


  如果有聲卡,請去了解一下聲卡的 IRQ和 DMA等信息,並瞭解是屬於哪一種的。現在大部分的人使用的都是Sound Blaster或是它的相容卡。有關這類的信息請看各個聲卡的說明書。當選Y時,出現下面的畫面。就依您的聲卡來做選擇吧!




Pro Audio Spectrum 16 support

Sound Blaster(SB,SBPro,SB16,clone) support

Generic OPL2/0P13 FM synthesizer support

Gravis Ultrasound support

MPU-401 support(NOT for SB16)

6850 CART Midi support

PSS(ECho-AD12111)support(NOT for SB16)

16 bit samplins option of GUS(N0T_GUS_MAX)

GUS MAX support

Microsoft Sound System support

EnsolliQ Soundscape support

MediaTrix AudioTrix Pro support

Support forMAD16 and/or Mozart based cards

Support for Crystal CS4232 based(PnP) cards

Support for Turtle Bench Wave Front (Maul,Tropez)synthesizers


  #/dev/dsp and/dev/audio support------ 這個選項通常是必要的。因此大部分的人選y,如果沒有這選項,則很多的遊戲將沒有聲音效果。


  #MIDI interface support------支持MIDI界面。


  #FM synthesizer(YM3812/0PL-3) support


  #I/O base for SB Check from manual of the card------聲卡的I/O地址。括號是常用的選項。


  #Sound Blaster IRQ Check from manual of the card-----聲卡的IRQ,通常是1或5。


  #Sound Blaster DMA 0,1 for 3-----聲卡的DMA,通常是1。


  #Sound Blaster 16 bit DMA 5, 6 or 7(usel for 8 bitcards)(SB.DMA2)-----5


  #MPU401 I/0 base of SB16, Jazz16 and ES1688 Check from manual of the card------0


  #SB MPU401 IRQ(Jazzl6, SM Wave and ES1688) Usel with SB16------1


  #Audio DMA buffer size 4096,16384,32768 or 65536------65536


  ##Additional low level drivers------如有其他種類的聲卡,則這項要選上去,以下會列出其他的聲卡供選擇。


  21. Kernel hacking安全模式


  通俗的說,這是windows安全模式,找不到明確解釋,就引用這個說法。>這是從 Linus 的 README 裏摘錄的:


  ″kernel hacking ″配置的細節通常會產生一個更大或是更慢的核心(或者是又大又慢),而且可能因爲將一些常式配置成很活躍地去嘗試中斷一些不良的程序碼以便找出核心裏的問 題,而使得核心變得比較不穩定。所以要產生一個核心″產品 ″的話,你在這裏應該回答n 。


  配置了這個,即使在系統崩潰時,你也可以進行一定的工作了。


  如果對Linux核心很熟,想了解這個操作系統上的很深的信息,則這個選項纔打開,將會在/proc下看到profile這個文件,記錄着相當多的信息。這些信息是供除錯用的,對一般人來說,這個選項是選n,以免造成系統不穩固,或是引起其他的問題。


  總算配置完了,現在存盤退出,當然你也可以把現在的配置文件保存起來,這樣下次再配置的時候就省力氣了。存盤退出的文件是一個可以編輯 的文本文件。你可以用你的文本編輯器如:Emacs,vi,CrispLite,joe,等等。配置文件在/usr/src/linux目錄名字是. config。前面的點使普通的.(ls)無法顯示,加上-a選項就能看見。編輯文件中在配置時遇到麻煩的數字。然後,make dep 把你的配置信息從.config傳送到特定的子目錄完成安裝。最後,make clean 準備最後的核心編譯。


  第三節編譯內核


  編譯有關的命令有如下幾個:




#make dep

#make clean

#make zImage

#make bzImage /make zdisk

#make modules

#make modules_install

#depmod -a


  第一個命令make dep實際上讀取配置過程生成的配置文件,來創建對應於配置的依賴關係樹,從而決定哪些需要編譯而那些不需要;


  第二命令make clean完成刪除前面步驟留下的文件,以避免出現一些錯誤;


  第三個命令make zImage和第四個命令make bzImage實現完全編譯內核,二者生成的內核都是使用gzip壓縮的,只要使用一個就夠了,它們的區別在於使用make bzImage可以生成小一點的內核,比如在編譯2.2.16版本的內核時如果使用make zImage命令,那麼就會出現system too big的錯誤提示。建議使用make bzImage命令,壓縮的核心它將留在/usr/src/linux/arch/i386/boot目錄名爲zImage。make zdisk寫zImage到軟盤在/dev/fd0(就是DOS中第一軟驅A:)。在開始之前你必須有張盤在軟驅中。你可以同樣用make zImage 然後把它拷貝到軟盤cp /usr/src/linux/arch/i386/boot/zImage /dev/fd0 記住是高密度的,底密度的720k磁盤將不能啓動核心。 zdisk 對於測試新核心很方便;如果它完全不行,只要把磁盤拿掉再用舊的核心啓動即可。如果你意外地刪除了核心或是什麼的,它也是個方便的啓動辦法。當你把一臺硬 盤的內容傾倒到另外一臺去時,你也可以用它來安裝新的系統(除了這些之外還有更多用途)(我不清楚,請指教)。所有近來的核心都是壓縮過的,所以有個 z 在名字前面。核心是壓縮過的,當它執行的時候會自動將自己解壓縮(一個節省磁盤空間的好方法)。


  後面三個命令只有在你進行配置的過程中,在回答Enable loadable module support時選了"Y"纔是必要的,make modules和make modules_install分別生成相應的模塊和把模塊拷貝到需要的目錄中。


  嚴格說來,第七個命令和編譯過程並沒有關係,它是生成模塊間的依賴關係,這樣你啓動新內核之後,使用modprobe命令加載模塊時就能正確地定位模


  第四節 啓用內核


  通常,核心安裝叫做vmlinuz。過去Unix使用者共同起了這名字。"z"表示壓縮,"v"和"m"意思是"virtual"(虛擬)和"sticky(粘性的)",各自屬於內存和磁盤管理。建議保留vmlinuz核心,直到知道它工作。


  爲了能夠使用新版本的內核,還需要做一些改動:




#cp /usr/src/linux/System.map /boot/System.map-2.2.16

#cp /usr/src/linux/arch/i386/bzImage /boot/vmlinuz-2.2.16


  以上這兩個文件是剛纔編譯時新生成的。下面修改/boot下的兩個鏈接System.map和vmlinuz,使其指向新內核的文件:




#cd /boot

#rm -f System.map vmlinuz

#ln -s vmlinuz-2.2.16 vmlinuz

#ln -s System.map-2.2..16 System.map


  注意:要保留vmlinuz核心,以下列步驟進行




#cp /usr/src/linux/System.map /boot/System.map-2.2.16

#cp /usr/src/linux/arch/i386/bzImage /boot/vmlinuz-2.2.16

#cd /boot

#rm -f System.map

#ln -s System.map-2.2..16 System.map


  現在#vi /etc/lilo.conf,增加如下一段:


  image=/boot/vmlinuz-2.2.16 是設定爲已經安裝的核心


  label=linux2.2.16 則是由 lilo 用來告訴你現在要啓動的是那個核心或作業系統,


  read-only


  root=/dev/hda2 則是這個特別的作業系統的根目錄 /


  其中root=/dev/hda2一行要根據需要自行加以修改。


  運行:#/sbin/lilo -v 保存執行命令:lilo你將看到核心標籤,第一個是星號。如果你沒有看到新核心的標籤或LILO出現錯誤,你需要重新對/etc/lilo.conf工作(看下面的LILO分析)。


  確認對/etc/lilo.conf的編輯無誤,現在重新啓動系統:




#shutdown -r now


  不建議使用熱啓動或ctrl+Alt+del鍵。在一些情況下,文件系統不完全卸栽會損壞打開的文件。在LILO提示時,如果你需要啓 動舊的核心或使用一些參數啓動,如果你沒看見啓動提示,你可以試用shift或ctrl鍵,這樣啓動提示就出現了。一旦出現,按tab看核心標籤。輸入標 籤和可選參數啓動。通常,在/etc/lilo.conf文件指定的時間後自動啓動核心。啓動時,你可能看見一些出錯信息就象SIOCADDR。這常常顯 示模塊(一般是網絡模塊)沒有引導。處理這事很簡單,如果有此一錯,"VFS,cannotmount root",你就不要在覈心中編譯適當的磁盤或文件系統支持。


  在機器重啓後出現LILO時按TAB鍵,輸入linux2.1.16,新內核發揮作用了。


  附錄:LILO分析(技術性強,僅供參考)


  第一部分 LILO介紹


  LILO(Linux Loader)是Linux自帶的一個優秀的引導管理器,使用它可以很方便地引導一臺機器上的多個操作系統。與其他常用的引導加載程序相比,LILO引導 方式顯得更具有藝術性,對其深入的理解,將有助於我們方便地處理多操作系統、網絡引導、大硬盤及大內存等諸多棘手的問題。


  LILO的引導機制------衆所周知,計算機的最初啓動是由BIOS控制的,在對一些硬件(如:內存、鍵盤等)初始化之後,它會試 圖加載硬盤的主引導記錄(MBR)或軟盤的引導扇區。MBR可通過兩種方式運行,其一是定位到活動分區並加載相應的引導扇區,然後由引導扇區完成該分區內 操作系統的基本組件的加載;其二是直接從一指定分區中加載信息,並通過它裝入任一分區的操作系統,諸如LILO、OS/2 boot loader及Partition Magic等引導加載程序都可以配置成這種方式。軟盤的引導扇區相當於硬盤活動分區的引導扇區,它通常用於裝入軟盤上的操作系統。由此可見,只要把 LILO安裝在MBR、活動分區或者引導軟盤上,就能接管計算機的控制權,然後由LILO完成後繼的引導過程。LILO中建有一個引導表地址編碼,藉此它 的引導程序就能定位到Linux的內核文件,這種地址編碼既可以按照柱面/磁頭/扇區(CHS)模式,又可以採用LBA的線性塊號模式,因此,即使對某些 SCSI控制程序LILO也能運轉良好。


  當LILO定位到配置文件後,經過預引導過程,就顯示提示符: LILO boot:   


  此時,系統允許選擇引導不同的操作系統或者不同的內核配置,按Tab鍵顯示可選項列表,然後輸入可選項或者直接回車選擇缺省配置,如果選擇了引導Linux,還可以直接傳遞參數到系統內核。  


  和其他系統的引導加載程序相比,LILO具有更大的靈活性,其引導方式也更豐富多彩。


  ●當LILO被安裝在硬盤的MBR、活動分區或引導軟盤上時,作爲原引導程序的替身,它能引導任一硬盤任一分區上的Linux和其他操 作系統;除了引導扇區,它沒有任何隱含文件,也不需要使用特定的分區,它的配置文件可以在任何分區、甚至是存放在與Linux毫不相干的DOS分區的某個 子目錄下;它能引導幾個不同的內核配置,甚至是幾個不同的內核; 它能引導同一機程序上的多個Linux版本;可達16個。 


  ●它能從網絡上引導Linux。


  ●LILO的靈活性使得其配置變得相當複雜,當有多個系統共存時,建議先安裝其他操作系統,最後再裝Linux,這樣,設置LILO對其他系統的引導會相對簡單一些。 


  第二部分 LILO參數


  通常我們談到LILO,會涉及到兩個方面——LILO引導程序和LILO安裝命令/sbin/lilo。


  爲了不至於混淆這兩個概念,本文將用LILO表示LILO引導程序,而lilo表示/sbin/lilo。一般地,LILO使用一個文 本文件/etc/lilo.conf作爲其配置文件。lilo讀取lilo.conf,按照其中的參數將特定的LILO寫入系統引導區。任何時候,修改了 /etc/lilo.conf,都必須重新運行lilo命令,以保證LILO正常運lilo.conf使用的配置參數很多,配置起來也相當複雜。下面以 RedHat Linux爲例作一些初步探討,RedHat的lilo程序包版本爲0.20,別的Linux發行版本可能會有所出入,但不會太大。


  lilo.conf文件中的配置參數分爲兩部分,一部分是全局參數,另一部分是引導映像參數。引導映像參數作用於每一個引導映像區。如 果某一引導映像參數(例如:password與全局參數的定義相牴觸,則以該引導映像參數的定義爲準,但僅限於該引導映像區。LILO的引導參數有很多, 在此只對一些比較重要的參數作一介紹。與Linux系統其他的配置文件一樣,“#”號後的一行文字表示註釋。


  1.“boot=”此參數指明包含引導扇區的設備名(如:/dev/had),若此項忽略,則從當前的根分區中讀取引導扇區。 


  2.“root=”此參數告訴內核啓動時以哪個設備作爲根文件系統使用,其設定值爲構造內核時根文件系統的設備名,可用的設備名有:


  (1)/dev/hdaN~/dev/hddN:ST-506兼容硬盤,a到d上的N個分區


  (2)/dev/sdaN~/dev/sdeN:SCSI兼容硬盤,a到e上的N個分區


  (3)/dev/xdaN~/dev/xdbN:XT兼容硬盤,a到b上的N個分區  


  (4)/dev/fdN:軟盤,A:(N=0)或B:(N=1)


  (5)/dev/nfs:由網絡取得根文件系統的標誌 


  3.“nfsroot=”若需通過NFS提供根文件系統來引導無盤工作站,此參數爲內核指定了網絡根文件系統所在的機程序、目錄及NFS,其格式爲:nfsroot=(〈server_ip〉:)〈root_dir〉(,nfs_options))


  4.“nfsaddrs=”設定網絡通訊所需的各種網絡界面地址,如無此參數,則內核會試圖用反向地址解析協定(RARP)或啓動協定 (BOOTP)找出這些參數,其格式爲:nfsaddrs=〈客戶端IP〉:〈服務端IP〉:〈網關IP〉:〈子網屏蔽〉:〈客戶端名稱〉:〈網絡設備名 〉:〈auto〉 


  5.“image=”指定Linux的內核文件。


  6.“delay=”設定引導第一個映像前的等待時間。 


  7.“disk=”此參數爲某一特殊的硬盤定義非標準參數。


  8.“append=”爲內核傳遞一個可選的參數行,其典型的應用是爲不能完全由系統自動識別的硬盤指定參數,如:append = "hd=64,32,202"   


  9.“label=”此參數爲每個映像指定一個名字,以供引導時選擇。  


  10.“read-only”設定以只讀方式掛入根文件系統,用於文件系統一致性檢查(fsck)。


  11.“install=”安裝一個指定文件作爲新的引導扇區,缺省爲/boot/boot.b。 


  12.“loader=”說明所使用的鏈加載程序(chain loader),缺省爲/boot/chain.b,如果不是從首硬盤或軟盤啓動,那麼,此選項必須說明。 


  13.“table=”說明包含分區表的設備名,如果此參數忽略,引導加載程序將不能傳遞分區信息到已引導的操作系統。當此參數指向的分區表被修改時,必須重新運行/sbin/lilo。


  14.“init=”內核初始化時執行的程序,通常過程爲init、getty、rc和sh,版本1.3.43以來的Linux內核能夠執行/sbin/init說明的命令行,若在引導過程中出現問題,則可設置init=/bin/sh直接跳到Shell。


  15.“ramdisk_start=”由於內核不能放在壓縮的內存文件系統映像內,爲使內核映像能夠和壓縮的內存映像放在一張軟盤內,加入“ramdisk_start=〈offset〉”,這樣內核才能開始執行。


  16.“mem=”此參數的目的之一是爲Linux指定使用的內存數量:如mem=96MB,目的之二是指定mem=nopentium告訴內核不要使用4MB分頁表。


  17.“vga=”設置顯示模式,如80×50、132×44等。


  18.“linear” 產生用於替換硬盤sector/head/cylinder地址(硬盤幾何參數)的linear扇區地址。linear地址在運行時產生並且不依賴於硬盤 幾何參數。某些SCSI硬盤和一些以LBA方式使用的IDE硬盤可能會需要使用這個參數。注意:在將LILO安裝到軟盤上時不能使用“linear”參 數。


  19.“prompt” 給出“boot:”提示,強制LILO等待用戶的鍵盤輸入,按下回車鍵則立即引導默認的操作系統,而按下Tab鍵則打印可供選擇的操作系統。當 “prompt”被設置而“timeout”沒有被設置時,系統會一直處於等待狀態而不引導任何操作系統。不設置該參數時,LILO不給出“boot:” 提示而直接引導默認操作系統,除非用戶按下了Shift、Ctrl、Alt三鍵中的任何一個。大多數情況下,如果你的硬盤上有多個操作系統,建議使用參 數,它留給用戶一個選擇的餘地。  


  20.“timeout=” 設置等待鍵盤輸入的時長,單位是0.1秒。超過這段時間沒有輸入則爲超時,系統將自動引導缺省的操作系統。如果不設置本參數,缺省的超時時間長度爲無窮大。  


  21.“other=” 設置包含非Linux操作系統,如DOS、SCO UNIX、Windows 95等系統引導映像的文件或設備。  


  22.alias=name 給當前操作系統起一別名。


  第三部分 LILO典型配置方法 


  通常情況下,Linux的安裝程序自身就可以完成LILO的安裝配置,從而較好地解決多重系統的引導問題,如果系統不能自動完成這種配置,則可以通過手工修改配置文件/etc/lilo.conf來實現不同條件下的引導。  


  1.當系統能自動完成配置時


  對於這種情況只有一個建議:將LILO安裝到Linux分區的根上,而不是MBR這個多事地帶。假設當前hda1中裝有DOS/Windows,hda2中安裝了Linux,則/etc/lilo.conf的內容大致如下: 




boot=/dev/hda2#指定引導位置

compact

delay=50#延時5秒

root=current#根在當前分區

image=/boot/vmlinuz#指定linux的內核文件  

label=linux#用linux爲代表名稱 

other=/dev/hda1#其他操作系統所在的分區

table=/dev/hda#指定包含分區表的硬盤

label=dos#用dos爲代表名稱  


  2. 當系統無法自動完成配置時 


  系統無法自動完成配置的情況不外乎兩種:


  (1) BIOS不能直接看到Linux的根分區;


  (2) BIOS只能讀寫標準IDE硬盤的前504MB。


  這時,必須遵循一個最基本的原則:建立一個BIOS能存取的較小的Linux分區,其中包含內核文件、映射文件及鏈加載程序等必要內容,而根則可以是另外一個獨立的分區。至於配置上的其他細節,我們通過以下實例來進行說明。


  第四部分 lilo.conf配置實例


  有了這些基礎知識,我們可以很容易地按照自己的意圖配置LILO。


  例一.lilo.conf文件  




boot=/dev/hda #將LILO安裝在MBR。LILO作爲主引導管理器   

message=/boot/message #註釋爲/boot/message

compact #產生一個更小的“map”文件  

map=/boot/map #指定“map”文件爲/boot/map   

install=/boot/boot.b  

password=zhoudi #設置口令

vga=normal #80x25文本模式  

linear #使用“linear”地址

prompt #提示用戶鍵盤輸入  

timeout=50 #超時時長爲5秒

default=dos #缺省引導label爲dos的操作系統

image=/boot/vmlinuz-2.0.34-1#設定Linux所用核心

#設置Linux核心引導映像  

label=linux #標識爲linux  

root=/dev/hda1 #設置根文件系統   

read-only #LILO以只讀方式載入根文件系統   

#設定MS-DOS或Windows 95

other=/dev/hda2 #DOS分區爲第一個IDE硬盤的第二分區  

label=dos #標識爲dos   

table=/dev/hda #主設備爲第一個IDE硬盤  

#設定SCO UNIX 注意:SCO分區必須設爲活動(active)分區並將LILO安裝在MBR上。

other=/dev/hda3   

label=sco   

table=/dev/had


  這個例子中,LILO是作爲主引導管理器來管理機器上所有操作系統的。LILO也可作爲二級引導管理器,這隻要將“boot”參數改爲 根分區就可做到。例如:   boot=/dev/hda1 以這種方式使用LILO時,Linux根分區必須用DOS或Linux的fdisk程序將其設置爲活動分區,並且這種方式只對硬盤主分區(不是擴展或邏輯 分區)有效。


  例二.一個標準的IDE大硬盤需安裝Linux和DOS/Windows。 


  對於大硬盤問題,很多人只知道低於1024個柱面的限制,而不知爲什麼標準的IDE硬盤只能認前504MB。其實,BIOS的 int13調用是採用三個位元組的CHS編碼,10位爲柱面號,8位爲磁頭號,6位爲扇區號。可能的柱面號碼是0~1023,可能的磁頭號碼是 0~255,而磁道上可能的扇區號碼是1~63,以這24位最多可以定址8455716864個位元組(7.875GB)。但不幸的是,標準的IDE介面 容許256個扇區/磁道、65536個柱面及16個磁頭。它自己本身可以存取237= 137438953472(128 GB),但是加上BIOS方面63個扇區與1024個柱面的限制後只剩528482304(504MB)可以定址得到。


  對策:在硬盤的前500MB中劃分350MB(/dev/hda1)給DOS,150MB(/dev/hda2)給Linux,在相應的配置文件中應說明硬盤的參數。




boot=/dev/hda  

... ...  

disk=/dev/hda  

bios=0x80  

sectors=63  

heads=16

cylinders=2100   

image=/vmlunuz   

append="hd=2100,16,23"

root=/dev/hda2  

label=linux


  例三.如果你有一塊超過 8 G 的大硬盤, 並且需要把 Linux 安裝在比較靠後的位置,可以在安裝的時候, 選擇 linear 模式, 並且給它加上硬盤參數.


  安裝時候的硬盤參數可以這樣寫: hd?=CYLs, HEADs, SECs 其中的大寫字母需要用實際的硬盤參數來替換, 這些參數可以從硬盤的標籤上查到, 也可以看看 BIOS 設置裏硬盤參數對應 LBA 模式的那一行. 問號是根據硬盤確定的, 實際使用時, 它可以是 a, b, c, d 四個字母中的一個. 比如: hda=1869,63,255 這是 IBM 15.2G 硬盤的參數.


  當然進入了 Linux 以後, 可以通過編輯 /etc/lilo.conf 加上這個文件, 然後運行一遍 lilo 達到同樣的目的. 下面是本人未加參數前的 lilo.conf的內容:




boot = /dev/hda

map = /boot/map

install = /boot/boot.b

prompt

timeout = 50

image = /boot/vmlinuz

label = linux

root = /dev/hda1

initrd = /boot/initrd-2.2.12-20.img

read-only


  按照 linear 方式加入參數以後是如下格式:




boot = /dev/hda

map = /boot/map

install = /boot/boot.b

prompt

linear <-----加進了這一行

timeout = 50

image = /boot/vmlinuz

label = linux

root = /dev/hda1

initrd = /boot/initrd-2.2.12-20.img

read-only

append = "hda=1869,63,255"

<------加進了這一行 注意,

append參數是針對每個系統引導記錄的,

一定要放在 image 的下面或者是 other 的下面,

這樣它纔可以發揮作用.


  當再次起動 Linux系統的時候, LILO 就按照線性模式對系統進行引導.除了在硬盤上尋址定位的方式不同以外, 對其他方面沒有什麼影響.


  第三章內核編譯的應用


  第一節嵌入式Linux技術


  第二節你的Linux有多大?(及實踐結果)


  這可不是我寫的,只是用來參考製造small kernel,效果還可以。


  最小的 Linux kernel


  我使用的是 Mandrake 內核的 2.2.15,我沒有修改任何一行程序碼,完全只靠修改組態檔得到這些數據。


  首先,使用 make xconfig 把所有可以拿掉的選項都拿得。


  不要 floppy


  不要 SMP,MTRR


  不要 networking,SCSI


  把所有的 block device 移除,只留下 old IDE device


  把所有的 character device 移除


  把所有的 filesystem 移除,只留下 minix


  不要 sound 支援


  相信我,我己經把所有的選項都移除了。這樣做之後,我得到了一個 188K 的核心。不過這個核心恐怕很難發揮 Linux 的功能,因此我決定把網絡加回去。把 General中的 network support 加回去,重新編譯,核心變成 189 K。10K 換個 TCP/IP stack,似乎是很上算的生意。


  不過有 stack 沒有 driver 也是惘然,所以我把 embedded board 常用的RTL8139 的 driver 加回去,195K。如果你需要 DOS 檔案系統,那大小成爲 213K。如果 minix 用 ext2 換代,則大小成長至 222K。


  不過大家要注意,那裏的大小指的是核心檔的大小。那和所需要的隨取記憶體是二回事。這個數字代表的意義是你需要多小的 ROM 來存放你的核心。


  Linux 所需的記憶體大約在 600~800 K 之間。1MB 可能可以開機了,但可能不太有用。因爲可能連載入 C 程序庫都有困難。2MB 應該就可以做點事了,但可能要到4MB 以上纔可以執行一個比較完整的系統。


  看到這裏,是不是覺得 Linux 真的有點大。好吧! 那我們就來看看誰佔用了這些空間,下面這個列表是從 222K 這個核心做出來的。




# wc

arch/i386/kernel/kernel.o

arch/i386/mm/mm.o

kernel/kernel.o

mm/mm.o fs/fs.o

ipc/ipc.o

fs/filesystems.a

net/network.a

drivers/block/block.a

drivers/char/char.a

drivers/misc/misc.a

drivers/net/net.a drivers/pnp/pnp.a

/usr/src/smalllinux/arch/i386/lib/lib.a

/usr/src/smalllinux/lib/lib.a

/usr/src/smalllinux/arch/i386/lib/lib.a


  結果如下 :




243 2250 81946 arch/i386/kernel/kernel.o

42 316 10569 arch/i386/mm/mm.o

173 1541 74660 kernel/kernel.o

266 2307 68053 mm/mm.o

222 3139 123193 fs/fs.o

49 602 21600 ipc/ipc.o

263 2940 106504 fs/filesystems.a

137 1510 65512 net/network.a

92 719 39178 drivers/block/block.a

230 2308 87556 drivers/char/char.a

1 1 8 drivers/misc/misc.a

83 721 25680 drivers/net/net.a

1 1 8 drivers/pnp/pnp.a

20 187 9526 /usr/src/smalllinux/arch/i386/lib/lib.a

23 150 7714 /usr/src/smalllinux/lib/lib.a

20 187 9526 /usr/src/smalllinux/arch/i386/lib/lib.a

1865 18879 731233 total


  先說明一下,這裏的大小和最終的大小有點差別,但大致還是可以做個參考。這邊顯示 730K 實際上大約在 600K 左右。很顯然的,filesystem 相當的大。大約在 230K 左右,佔了 1/3 的體積。記憶體管理佔了80K,和核心其它部份的總合差不多。TCP/IP stack 佔了 65K,驅動程序佔了 120K。SysV IPC 佔了 21K,必要的話可以拿掉,核心檔應該可以再小個 10K 左右。 所以如果要減核心大小,應該動那裏呢? 答案應該很明顯,當然是檔案系統。Linux 的 VFS 減化了檔案系統的設計,buffer cache, directory cache 增加了系統的效率。但這些對整個系統都在flash 上的 embedded 系統而言根本就用處不大。如果可以把它們對拿掉,核心可以馬上縮小 20K 左右。如果跳過整個 VFS,直接將檔案系統寫成一個 driver 的型式,應該可以將 230K 縮減至 50K左右。整個核心縮到 100K 左右。


  從上面的數據來看,ucLinux 所減小的 mm 部份反到省的不多,主要是 mm 除了 virtual memory 之外,也要處理 memory allocation 的部份,這部份是省不得的。如果二者齊做,則 100K 以下的 Linux 核心不是不可能的事。


  實踐:成功編譯196k的核心,但不能用來啓動redhat,它太龐大了。280k可以啓動,正在向更小努力。


  結束語


  論文終於寫完了,有必要回顧一下我的畢業設計過程。


  對於一個非計算機專業的學生來說,這個課題更具有挑戰性。在Linux大行其道的今天,系統及網管方面的資料隨處可見,但內核資料匱 乏,讓人不知所措。開始只要是Linux的書籍就看,一個月後覺得視野大開,逐漸明確了方向。蒐集翻譯資料成了重要內容,有時通宵在網上找資料,再在系統 上不斷檢驗。論文核心------編譯流程開始就得到老師指導,配置內核21大項數百個知識點可以說是一條一條積累起來的,讓我很有成就感。


  論文除了詳細敘述怎麼做,也說明了原因,甚至還有附錄。我在突出重點的同時,又聯繫了我課題以外的內容------嵌入式Linux操 作系統,因爲我知道我的課題是綜合課題-----設計具有嵌入式操作系統的器件(理論)------的前期工作。論文集網絡文章之大成,內容豐富,希望能 爲繼續深入研究Linux操作系統的同仁有所幫助。


  參考文獻


  【1】Kernel-HOWTO


  【2】Documentation


  【3】Configure.help


  【4】kernel-2.2.16-i686-smp.config


  【5】Lilo.conf 手冊文檔中的 USER.TEX (thank ZEO)


  【6】Linux 核心安裝 by David A. Bandel


  【7】嵌入式Linux技術 ---Traveller


  【8】嵌入式系統以及如何構造一個嵌入式系統概覽 JoelR.Williams


  【9】relevant READMEs and HOWTOs in the help text


  【10】http://www.pocketix.com/


  【11】中國Linux論壇 <http://www.linuxforum.net/>


  【12】www.linuxaid.com


  【13】清華大學大學bbs.net.tsinghua.edu.cn


  【14】交通大學思源學


  【15】西電科大BBS

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章