為了提高Linux系統(tǒng)的安全性和靈活性,編譯Linux系統(tǒng)內(nèi)核就顯得尤為重要,特轉(zhuǎn)載一篇完整的關(guān)于Linux系統(tǒng)內(nèi)核編譯的文章。
全文如下(文章出處記不太清楚了,所以未注明,原作者若有異議,可發(fā)電子郵件給我):
內(nèi)核,是一個操作系統(tǒng)的核心。它負責管理系統(tǒng)的進程、內(nèi)存、設(shè)備驅(qū)動程序、文件和網(wǎng)絡系統(tǒng),決定著系統(tǒng)的性能和穩(wěn)定性。Linux作為一個自由軟件,在廣大愛好者的支持下,內(nèi)核版本不斷更新。新的內(nèi)核修訂了舊內(nèi)核的bug,并增加了許多新的特性。如果用戶想要使用這些新特性,或想根據(jù)自己的系統(tǒng)度身定制一個更高效,更穩(wěn)定的內(nèi)核,就需要重新編譯內(nèi)核。本文將以RedHat Linux 6.0(kernel 2.2.5)為操作系統(tǒng)平臺,介紹在Linux上進行內(nèi)核編譯的方法。
一、 下載新內(nèi)核的源代碼
目前,在 Internet上提供Linux源代碼的站點有很多,讀者可以選擇一個速度較快的站點下載。筆者是從站點上下載了Linux的最新開發(fā)版內(nèi)核2.3.14的源代碼,全部代碼被壓縮到一個名叫Linux-2.3.14.tar.gz的文件中。
二、 釋放內(nèi)核源代碼
由于源代碼放在一個壓縮文件中,因此在配置內(nèi)核之前,要先將源代碼釋放到指定的目錄下。首先以root賬號登錄,然后進入/usr/src子目錄。如果用戶在安裝Linux時,安裝了內(nèi)核的源代碼,則會發(fā)現(xiàn)一個linux-2.2.5的子目錄。該目錄下存放著內(nèi)核2.2.5的源代碼。此外,還會發(fā)現(xiàn)一個指向該目錄的鏈接linux。刪除該連接,然后將新內(nèi)核的源文件拷貝到/usr/src目錄中。
(一)、用tar命令釋放內(nèi)核源代碼
# cd /usr/src
# tar zxvf Linux-2.3.14.tar.gz
文件釋放成功后,在/usr/src目錄下會生成一個linux子目錄。其中包含了內(nèi)核2.3.14的全部源代碼。
?。ǘ?、將/usr/include/asm、/usr/inlude/linux、/usr/include/scsi鏈接到/usr/src/linux/include目錄下的對應目錄中。
# cd /usr/include
# rm -Rf asm linux
# 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
?。ㄈh除源代碼目錄中殘留的.o文件和其它從屬文件。
# cd /usr/src/linux
# make mrproper
三、 配置內(nèi)核
?。ㄒ唬?、啟動內(nèi)核配置程序。
# cd /usr/src/linux
# make config
除了上面的命令,用戶還可以使用make menuconfig命令啟動一個菜單模式的配置界面。如果用戶安裝了X window系統(tǒng),還可以執(zhí)行make xconfig命令啟動X window下的內(nèi)核配置程序。
?。ǘ?、配置內(nèi)核
Linux的內(nèi)核配置程序提供了一系列配置選項。對于每一個配置選項,用戶可以回答y、m或n。其中y表示將相應特性的支持或設(shè)備驅(qū)動程序編譯進內(nèi)核; m表示將相應特性的支持或設(shè)備驅(qū)動程序編譯成可加載模塊,在需要時,可由系統(tǒng)或用戶自行加入到內(nèi)核中去;n表示內(nèi)核不提供相應特性或驅(qū)動程序的支持。由于內(nèi)核的配置選項非常多,本文只介紹一些比較重要的選項。
1、Code maturity level options(代碼成熟度選項)
Prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL) [N/y/?] 如果用戶想要使用還處于測試階段的代碼或驅(qū)動,可以選擇“y”。如果想編譯出一個穩(wěn)定的內(nèi)核,則要選擇“n”。
1、 Processor type and features(處理器類型和特色)
?。?)、Processor family (386, 486/Cx486, 586/K5/5x86/6x86, Pentium/K6/TSC, PPro/6x86MX) [PPro/6x86MX] 選擇處理器類型,缺省為Ppro/6x86MX。
?。?)、Maximum Physical Memory (1GB, 2GB) [1GB] 內(nèi)核支持的最大內(nèi)存數(shù),缺省為1G。
?。?)、Math emulation (CONFIG_MATH_EMULATION) [N/y/?] 協(xié)處理器仿真,缺省為不仿真。
?。?)、MTRR (Memory Type Range Register) support (CONFIG_MTRR) [N/y/?]
選擇該選項,系統(tǒng)將生成/proc/mtrr文件對MTRR進行管理,供X server使用。
?。?)、Symmetric multi-processing support (CONFIG_SMP) [Y/n/?] 選擇“y”,內(nèi)核將支持對稱多處理器。
2、 Loadable module support(可加載模塊支持)
?。?)、Enable loadable module support (CONFIG_MODULES) [Y/n/?] 選擇“y”,內(nèi)核將支持加載模塊。
?。?)、Kernel module loader (CONFIG_KMOD) [N/y/?] 選擇“y”,內(nèi)核將自動加載那些可加載模塊,否則需要用戶手工加載。
3、 General setup(一般設(shè)置)
(1)、Networking support (CONFIG_NET) [Y/n/?] 該選項設(shè)置是否在內(nèi)核中提供網(wǎng)絡支持。
(2)、PCI support (CONFIG_PCI) [Y/n/?] 該選項設(shè)置是否在內(nèi)核中提供PCI支持。
?。?)、PCI access mode (BIOS, Direct, Any) [Any] 該選項設(shè)置Linux探測PCI設(shè)備的方式。選擇“BIOS”,Linux將使用BIOS;選擇“Direct”,Linux將不通過BIOS;選擇 “Any”,Linux將直接探測PCI設(shè)備,如果失敗,再使用BIOS。
?。?)Parallel port support (CONFIG_PARPORT) [N/y/m/?] 選擇“y”,內(nèi)核將支持平行口。
4、 Plug and Play configuration(即插即用設(shè)備支持)
?。?)、Plug and Play support (CONFIG_PNP) [Y/m/n/?] 選擇“y”,內(nèi)核將自動配置即插即用設(shè)備。
?。?)、ISA Plug and Play support (CONFIG_ISAPNP) [Y/m/n/?] 選擇“y”,內(nèi)核將自動配置基于ISA總線的即插即用設(shè)備。
5、 Block devices(塊設(shè)備)
?。?)、Normal PC floppy disk support (CONFIG_BLK_DEV_FD) [Y/m/n/?] 選擇“y”,內(nèi)核將提供對軟盤的支持。
?。?)、Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support (CONFIG_BLK_DEV_IDE) [Y/m/n/?] 選擇“y”,內(nèi)核將提供對增強IDE硬盤、CDROM和磁帶機的支持。
6、 Networking options(網(wǎng)絡選項)
(1)、Packet socket (CONFIG_PACKET) [Y/m/n/?] 選擇“y”,一些應用程序?qū)⑹褂肞acket協(xié)議直接同網(wǎng)絡設(shè)備通訊,而不通過內(nèi)核中的其它中介協(xié)議。
?。?)、Network firewalls (CONFIG_FIREWALL) [N/y/?] 選擇“y”,內(nèi)核將支持防火墻。
?。?)、TCP/IP networking (CONFIG_INET) [Y/n/?] 選擇“y”,內(nèi)核將支持TCP/IP協(xié)議。
?。?)The IPX protocol (CONFIG_IPX) [N/y/m/?] 選擇“y”,內(nèi)核將支持IPX協(xié)議。
?。?)、Appletalk DDP (CONFIG_ATALK) [N/y/m/?] 選擇“y”,內(nèi)核將支持Appletalk DDP協(xié)議。
8、SCSI support(SCSI支持)
如果用戶要使用SCSI設(shè)備,可配置相應選項。
9、Network device support(網(wǎng)絡設(shè)備支持)
Network device support (CONFIG_NETDEVICES) [Y/n/?] 選擇“y”,內(nèi)核將提供對網(wǎng)絡驅(qū)動程序的支持。
10、Ethernet (10 or 100Mbit)(10M或100M以太網(wǎng))
在該項設(shè)置中,系統(tǒng)提供了許多網(wǎng)卡驅(qū)動程序,用戶只要選擇自己的網(wǎng)卡驅(qū)動就可以了。此外,用戶還可以根據(jù)需要,在內(nèi)核中加入對FDDI、PPP、SLIP和無線LAN(Wireless LAN)的支持。
11、Character devices(字符設(shè)備)
?。?)、Virtual terminal (CONFIG_VT) [Y/n/?] 選擇“y”,內(nèi)核將支持虛擬終端。
?。?)、Support for console on virtual terminal (CONFIG_VT_CONSOLE) [Y/n/?]
選擇“y”,內(nèi)核可將一個虛擬終端用作系統(tǒng)控制臺。
(3)、Standard/generic (dumb) serial support (CONFIG_SERIAL) [Y/m/n/?]
選擇“y”,內(nèi)核將支持串行口。
?。?)、Support for console on serial port (CONFIG_SERIAL_CONSOLE) [N/y/?]
選擇“y”,內(nèi)核可將一個串行口用作系統(tǒng)控制臺。
12、Mice(鼠標)
PS/2 mouse (aka auxiliary device) support (CONFIG_PSMOUSE) [Y/n/?] 如果用戶使用的是PS/2鼠標,則該選項應該選擇“y”。
13、Filesystems(文件系統(tǒng))
?。?)、Quota support (CONFIG_QUOTA) [N/y/?] 選擇“y”,內(nèi)核將支持磁盤限額。
?。?)、Kernel automounter support (CONFIG_AUTOFS_FS) [Y/m/n/?] 選擇“y”,內(nèi)核將提供對automounter的支持,使系統(tǒng)在啟動時自動 mount遠程文件系統(tǒng)。
?。?)、DOS FAT fs support (CONFIG_FAT_FS) [N/y/m/?] 選擇“y”,內(nèi)核將支持DOS FAT文件系統(tǒng)。
(4)、ISO 9660 CDROM filesystem support (CONFIG_ISO9660_FS) [Y/m/n/?]
選擇“y”,內(nèi)核將支持ISO 9660 CDROM文件系統(tǒng)。
(5)、NTFS filesystem support (read only) (CONFIG_NTFS_FS) [N/y/m/?]
選擇“y”,用戶就可以以只讀方式訪問NTFS文件系統(tǒng)。
(6)、/proc filesystem support (CONFIG_PROC_FS) [Y/n/?] /proc是存放Linux系統(tǒng)運行狀態(tài)的虛擬文件系統(tǒng),該項必須選擇“y”。
?。?)、Second extended fs support (CONFIG_EXT2_FS) [Y/m/n/?] EXT2是Linux的標準文件系統(tǒng),該項也必須選擇“y”。
14、Network File Systems(網(wǎng)絡文件系統(tǒng))
?。?)、NFS filesystem support (CONFIG_NFS_FS) [Y/m/n/?] 選擇“y”,內(nèi)核將支持NFS文件系統(tǒng)。
?。?)、SMB filesystem support (to mount WfW shares etc.) (CONFIG_SMB_FS)
選擇“y”,內(nèi)核將支持SMB文件系統(tǒng)。
(3)、NCP filesystem support (to mount NetWare volumes) (CONFIG_NCP_FS)
選擇“y”,內(nèi)核將支持NCP文件系統(tǒng)。
15、Partition Types(分區(qū)類型)
該選項支持一些不太常用的分區(qū)類型,用戶如果需要,在相應的選項上選擇“y”即可。
16、Console drivers(控制臺驅(qū)動)
VGA text console (CONFIG_VGA_CONSOLE) [Y/n/?] 選擇“y”,用戶就可以在標準的VGA顯示方式下使用Linux了。
17、Sound(聲音)
Sound card support (CONFIG_SOUND) [N/y/m/?] 選擇“y”,內(nèi)核就可提供對聲卡的支持。
18、Kernel hacking(內(nèi)核監(jiān)視)
Magic SysRq key (CONFIG_MAGIC_SYSRQ) [N/y/?] 選擇“y”,用戶就可以對系統(tǒng)進行部分控制。一般情況下選擇“n”。
四、 編譯內(nèi)核
?。ㄒ唬?、建立編譯時所需的從屬文件
# cd /usr/src/linux
# make dep
?。ǘ⑶宄齼?nèi)核編譯的目標文件
# make clean
?。ㄈ?、編譯內(nèi)核
# make zImage
內(nèi)核編譯成功后,會在/usr/src/linux/arch/i386/boot目錄中生成一個新內(nèi)核的映像文件zImage。如果編譯的內(nèi)核很大的話,系統(tǒng)會提示你使用make bzImage命令來編譯。這時,編譯程序就會生成一個名叫bzImage的內(nèi)核映像文件。
?。ㄋ模?、編譯可加載模塊
如果用戶在配置內(nèi)核時設(shè)置了可加載模塊,則需要對這些模塊進行編譯,以便將來使用insmod命令進行加載。
# make modules
# make modelus_install
編譯成功后,系統(tǒng)會在/lib/modules目錄下生成一個2.3.14子目錄,里面存放著新內(nèi)核的所有可加載模塊。
五、 啟動新內(nèi)核
?。ㄒ唬?、將新內(nèi)核和System.map文件拷貝到/boot目錄下
# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.3.14
# cp /usr/src/linux/System.map /boot/System.map-2.3.14
# cd /boot
# rm -f System.map
# ln -s System.map-2.3.14 System.map
(二)、配置/etc/lilo.conf文件。在該文件中加入下面幾行:
default=linux-2.3.14
image=/boot/vmlinuz-2.3.14
label=linux-2.3.14
root=/dev/hda1
read-only
?。ㄈ⑹剐屡渲蒙?br> # /sbin/lilo
?。ㄋ模?、重新啟動系統(tǒng)
# /sbin/reboot
新內(nèi)核如果不能正常啟動,用戶可以在LILO:提示符下啟動舊內(nèi)核。然后查出故障原因,重新編譯新內(nèi)核即可.
from:http://www.unix-center.net/bbs/viewthread.php?tid=12159&extra=page%3D1