以下是自己在vmware里编译Linux 2.6内核的全过程,只记录大致编译的步骤.具体要求根据实际情况而定.
 
获得内核源码的方式
 
方式一 : 下载内核源码包
[root@station1 src]# tar -jxvf linux-<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2.6.34.1.tar.bz2
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

方式二 : 下载内核补丁包 , 使用 patch 升级 .
[root@station1 src]# ln -s linux-2.6.34.1 linux
[root@station1 src]# cd linux
[root@station1 linux]# bunzip2 -dv /usr/local/src/patch-2.6.34.1.bz2 | patch -p1
  /usr/local/src/patch-2.6.34.1.bz2: done
[root@station1 linux]#

 

查看是否安装了必要的工具 :
[root@station1 linux]# rpm -qa | grep module-init
module-init-tools-3.3-0.pre3.1.54.el5
[root@station1 linux]# rpm -qa | grep mkinitrd
mkinitrd-5.1.19.6-54
[root@station1 linux]# rpm -qa |grep lvm2
lvm2-2.02.46-8.el5
[root@station1 linux]# rpm -qa |grep device-mapper
device-mapper-1.02.32-1.el5

 

下面开始进入正题 :
[root@station1 ~]# uname -r
2.6.18 -164.el5
[root@station1 src]# tar -jxvf linux-2.6.34.1.tar.bz2
[root@station1 src]# cd linux-2.6.34.1/
[root@station1 linux-2.6.34.1]# make mrproper
出现警告信息
[root@station1 linux-2.6.34.1]#
make: warning:  Clock skew detected.  Your build may be incomplete.
[root@station1 linux-2.6.34.1]#
解决
[root@station1 linux-2.6.34.1]# date
Sat Jun 26 14:23:38 CST 2010
[root@station1 linux-2.6.34.1]# date 07192010.21
Mon Jul 19 20:10:21 CST 2010
[root@station1 linux-2.6.34.1]# make mrproper    # 确保源代码目录下没有不正确的 .o 文件
[root@station1 linux-2.6.34.1]#
[root@station1 linux-2.6.34.1]# make menuconfig   # 配置内核各选项

如下图 :
General setup ----->  核心的一般设定 :
1.       Prompt for development and/or incomplete code/driver
 ( 核心的 code 开发维护 , kernel 开发维护都建议不选择些选项 )

 

说明 :     [ * ] - 将该功能编译进内核
           [  ] - 不将该功能编译进内核,也不编成模块
           [M] -以模块形式加载
2. 支持模块实时加载
 
 
 
3.       Processor type and features 处理器的类型和特点
 
Sysmetric multi-processing support 多处理器支持 .
Generic x86 support x86 cpu 架构支持较佳 .
High Memory support (4GB) 较大内存支持 .
 
 
4.       Power management and ACPI options 电源管理选项
…………….
加载与保存配置文件 .
 
 
核心的编译与安装
[root@station1 linux-2.6.34.1]# make clean     # 删除旧的 *.o 文件 .
2.6 以前需要 make bzImage;make modules  来制作核心文件与模块 , 而且还需要将 vmlinuz System.map 复制到 /boot 目录
: 如果同一版本的核心编译两次 , 得先将 /lib/modules 里面的核心模块先移掉或者改名 .
例如 : mv 2.6.12.2 2.6.14.2.old
[root@station1 linux-2.6.34.1]# make
[root@station1 linux-2.6.34.1]# make modules_install  # 安装模块
[root@station1 linux-2.6.34.1]# make install           # 安装新内核

[root@station1 linux-2.6.34.1]#reboot
 
启动错误信息 1.

insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists

解决 :
用原来的内核启动系统 .
[root@station1 ~]# cp /boot/initrd-2.6.34.1liwanhong.liunx.img /tmp/
[root@station1 ~]# cd /tmp/;ls
gconfd-root                         keyring-pOzksI  scim-panel-socket:0-root
initrd-2.6.34.1liwanhong.liunx.img  mapping-root
keyring-jWuruw                      orbit-root

 

[root@station1 tmp]# mkdir initrd
[root@station1 tmp]# cd initrd
[root@station1 initrd]# zcat ../initrd-2.6.34.1liwanhong.liunx.img | cpio -i
14545 blocks
[root@station1 initrd]# ls
bin  dev  etc  init  lib  proc  sbin  sys  sysroot
[root@station1 initrd]# vim init
重复加载了/lib/dm-region-hash.ko,删除其中加载项.
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko

 

[root@station1 initrd]# find . | cpio -c -o > ../newinitrd
14545 blocks
[root@station1 initrd]#
[root@station1 initrd]# cd ..
[root@station1 tmp]# gzip -9 <newinitrd> initrd.img
[root@station1 tmp]# ll | grep initrd
drwxr-xr-x 9 root root    4096 Jul 20 11:37 initrd
-rw------- 1 root root 3283050 Jul 20 11:28 initrd-2.6.34.1liwanhong.liunx.img
-rw-r--r-- 1 root root 3283045 Jul 20 11:49 initrd.img
-rw-r--r-- 1 root root 7447040 Jul 20 11:48 newinitrd
[root@station1 tmp]# cp initrd.img /boot/initrd-2.6.34.1liwanhong.liunx.img
cp: overwrite `/boot/initrd-2.6.34.1liwanhong.liunx.img'? yes
[root@station1 tmp]# reboot

 

启动错误信息 2
Mount: could not find filesystem ‘/dev/root’…

解决:

[root@station1 ~]# cd /usr/src/linux-2.6.34.1/
[root@station1 linux-2.6.34.1]# vim .config

 

设置 .config 文件 , 添加 :

CONFIG_SYSFS_DEPRECATED_V2=Y

:

重新再编译一次.

注:将之前安装的到/lib/modules里的模块删除./boot里的内核与ramdisk文件删除.

再以新内核启动Linux:
[root@station1 ~]# uname -r
2.6.34.1
[root@station1 ~]#