Linux 內核配置及編譯簡介

1.爲什麼要編譯Linux 內核
  衆所周知,Linux是開放源碼的操作系統,開放源碼軟件帶給我們這計算機水平相對落後的人羣的最大好處,就是可以快速學習世界高水平的程序(體系結構及編程方法等等),從而快速提高自身水平。然而這本身,也使多數開放源碼軟件在編碼易用性、針對性方面比不上Microsoft等專業軟件公司的產品。使用開放源碼軟件,多多少少都一些不太舒服的感覺。這一點想必用過Linux較早期版本的朋友都有同感。有時候還不僅是不舒服,由於軟件開發者或版本的不同,我們無法保證所有的軟件都能夠簡單地在不同的機器間移植,對於某些大型軟件(如:ORACLE 8.0.5)尤其如此。許多情況下,系統狀態,尤其是內核狀態,對程序的安裝使用和性能有至關重要的影響和制約作用。從另外的角度來講,我們也可以爲自己的計算機量身定製內核,這樣就不會出現Windows 98那樣的大垃圾箱了。

2.瞭解Linux
  要編譯Linux的內核,首先要對它有個大概的印象。Linux是Unix的仿製品,它支持多任務、虛擬存儲器,多終端,虛擬文件系統等特性。它最低可以運行在386/486的個人計算機上,其他一些體系結構的機器,如:SUN Sparc,M68000,DEC Alpha,PowerPC上也逐漸有了適用的Linux。

3.編譯內核的準備工作
1)瞭解現有內核的版本號.
這主要是爲了確定一些機器的基本信息,不一定非這麼做不可。可以用如下的命令行:
$ uname -a
Linux lark 2.2.15 #2 TUE DEC 26 10:55:20 CST 2000 i686
2)下載最新版本的Linux內核.目前國內教育網的ftp站點這方面的內容(包括壓縮的內核、補丁、編譯器等)都比較豐富,更新也較快,如:http://ftp.xjtu.edu.cn/ftp/pub/linux/kernel/ftp://166.111.136.3/pub/linux/kernel,2.2.x版本是比較穩定的,推薦使用。
3)把打包的內核解開
壓縮的內核、補丁和解開的源代碼總共要佔70M左右的硬盤空間;用root登錄,解開的源代碼應該在/usr/src/linux2.2.15下面:
#tar zxvf linux-2.2.15.tar.gz
或者
#gzip t linux-2.2.15.tar.gz
#tar x linux-2.2.15.tar
如果嫌命令行太麻煩的話,也可以在某臺windows的機器上用winzip之類的軟件解開,再用ftp或mount等方式讓linux可以訪問。
4)在系統中安裝gcc-2.7.2或更新的c編譯包
5)如果沒有把握,就把原來的內核(在/boot下)在別的地方重新備份一個。別忘了同時備份模塊(/lib/modules/2.x.x)

4.內核編輯
  爲了使內核符合自己系統和應用程序的實際需要,一般都要對其進行某些編輯工作,主要是修改某些頭文件中的若干參數。比方說,在安裝Oracle 8.0.5時,爲了使Oracle能夠利用的內存空間與實際的物理內存容量相符,以提高性能,要修改/usr/src/linux/include/asm下的shmparam.h文件中的一些內存參數。

5.內核配置
  內核配置的方法很多,make config、make xconfig、make menuconfig、make oldconfig等等,它們的功能都是一樣的,區別應該從名字上就能看出來,只有make oldconfig是指用系統當前的設置(./.config)作爲缺省值。這裏用的是make menuconfig。
  需要牢記:不必要的驅動越多,內核就越大,不僅運行速度慢、佔用內存多,在少數情況下、還會引發其他問題。具體步驟如下:
首先確定shell是bash。
然後
$make menuconfig
有一些默認的符號其含義如下:
y:加載
n:不加載
m:作爲模塊加載

可以配置的選項有以下一些:
1)code maturity level option 代碼成熟度
prompt for development and/or incomplete code/drivers [N/y/?]
如果有興趣測試一下內核中尚未最終完成的某些模塊,就選y,否則選N,想知道更詳細的信息選?會看到聯機幫助(以下?的含義相同),N大寫表示缺省值。

2)processor type and features 處理器類型及特性
Processor family(386,486/Cx486,586/K5/5x86/6x86,Pentium/K6/TSC, PPro/6x86MX)[PPro/6x86MX]
[]內的是缺省值,我們可以根據前面介紹的uname 命令執行的結果選擇。此項如果高於386,那麼生成的內核在386機器上將不能啓動。
Math emulation(CONFIG_MATH_EMULATION)[N/y/?]
需要進行協處理器模擬嗎?一般的機器都回n。如果機器已經有硬件的協處理器,那麼內核仍將使用硬件,而忽略軟件的math-emulation,這將使內核變大變慢。
MTRR(Memory Type Range Register)support(CONFIG_MTRR)[N/y/?]
在Pentium、Pro/Pentium II類的系統中可以提高圖像寫入速度。
Symmetric multi-processing support(CONFIG_SMP)[Y/n/?]
如果您的機器有多個處理器,就選y。此時要選中下面的Enhanced Real Time Clock Support

3)loadable model support 可加載模塊支持
Enable loadable module support(CONFIG_MODULES)[Y/n/?]
最好選y,不然許多僅供動態加載的模塊就不能用了。
Set version information on all symbols for modules(CONFIG_MODVERSIONS)[N/y/?]
選N
Kernel module loader(CONFIG_KMOD)[N/y/?]

4)general setup 一般設置
Networking support(CONFIG_NET)[Y/n/?]
選y吧,現在還有幾臺計算機不用上網呢?
PCI support (CONFIG_PCI)[Y/n/?]
PCI 總線和設備總該有吧。
PCI access mode(BIOS,Direct,Any)[Any]
缺省值比較保險,但如果您對您的主板很有信心,就選BIOS。
PCI quirks (CONFIG_PCI_QUIRKS)[Y/n/?]
用於修補BIOS中對PCI有影響的BUG,同樣,如果您對主板很有信心,就選n。
Backward-compatible /proc/pci〉(CONFIG_PCI_OLD_PROC)[Y/n/?]
以前的內核使用/proc/pci,新版內核使用/proc/bus/pci,要保持兼容性就選y。
MCA support(CONFIG_MCA)[N/y/?]
查看幫助吧。
SGI Visual Workstation support(CONFIG_VISWS)[N/y/?]
您的機器是SGI的嗎?是就選y。
System V IPC(CONFIG_SYSVIPC)[Y/n/?]
進程間通信函數和系統調用。Linux內核的五大組成部分之一,一定要選。
BSD Process Accounting(CONFIG_BSD_PROCESS_ACCT)[N/y/?]
用於啓動由內核將進程信息寫入文件的用戶級系統調用。就看您想不想用它了。
Sysctl support(CONFIG_SYSCTL)[Y/n/?]
在內核正在運行的時候修改內核。用8KB空間換取某種方便。別選吧,除非你真的想試試。
Kernel support for a.out binaries(CONFIG_BINFMT_AOUT)[Y/m/n/?]
爲了能使用以前編譯的程序,選y。
Kernel support for ELF binaries(CONFIG_BINFMT_ELF)[Y/m/n/?]
爲了能使用現在編譯的程序,選y。
Kernel support for MISC binaries(CONFIG_BINFMT_MISC)[Y/m/n/?]
一般選y,用於支持java等代碼的自動執行。
Parallel port support(CONFIG_PARPORT)[N/y/m/?]
並口設備,如打印機。

5)plug and play support 即插即用設備支持
Plug and Play support (CONFIG_PNP)[N/y/?]
選y吧。

6)block devices 塊設備
Normal PC floppy disk support(CONFIG_BLK_DEV_FD)[Y/m/n/?]
一般的軟驅。選y。
Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support(CONFIG_BLK_DEV_IDE)[Y/m/n/?]
這幾種接口的硬盤、光驅、磁帶、軟驅。選y。
Include IDE/ATAPI CDROM support(CONFIG_BLK_DEV_IDECD)[Y/m/n/?]
CDROM。選y。

7)networking options 網絡選項
Packet socket (CONFIG_PACHET)[Y/m/n/?]
按照目前網絡發展的狀況,選y比較好。當然也可以選其它的。
Kernel/User netlink socke(CONFIG_NETLINK)[N/y/?]
內核與用戶進程雙向通信。選y。
Network firewalls(CONFIG_FIREWALL)[N/Y/?]
如果真的需要用防火牆,就選y。
UNIX domain sockets(confgi_unix)[Y/m/n/?]
socket 的用處太多了。選y。
TCP/IP networking(CONFIG_INET)[Y/n/?]
選y,理由如上一條。
The IPX protocol (CONFIG_IPX)[N/y/m/?]
其實並沒有那麼多人真的需要使用或者學習IPX,所以一般選N。
Appletalk DDP(CONFIG_ATALK)[N/y/m/?]
選N,理由同上。

8)SCSI support SCSI支持,SCSI low-level drives SCSI低級驅動
根據系統中SCSI設備的實際情況選擇。

9)Networking device support 網絡設備支持
如果用LAN上網,就選擇網卡;
如果用MODEM撥號上網,就要看ISP提供那種服務了,一般都是PPP。

10)Amateur Radio support 業餘收音機支持
這是什麼我不太清楚,所以選N。

11)ISDN subsystem ISDN子系統
好像已經有支持ISDN的MODEM了,所以最好先看看自己的MODEM是不是這種,再做選擇。

12)Old CD-ROM dfivers (not SCSI, not IDE) 老式光驅驅動
一般選N,因爲這種設備實在很少見。

13)Character devices 字符設備
Virtual terminal(CONFIG_VT)[Y/n/?]
Linux上一般可以用Alt+F1/F2/F3/F4來切換不同的任務終端,即使在一臺計算機上也可以充分使用Linux的多任務能力,一些需要以命令行方式安裝合適用的軟件如果有虛擬終端的支持就會更方便,因此選y。
Support for console on virtual terminal(CONFIG_VT_CONSOLE)[Y/n/?]
選y將支持一個虛擬終端作爲控制檯。一般爲Alt+F1。
Support for console on serial port(CONFIG_SERIAL)[Y/m/n/?]
除非真的需要一個串口控制檯,否則選n。
Extended dumb serial driver options(CONFIG_SERIAL_EXTENDED)[N/y/?]
如果希望使用"dumb"的非標準特性(如HUB6支持),選y,一般選N。
Non-standard serial port support(CONFIG_SERIAL_NONSTANDARD)[N/y/?]
非標準串口。一般選N。
UNIX98 PTY support(CONFIG_UNIX98_PTYS)[Y/n/?]
PTY指僞終端,一般用戶就選n。但如果想用telnet或者xterms作爲終端訪問主機,並且已經安裝了glibc2.1,就可以選y。
Maximum number of UNIX98 PTYs in use(0-2048)(CONFIG_UNIX98_PTY_COUNT)[256]
缺省值就可以了。
Mouse Support(not serial mice)(CONFIG_MOUSE)[Y/n/?]
PS/2等非串口鼠標選y,否則選N。

14)Mice 鼠標
根據自己的鼠標類型選擇。

15)Video for Linux Linux視頻
根據系統中的音/視頻捕捉設備選擇。

16)Joystick support 操縱桿
根據系統中的遊戲杆設備選擇

17)Ftape,the floopy tape device driver Ftape設備驅動
Ftape (QIC-80/Travan)support(CONFIG_FTAPE)[N/y/m/?]
如果系統中有磁帶機,選y。

18)Filesystems 文件系統
文件系統的選擇要比較仔細,因爲其中的一些給某些系統功能提供支持。而且除了proc、ext2等文件系統之外,其它的文件系統(包括下面的網絡文件系統)都可以選擇爲m方式,從而減小內核啓動時的體積。
Quota support(CONFIG_QUOTA)[N/y/?]
用於給用戶劃分定量的磁盤空間。如不用此功能就選N。
DOS FAT fs support(CONFIG_FAT_FS)[N/y/m/?]
爲內核提供FAT支持,多數用戶有可能從Linux訪問同一系統中的WINDOWS硬盤空間,因此最好選y。
ISO 9660 CDROM filesystem support(CONFIG_ISO9660_FS)[Y/m/n/?]
有標準光驅的系統應該選Y。
Minix fs support(CONFIG_MINIX_FS)[N/y/m/?]
用於創建啓動盤的文件系統,多數應該選y或者m。
/proc filesystem support(CONFIG_PROC_FS)[Y/n/?]
虛擬文件系統,必須選Y。
Second extended fs support(CONFIG_EXT2_FS)[Y/m/n/?]
Linux標準文件系統,都應該選Y。

19)Network file systems 網絡文件系統
Coda filesystem support (advanced network fs)(CONFIG_CODA_FS)[N/y/m/?]
先看幫助再選。
NFS filesystem support(CONFIG_NFS_FS)[Y/m/n/?]
選Y或n,能夠訪問遠程NFS文件系統。
SMB filesystem support(to mount WfW shares etc.)(CONFIG_SMB_FS)[N/y/m/?]
要訪問WINDOWS系統中的共享資源選y。
NCP filesystem support(to mout NetWare volumes)(CONFIG_NCP_FS)[N/y/m/?]
如果真的需要訪問NetWare文件系統,就選y或者m。

20)Partion Types 分區類型
一般用不上;要用請參看幫助。

21)Console drivers 控制檯驅動
VGA text console(CONFIG_VGA_CONSOLE)[Y/n/?]
用VGA模式下用文本方式操作Linux,一般選y。
Video mode selection support(CONFIG_VIDEO_SELECT)[N/y/?]
大多數系統都不需要這項功能。

22)Sound 聲音
Sound card support(CONFIG_SOUND)[N/y/m/?]
如果系統中安裝了聲卡,就選y(或者m),然後查看幫助。

23)Kernel hacking 內核監視
kernel hacking往往會生成非常大或者非常慢(甚至又大又慢)的內核,甚至會引起內核工作不穩定。如果一定要選,那麼也最好不要選其中的"development"、"experimental"、"debugging"項。


6.編譯新內核
在/usr/src/linux目錄下執行
1)$ Makefile
2)$ make dep,以正確設置所有的依賴關係。
3) $ make clean 清除所有已存在的目標文件,如果忘記做這一步,生成的內核將會非常龐大。
4)$ make zImage / make zdisk / make bzImage / make zlilo 生成一個經過壓縮的內核。如果要製作成啓動盤就使用make zdisk,別忘記在a:中插一張軟盤。make zlilo 把生成的內核加入LILO中,不過在最初幾次編譯內核時不要使用此項,以免系統因生成的內核有故障而不能啓動。make bzImage用於生成超過1M的內核。不過如果您的內核真的超過了此限制,最好先看看其中有沒有什麼不該要的東西。
5)如果您的內核中使用了可裝卸的模塊,則需要依次運行make modules和make modules_install。


7.安裝新生成的內核並設置LILO
1)將編譯生成的新內核(在/usr/src/linux/arch/i386/boot/zImage下)拷貝至/boot下。
2)編輯LILO啓動文件/etc/lilo.f,格式參考如下:
image = /boot/zImage
label = mylinux
root = /dev/hda1
read-only
image = /boot/vmlinux
label = linux
root = /dev/hda1
read-only
3)運行LILO
4)重新啓動計算機

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/wwwunix/archive/2001/07/04/4238.aspx

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