一、安装必要工具
***********************************
1.安装module-init-tools-3.2.tar.gz
下载地址:
安装方式:
#tarzxvfmodule-init-tools-3.2.tar.gz
#cdmodules-init-tools-3.2
#./configure--prefix=/
#makemoveold
#makeallinstall
#./generate-modprobe.conf/etc/modprobe.conf
2.升级mkinitrd
下载地址:我没有升级mkinitrd,下载地址到goole里搜吧。
说明:
假如你启动,加载模块没有给出模块与内核版本不兼容的信息,就不用重新下载mkinitrd程序来编译模块生成initrd。由于2.6相对于2.4来说,模块不是每位都改动linux 内核编译文件说明,
假如你使用的模块没有改动,就哪些都不用做.
具体的:
1)假如你不使用lvm2或使用lvm来做volumemanagement,你就无需下载新版mkinitrd
2)假如你没有使用2.6中新的模块,或则新的模块早已编译进内核,就意味着与2.4使用的initrd.img没有变化,就连initrd.img也无需生成
initrd.img是由bootload加载入显存的,ext3编成模块加在initrd中照样可以启动,按我的理解,ext3并非要编译进内核中,但具体实践中,
若果没编译进内核中,会出现类似如下错误:
mount:error19mountingext3
pivotroot:pivot_root(/sysroot,/sysroot/initrd)failed:2
umount/initrd/procfail:2
Freeingunusedkernelmemory:244kfreed
Kernelpanic–notsyncing:Noinitfound.Trypassinginit=optiontokernel.
而这可以通过重新生成initrd.img来解决。所谓在grub.conf中root=LABLE=必须更改成绝对分区编号,虽然也就是由于没有生成重新生成initrd.img的问题导致。
假如须要安装最新的mkinitrd,请注意:新的mkinitrd,它须要lvm2和device-mapper
用rpm-ivh--nodepsmkinitrd-4.1.18-2.i386.rpm进行安装
安装lvm2-2.00.25-1.01.i386.rpm时请用rpm-ivh--nodepslvm2-2.00.25-1.01.i386.rpm
3.安装hotplug工具,假如没有此工具,则USB键盘虽然在启动显示ok加载上了也不能用,2.6.15内核可使用hotplug-2004_09_23.tar.gz
下载地址:
安装方式:
#tarzxvfhotplug-2004_09_23.tar.gz
#cdhotplug-2004_09_23
#makeinstall
4.下载最新的Kernel源代码
下载地址:
***********************************
二、准备Kernel源代码树
***********************************
1、下载到tarball包以后LINUX 删除目录,将内核tarball包复制到/usr/src目录下,假设包在当前目录中,运行以下命令:
#cplinux-2.6.0.tar.gz/usr/src
2、转到/usr/src目录并解开tarball包,
#cd/usr/src
#tarxvzflinux-2.6.0.tar.gz
默认情况下(使用Intelx86CPU系列)linux教程,下边这一步可以省略。
3、将/usr/include/asm、/usr/inlude/linux、/usr/include/scsi链接到/usr/src/linux/include目录下的对应目录中。
#cd/usr/include
#rm-Rfasmlinux
#ln-s/usr/src/linux/include/asm-i386asm(假如你使用其它CPU例如PPC,那就须要联接到相应的目录)
#ln-s/usr/src/linux/include/linuxlinux
#ln-s/usr/src/linux/include/scsiscsi
4、如果你还下载了补丁包,则打上补丁,你也可以运行scripts/patch-kernel脚本文件手动打上补丁(打算好补丁包)或#zcatpatch-2.6.0.gz|patch-p1(我偷懒不打补丁的)。
5、修改内核源代码(升级2.6就是为了优化,干脆连源代码也改了吧)
1)更改/usr/src/linux/include/linux/posix_types.h
设置fd_set支持的最大数目
#define__FD_SETSIZE1024--->;65536
2)更改/usr/src/linux/include/linux/fs.h
设置最大打开文件数目(TCP联接数目)
#defineINR_OPEN1024--->;65536
#defineNR_FILE8192--->;65536
#defineNR_RESERVED_FILES10--->;128
3)更改/usr/src/linux/include/net/tcp.h
设置TIMEOUT的时间为一秒
#defineTCP_TIMEWAIT_LEN(60*HZ)60--->;1*HZ
设置在backlog队列里的半联接的重试次数,每次就会花相应的时间,本质上也是降低重试时间
#defineTCP_SYNACK_RETRIES5--->;3
***********************************
三、定制内核
***********************************
配制内核之前请清除源代码树,假如还没有步入/usr/src/linux-2.6.0目录,请步入此目录,命令如下:
#makeclean
#makemrproper(这步是为确保原代码目录下没有不正确的.o文件及文件的互相依赖,刚解开的tarball包不需此步骤)
注:可以使用makehelp来查看帮助。
之后可以使用以下四个命令来配置内核:
#makegconfig(须要Gtk开发库的支持)
#makexconfig(须要Qt开发库的支持)
#makeconfig
#makemenuconfig(推荐)
配置核心选项
#makemenuconfig
基本上保持默认选项就可以了,而且要注意的是必须把ext2和ext3文件系统支持编进内核,否则升级内核重新启动是会有错误:
Kernelpanic:Noinitfound.Trypassinginit=optiontokernel
ext2和ext3文件系统配置为:(全部选择)
Filesystems--->
Secondextendedfssupport
Ext2extendedattributes
Ext2POSIXAccessControlLists
Ext2SecurityLabels
Ext3journallingfilesystemsupport
Ext3extendedattributes
Ext3POSIXAccessControlLists
Ext3SecurityLabels
JBB(ext3)debuggingsupport
注意:
假如你是ext3文件系统,则在订制内核配置文件时把对Ext3、Ext2文件的支持直接编译进内核,否则linux 内核编译文件说明,等你启用新内核时机器才会当掉,出错信息如下:
kernelpanic:noinitfound,trypassinginit=optiontokernel......
或则是:
kernelpanic:VFS:Unabletomountrootfsonunknown-block(0,0)
把对Ext3、Ext2文件系统的支持直接编译进内核,可解决此问题,还有把对“Moduleunloading“选项也选上,否则的话,你在新内核环境下将难以卸载
内核模块(rmmod命令不能用)。
***********************************
四、编译内核及模块
***********************************
配置完内核后,开始编译:
#makedep(编译2.6内核无需此步骤)
#make-jn(n代表同时编译的进程,可以推动编译速率,n由你的配置决定,我的配置用15-25)
注意:此命令已完成makebzImage及makemodules的工作,生成的bzImage内核文件在arch/i386/boot目录中,你的CPU不同内核文件储存位置也不同
注:这一步比较历时,依照机器配置,可能会消耗30分钟或更长时间。
***********************************
五、编译可加载模块和安装新内核
***********************************
假如用户在配置内核时设置了可加载模块,则须要对这种模块进行编译,便于将来使用insmod命令进行加载。
#makemodules-j25
#makemodules_install(安装内核模块到/lib/modules/2.x.x下)
#makeinstall(完成mkinitrd命令及内核(bzImage)和System.map的拷贝)
完成后,请查看/boot目录,文件名是有区别的,如是GRUB引导,makeinstall命令已帮你手动更改了引导选项,对于LILO则要手工更改,重画引导记录。
***********************************
六、修改相应文件已适应2.6内核
***********************************
1.内核2.6的usb设备名与内核2.4大不相同。所以我们要改一下哈哈。
在安装module-init-tools程序包时生成的/etc/modprobe.conf配置文件却依然使用usb-ohci这个名子
aliasusb-controllerusb-ohci
aliasusb-controller1ehci-hcd
因而,要把它改为:
aliasusb-controllerohci-hcd
aliasusb-controller1ehci-hcd
2.须要改一个最重要的文件/etc/rc.sysconfig这是一个ln联接。正真的文件在/etc/rc.d/里
#vi/etc/rc.sysinit
把/proc/ksyms改为如下所示(注:用于配置了HOTPLUG的支持)
KSYMS=/proc/ksyms
改为:
KSYMS=/proc/kallsyms
3.把所有mount-f-tusbdevfsusbdevfs改为mount-f-tusbfsusbfs我查看了就二个。
4.构建一个/sys系统这部我也不晓得为什么,但你是用默认的/proc/bus/usb下就提示找不到drivers文件。昏死了。
#mkdir/sys
6.更改rc.sysconfig文件
在mount-f/proc下加入
mount-f/sys这一行
7.#Mount/proc(doneheresovolumelabelscanworkwithfsck)
action$"Mountingprocfilesystem:"mount-n-tproc/proc/proc
action$"Mountingsysfsfilesystem:"mount-n-tsysfs/sys/sys
加入前面这行
8.更改fstab
#vi/etc/fstab加入如下
none/syssysfsdefaults00
.
9.更改/etc/init.d/halt为如下
awk'$2~/^/$|^/proc|^/dev/{next}
改为
awk'$2~/^/$|^/proc|^/sys|^/dev/{next}
10.把needusbstorage=这段改成如下
needusbstorage=
if[$usb="1"];then
needusbstorage=`LC_ALL=Cgrep-e"^I.*Cls=08"/proc/bus/usb/devices2>/dev/null`
LC_ALL=Cgrep'hid'/proc/bus/usb/drivers||action$"InitializingUSBHIDinterface:"modprobehid2>/dev/null
action$"InitializingUSBkeyboard:"modprobekeybdev2>/dev/null
action$"InitializingUSBmouse:"modprobemousedev2>/dev/null
fi
改成如下:
needusbstorage=
if[$usb="1"];then
needusbstorage=`LC_ALL=Cgrep-e"^I.*Cls=08"/sys/bus/usb/devices2>/dev/null`
action$"InitializingUSBHIDinterface:"modprobeusbhid2>/dev/null
action$"InitializingUSBkeyboard:"modprobeusbkbd2>/dev/null
action$"InitializingUSBmouse:"modprobeusbmouse2>/dev/null
fi
这种完成就reboot吧!希望在启动时全是ok.
补充:
***********************************
七、手动安装新内核和System.map
***********************************
1、将新内核和System.map文件拷贝到/boot目录下
#cp/usr/src/linux-2.6/arch/i386/boot/bzImage/boot/vmlinuz-2.6.15-10custom
#cp/usr/src/linux-2.6/System.map/boot/System.map-2.6.15-10custom
#cd/boot
#rm-fSystem.map(删掉原先的联接)
#ln-sSystem.map-2.6.15-10customSystem.map(重新构建联接)
***********************************
八、配置LILO
***********************************
1.配置/etc/lilo.conf文件,在该文件中加入下边几行:
image=/boot/vmlinuz-2.6.15-10custom
label=linux-custom
initrd=/boot/initrd-2.6.15-10.img
read-only
root=/dev/hda3(这与你的具体配置有关)
并把default=linux改为default=linux-custom
文章评论