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用戶可以到下面的站點下載:
注意,如果升級版本的跨度很大,并且預計會配置外部模塊時,還要下載最新的模塊工具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下,例如
|
然后,編輯系統引導配置文件/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為例)
先查看當前/usr/src的內容,注意到有一個linux的符號鏈接,它指向一個類似于linux-2.2.14(對應于現在使用的內核版本號)的目錄。首先刪除這個鏈接:
現在解壓下載的源程序文件。如果所下載的是.tar.gz(.tgz)文件,使用命令:
如果下載的是.bz2文件,例如linux-2.2.16tar.bz2,使用命令
現在再來看一下/usr/src下的內容,發現現在有了一個名為linux的目錄,里面就是需要升級到的版本的內核的源程序。還記得那 個名為linux的鏈接么?之所以使用那個鏈接就是防止在升級內核的時候會不慎把原來版本內核的源程序給覆蓋掉了。現在也需要同樣處理:
如果還下載了patch文件,比如patch-2.2.16,就可以進行patch操作(下面假設patch-2.2.16已經位于/usr/src目錄下了,否則需要先把該文件拷貝到/usr/src下):
第二部分 準備主機板和相關硬件的說明手冊 其實也不用太詳細,只要知道您的硬件是屬于哪一類型就行了。例如:有一張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 重新啟動新核心 重新啟動機器 發現并修理故障(仔細看我的文章,應該沒多少問題了) 第一節 編譯開始 通常要運行的第一個命令是:
該命令確保源代碼目錄下沒有不正確的目標.o文件以及文件的互相依賴。如使用剛下載的完整的源程序包進行編譯,本步可以省略。而如果多次使用了這些源程序編譯內核,那么最好要先運行一下這個命令。 確保/usr/include/目錄下的asm、linux和scsi等鏈接是指向要升級的內核源代碼的。它們分別鏈向源代碼目錄下的 真正的、該計算機體系結構(對于PC機來說,使用的體系結構是i386)所需要的真正的include子目錄。如:asm指向 /usr/src/linux/include/asm-i386等。若沒有這些鏈接,就需要手工創建,按照下面的步驟進行:
這是配置非常重要的一部分。刪除掉/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"。這表示前者對應的項要么不要,要么編譯到內核里;后者則 多一樣選擇,可以編譯成模塊。而圓括號的內容是要在所提供的幾個選項中選擇一項。 在編譯內核的過程中,最煩雜的事情就是這步配置工作了,不清楚到底該如何選取這些選項。實際上在配置時,大部分選項可以使用其缺省值, 只有小部分需要根據用戶不同的需要選擇。選擇的原則是將與內核其它部分關系較遠且不經常使用的部分功能代碼編譯成為可加載模塊,有利于減小內核的長度,減 小內核消耗的內存,簡化該功能相應的環境改變時對內核的影響;不需要的功能就不要選;與內核關心緊密而且經常使用的部分功能代碼直接編譯到內核中。下面對 選項分別加以介紹 |
---|
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,則會跳過以下光驅的選項。
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 ″它看起來會像這樣:
仔細看看每一行;在” 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時,出現下面的畫面。就依您的聲卡來做選擇吧!
#/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實現完全編譯內核,二者生成的內核都是使用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核心,直到知道它工作。 為了能夠使用新版本的內核,還需要做一些改動:
以上這兩個文件是剛才編譯時新生成的。下面修改/boot下的兩個鏈接System.map和vmlinuz,使其指向新內核的文件:
注意:要保留vmlinuz核心,以下列步驟進行
現在#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的編輯無誤,現在重新啟動系統:
不建議使用熱啟動或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的內容大致如下:
2. 當系統無法自動完成配置時 系統無法自動完成配置的情況不外乎兩種: (1) BIOS不能直接看到Linux的根分區; (2) BIOS只能讀寫標準IDE硬盤的前504MB。 這時,必須遵循一個最基本的原則:建立一個BIOS能存取的較小的Linux分區,其中包含內核文件、映射文件及鏈加載程序等必要內容,而根則可以是另外一個獨立的分區。至于配置上的其他細節,我們通過以下實例來進行說明。 第四部分 lilo.conf配置實例 有了這些基礎知識,我們可以很容易地按照自己的意圖配置LILO。 例一.lilo.conf文件
這個例子中,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,在相應的配置文件中應說明硬盤的參數。
例三.如果你有一塊超過 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的內容:
按照 linear 方式加入參數以后是如下格式:
當再次起動 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 這個核心做出來的。
結果如下 :
先說明一下,這里的大小和最終的大小有點差別,但大致還是可以做個參考。這邊顯示 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 【11】中國Linux論壇 <http://www.linuxforum.net/> 【12】www.linuxaid.com 【13】清華大學大學bbs.net.tsinghua.edu.cn 【14】交通大學思源學 【15】西電科大BBS |
---|