一、安装必要工具
***********************************
1. 安装module-init-tools-3.2.tar.gz
下载地址:http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/
安装方法:
#tar zxvf module-init-tools-3.2.tar.gz
#cd modules-init-tools-3.2
#./configure --prefix=/
#make moveold
#make all install
#./generate-modprobe.conf /etc/modprobe.conf
2. 升级mkinitrd
下载地址:我没有升级mkinitrd,下载地址到goole里搜吧。
说明:
如果你启动,加载模块没有给出模块与内核版本不兼容的信息,就不用重新下载mkinitrd程序来编译模块生成initrd。因为2.6相对于2.4来说,模块不是每个都改动,
如果你使用的模块没有改动,就什么都不用做.
具体的:
1)如果你不使用lvm2或使用lvm来做volume management,你就无需下载新版mkinitrd
2)如果你没有使用2.6中新的模块,或者新的模块已经编译进内核,就意味着与2.4使用的initrd.img没有变化,就连initrd.img也无需生成
initrd.img是由bootload加载入内存的,ext3编成模块加在initrd中照样可以启动,按我的理解,ext3并非要编译进内核中,但具体实践中,
如果没编译进内核中,会出现类似如下错误:
mount: error 19 mounting ext3
pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed: 2
umount /initrd/proc fail: 2
Freeing unused kernel memory: 244k freed
Kernel panic – not syncing: No init found. Try passing init = option to kernel.
而这可以通过重新生成initrd.img来解决。所谓在grub.conf中root=LABLE=必须修改成绝对分区编号,其实也就是因为没有生成重新生成initrd.img的问题造成。
如果需要安装最新的mkinitrd,请注意:新的mkinitrd, 它需要lvm2 和device-mapper
用 rpm -ivh --nodeps mkinitrd-4.1.18-2.i386.rpm 进行安装
安装lvm2-2.00.25-1.01.i386.rpm时请用rpm -ivh --nodeps lvm2-2.00.25-1.01.i386.rpm
3. 安装hotplug工具,如果没有此工具,则USB鼠标即使在启动显示ok 加载上了也不能用,2.6.15内核可使用hotplug-2004_09_23.tar.gz
下载地址:http://www.kernel.org/pub/linux/utils/kernel/hotplug/
安装方法:
#tar zxvf hotplug-2004_09_23.tar.gz
#cd hotplug-2004_09_23
#make install
4. 下载最新的Kernel源代码
下载地址:http://www.kernel.org/pub/linux/kernel/
***********************************
二、准备Kernel源代码树
***********************************
1、下载到tarball包之后,将内核tarball包复制到/usr/src目录下,假定包在当前目录中,运行以下命令:
#cp linux-2.6.0.tar.gz /usr/src
2、转到/usr/src目录并解开tarball包,
#cd /usr/src
#tar xvzf linux-2.6.0.tar.gz
默认情况下(使用Intel x86 CPU系列),下面这一步可以省略。
3、将/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 (如果你使用其它CPU比如PPC,那就需要连接到相应的目录)
# ln -s /usr/src/linux/include/linux linux
# ln -s /usr/src/linux/include/scsi scsi
4、如果你还下载了补丁包,则打上补丁,你也可以运行scripts/patch-kernel脚本文件自动打上补丁(准备好补丁包)或 #zcat patch-2.6.0.gz|patch -p1(我偷懒不打补丁的)。
5、修改内核源代码 (升级2.6就是为了优化,干脆连源代码也改了吧)
1)修改/usr/src/linux/include/linux/posix_types.h
设置fd_set支持的最大数量
#define __FD_SETSIZE 1024 --->; 65536
2)修改/usr/src/linux/include/linux/fs.h
设置最大打开文件数量(TCP连接数量)
#define INR_OPEN 1024 --->; 65536
#define NR_FILE 8192 --->; 65536
#define NR_RESERVED_FILES 10 --->; 128
3)修改/usr/src/linux/include/net/tcp.h
设置TIMEOUT的时间为1秒
#define TCP_TIMEWAIT_LEN (60*HZ) 60 --->; 1*HZ
设置在backlog队列里的半连接的重试次数,每次都会花相应的时间,本质上 也是减少重试时间
#define TCP_SYNACK_RETRIES 5 --->; 3
