CentOS5.3 系统的内核版本为
引用
[root@localhost /]# uname -r
2.6.18-128.1.6.el5xen


准备升级内核到最新的 -2.6.29.3 版本,下载地址
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.3.tar.gz

在 CentOS 系统下,把内核压缩包复制到  /usr/src/kernels  中,然后解压缩
引用
 tar -xvzf linux-2.6.29.3.tar.gz


然后建立一个符号链接
引用
[root@localhost kernels]# ln -s linux-2.6.29.3 linux


删除所有配置文件和 *.o 文件
引用
cd linux
make mrproper

make mrproper 命令确保源代码目录下没有不正确的 *.o 文件以及文件的相互依赖。若是第一次编译内核,那么这个命令可以不运行,如果是多次编译过内核,那么在编译前使用此命令。
( make mrproper  Delete the current configuration, and all generated files)

配置内核相关命令
make config ( 基于文本的最为传统的配置界面,一旦回答错误则无法返回,不推荐使用 )
make menuconfig ( 基于文本选单的配置界面,错误选择后可以返回,推荐)
make xconfig ( 基于图形窗口模式的配置界面 )
make oldconfig ( 在原来内核配置的基础上修改一些小地方 )

配置内核时选择相应的配置,有三种,含义分别为
Y -- 将该功能编译进内核
N -- 不将该功能编译进内核
M -- 将该功能编译成在需要时动态插入到内核中的模块

编译内核
1、执行  make menuconfig 后如下图示:
Linux编译升级内核

菜单选项说明
<1> General Setup
General Setup 选项允许配置基本的内核参数。这些选项可以配置内核如何与消息队列、内存、审核系统等互动。除非清楚自己在做什么,否则不要修改此节的设置。

<2>[*] Enable loadable module support  --->
Linux编译升级内核
使能可加载模块的支持。一般情况下,在计算机检测到新硬件时,它会自动安装驱动模块( 如果有的话 ).
以上选项,默认即可。一般不要启用 Forced Module Unloading ,因为这会导致卸载其他硬件依赖的模块,而且不是所有的开发人员都记得在模块上配置正确的数字签名。
Loadable module support 都使得用户不必把所有的驱动都包括在主内核中,避免了内核变得大而笨拙。

<3> Block Layer
Linux编译升级内核
Block Layer 子菜单可以配置内核如何与存储设备交互。
其中,Support For Large Block Device 选项默认开启。该选项对于支持大于 2TB 驱动器的访问 --- 或对大于 2TB 设备上配置的逻辑卷或 RAID 阵列访问。

<4> Processor Type and Features
Linux编译升级内核
这里,可以为 CPU 自定义 Linux 内核。该选项大致上相当于可以直接在计算机安装各种 kernel-x.cputype.rpm 包。
在选择处理器的类型后,可以配置下面其他几个选项:
  • 对称多处理支持;
  • 管理 CPU 吞吐量的抢占式调度;
  • 高内存支持,如果内存超过 4GB 或 64GB 的话;
  • 计时器频率
  • 支持多 CPU 和 Toshiba 或 Dell 笔记本( 其中选 M,它使相关的驱动模块在文件中可用)
<5> Power Management
Linux编译升级内核
Power Management Options 子菜单允许配置 Advanced Power Management(APM) 或 Advanced Configuration and Power Interface( ACPI ),以及和 CPU 关联的电源管理设置,这对延长笔记本计算机的寿命是非常关键的。
ACPI 默认是开启的。

<6> Bus Options
Linux编译升级内核
Bus Options 菜单选项允许通过指定的总线调整硬件通信。

<7> Executable File Formats
Linux编译升级内核
在多数情况下没有必要修改 Executable File Format 选项。当 Linux 可执行文件链接程序库时,它们通常是 Executable and Linkable Format (可执行和可链接格式,ELF)。随着从 1995 转向 ELF,只有最老的程序还要求对 a.out 和 ECOF 二进制格式的支持( ECOFF 是 Extended COFF 的简写,这种格式用于 MPS 和 Alpha 处理器,这两种处理器都用于工作站和嵌入式系统)。
使用了 <*> Kernel support for MISC binaries 这一项( 默认使用 )能够帮助需要解释器运行的程序,如 java、Python、或 .NET。

<8> Networking
Linux编译升级内核
在各种 Networking 菜单中能配置基本网络软件和具体设备。
Networking Options 子菜单主要用于配置网络软件。虽然可以激活其他协议栈,如 IPX/SPX,但很多选项是和 linux 与 internet 的主要协议 TCP/IP 有关的。如:
Networking Packet Filtering ( 代替了 ipchains )子菜单允许内核使用 iptables 支持防火墙。ipchans 和 ipfwadm 命令已经作废,它们是内核 2.2 和 2.0 中的命令。

<9>  Device Drivers  ---> 
大部分硬件设备的驱动都包括在这个菜单中。

<10> Firmware Drivers  --->
固件驱动

<11> File systems  --->
文件系统

<12> Kernel hacking  --->
此菜单支持能帮助用户调试驱动或其他内核问题的驱动程序。使用该菜单的一般是开发人员。

<13>Security options  ---> 
此菜单包括和安全性相关的模块,包括身份验证密钥、网络访问控制、BSD级别安全性和对 U.S National Security Agency (NSA) 的相对脚心的支持。

<14>Cryptographic API  --->
Linux 支持各式各样的加密接口和算法,这里提供相关的 API 。

<15>Virtualization (NEW)  --->
虚拟化支持

<16>Library routines  ---> 
此菜单包括 CRC 32 校验和支持,对数据流的 zlib 压缩和解压缩支持,以及快速排序数据算法。

编译内核

首先,确定依赖关系
引用
make dep

这个命令现在似乎已经没什么用了。

清理临时文件
引用
make clean


编译内核
引用
make bzImage     #避免编译出来的内核过大

make zImage       #编译后出来的内核大

成功后,末尾有类似于如下信息:
引用
Root device is (8, 7)
Setup is 12812 bytes (padded to 13312 bytes).
System is 2193 kB
CRC 2b8a03b2
Kernel: arch/x86/boot/bzImage is ready  (#1)


编译可加载内核模块
引用
make modules


安装编译的模块
引用
make modules_install


创建模块链接
引用
/sbin/depmod -a


更换内核
引用
cd /usr/src/linux
cp System.map /boot/System.map-2.6.29.3
cp arch/i386/boot/bzImage /boot/linuz-2.6.29
new-kernel-pkg --mkinitrd --depmod --install 2.6.29


至此,应该说已经完成了。因为GRUB里的 menu.lst 文件已经被修改,故无需再人工修改了。