以下是自己在vmware里编译Linux 2.6内核的全过程,只记录大致编译的步骤.具体要求根据实际情况而定.
获得内核源码的方式
FTP 地 址: ftp://ftp.kernel.org/pub/linux/kernel/v2.6/
HTTP 地 址: http://www.kernel.org/pub/linux/kernel/v2.6/
方式一
:
下载内核源码包
[root@station1 src]# tar -jxvf linux- 2.6.34 .1.tar.bz2
方式二
:
下载内核补丁包
,
使用
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.pre 3.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 ~]#