|
源代码网推荐
源代码网整理以下从2.6发布以来,一直想用一下,昨天终于下决心了。当然要从网上看一些文章,还有内核源码自己带的文档了。
一编译安装前
1、备份数据 其实没有必要,就是借机整理一下自己的东西,平时做好归纳总结,可以省略,因为如果新内核启动出错,可以从旧的内核启动,在
默认情况下,linux2.6.11安装后在grub的菜单里还是旧的为默认选项。 2、获取新的内核源码 一般当然从官方网站www.kernel.org或者它的mirror站点去下载,其他的网站一个是没有必要,一个是防人之心(怕被该过),新的
内核包大概30多兆,下载要一段时间,这之间随便你干什么。 3、解包、运行前准备 使用root用户在/usr/src/目录下解开源码包:tarjxflinux-2.6.11.7.tar.bz2 养成一个好的习惯,先看软件带的文档,看看README和Documentation/Changes文件,确定编译运行2.6内核需要的最小系统软件要求
。一般redhat9能够满足,但是需要注意的是module-init-tools0.9.10这个软件包,使用命令depmod-V查看版本信息。从下面的两个网址
的其中一个获得新的包: http://www.kernel.org/pub/linux/kernel/people/rusty/modules/module-init-tools-3.0.tar.gz http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/module-init-tools-3.0.tar.gz 新的版本是3.0,因为2.4的内核模块的处理和2.6内核模块处理的改变很大,基本的处理模式都变了(很多原先在用户态下由modutils
处理的工作都放到内核里去完成了),所以使用了以前的方式,才有了该工具包的版本会从0.9.15一下跳到3.0这么大的跨度。 安装module-init-tools工具包: #configure--prefix=/ #makemoveold #{重要}保存旧版的模块工具,以便2.4使用 #makeallinstall #./generate-modprobe.conf/etc/modprobe.conf #module-init-tools工具包使用的新的配置文件
二编译安装中
4、配置、编译和安装新的内核 现在终于可以从事实质的一步了,有些... 新内核在Makefile方面的改动很大,"makemenuconfig"和"makexconfig"继续存在,但是"makexconfig"被改写了,不再使用原来的
Tcl/Tk语言,而是基于QT库了.新增加了"makegconfig",它是基于GTK库的."makexconfig"和"makegconfig"比原来更强大而且更易于使用
了.但是,好像还不太稳定... 我还是用我最常用的"makemenuconfig"来配置(由于我不是用root来配置编译内核,为了保持源码的完整和默认的配置信息,所以我
在我的一般用户的目录下建立了一个专门用来编译内核的目录:/home/user/buildkernel,所以我用的命令make后面都带有参数“O=/home/use
r/buildkernel”,即配置命令为“makeO=/home/user/buildkernelmenuconfig”): 按照自己的需要选择相应的配置选项,在这里提几点: "LoadableModulesupport"选项,一定要选上"Moduleunloading"和"Automatickernelmoduleloading"这两个选项. "Processortypeandfeatures"选项,一定要选上"PreemptibleKernel"选项,这是2.6.x内核优于2.4.x内核的重要原因之一. "BlockDevices"的配置,一定要选上对loopback和ramdisk的支持. "Multi-devicesupport(RAIDandLVM)",要选上"devicemapper". "Inputdevicesupport",记得要选上"Keyboards"和"Mice"的支持. "Graphicssupport",要选上对framebuffer的支持. ALSA,要选上"OSSAPIemulation"选项.OSS可以不用了. USB,能选的都选上吧:-) 文件系统,选上常用的那几种就可以了.如果要体验sysfs的话,要选上对sysfs的支持. 配制好内核后,就可以直接编译了,在2.6中"makedep"这一步已经不再需要了。下面的命令为: 通常的命令 我使用的命令 $make #makeO=/home/user/buildkernel 下面需要root用户操作: #makemodules_installinstall #makeO=/home/user/buildkernelmodules_installinstall 安装后: (1)把压缩内核映象拷贝到/boot目录下,并创建相应的System.map符号链接; (2)修改bootloader的配置文件; (3)调用mkinitrd程序创建内核的initrd映象; (4)对于GRUB而言,将在/boot/grub/grub.conf配置文件增加如下类似的配置行: titleRedHatLinux(2.6.11.7) root(hd0,0) kernel/vmlinuz-2.6.11.7roroot=LABEL=/ #有些文章说2.6不支持LABEL参数,但是在这个版本就支持了 initrd/initrd-2.6.11.7.img 可以重起使用新的内核了。但是有些软件需要调整。
三编译安装后
5、rpm的问题 在2.6内核中,rpm会提示如下错误: rpmdb:unabletojointheenvironment error:db4error(11)fromdbenv->open:Resourcetemporarilyunavailable error:cannotopenPackagesindexusingdb3-Resourcetemporarilyunavailable(11) error:cannotopenPackagesdatabasein/var/lib/rpm nopackages 解决方案有: 1)在内核中打开BSDprocessaccounting选项能够解决这个问题。 2)也可以设定如下的环境变量来解决问题: exportLD_ASSUME_KERNEL=2.2.5 3)也可以下载安装新发布的rpm软件包。
通过这个途径也可以解决realplay的相同问题。
在原来的redhat9中的glibc有问题,最好升级glibc: ftp://ftp.rpmfind.net/linux/redhat/updates/9/en/os/i386/glibc-2.3.2-27.9.i386.rpm 升级完后,还需要升级如下包: ftp://ftp.rpmfind.net/linux/redhat/updates/9/en/os/i386/glibc-common-2.3.2-27.9.i386.rpm ftp://ftp.rpmfind.net/linux/redhat/updates/9/en/os/i386/glibc-devel-2.3.2-27.9.i386.rpm ftp://ftp.rpmfind.net/linux/redhat/updates/9/en/os/i386/glibc-utils-2.3.2-27.9.i386.rpm
可能要用到命令:rpm-e删除旧版;rpm-Uvh--force来安装新版。
6、关于支持HotPlug Hotplug主要适用于无线设备的正常使用。首先需要在内核中配置hotplug的支持(CONFIG_HOTPLUG)。然后,
由于/proc/ksyms改名为/proc/kallsyms,所以必需修改启动脚本/etc/rc.sysinit中的/proc/ksyms。但是为了兼容原有的linux-2.4.x系统,
可以加上下面几行: # #-----KERNEL2.6.xsupport------ #Thisisforcompatibilitybetweenkernel-2.4.xandkernel-2.6.x # UNAME=`uname-r` KERNELVER=$ if["$KERNELVER"="2.6"];then # #Thisiskernel-2.6.x # KSYMS=/proc/kallsyms else # #Thisiskernel-2.4.x # KSYMS=/proc/ksyms fi 然后,把rc.sysinit文件中所有出现/proc/ksyms的地方都换成"$KSYMS"变量引用。 配置好后,还必需下载hotplug的用户态辅助工具包:http:
//www.kernel.org/pub/linux/utils/kernel/hotplug/hotplug-2004_03_11.tar.gz.解开这个包以后,直接"makeinstall"就可以了.它将产
生/etc/hotplug/配置目录.
7.体验sysfs 首先,创建目录/sys: #mkdir/sys 然后,按照下列步骤修改启动脚本/etc/rc.sysinit文件:
找到行:mount-f/proc",在下面增加: if["$KERNELVER"="2.6"];then mount-f/sys fi 找到行:action$"Mountingprocfilesystem:"mount-n-tproc/proc/proc,在其下面增加这样一行: # #Mount/sysforkernel-2.6.x # if["$KERNELVER"="2.6"];then action$"Mountingsysfsfilesystem:"mount-n-tsysfs/sys/sys fi 接下来,在/etc/fstab文件中,加入这样一行: none/syssysfsdefaults00 最后,修改/etc/init.d/halt脚本中的halt_get_remaining函数: 将: awk"~/^/$|^/proc|^/dev/ 改为: awk"~/^/$|^/proc|^/sys|^/dev/
8.支持USB设备 在linux-2.6.x的USB驱动模块的名字已经改变了,所以由此引起的问题多多...... 对应于USB-2.0的host控制器的内核模块名字仍然是ehci-hcd 对应USB-1.1的host控制器的内核模块名字已经从usb-ohci改为ochi-hcd 对应于通用USBhost控制器的内核模块名字已经从usb-uhci该为uhci-hcd。 但是,在安装module-init-tools程序包时生成的/etc/modprobe.conf配置文件却仍然使用usb-ohci这个名字。即: aliasusb-controllerusb-ohci aliasusb-controller1ehci-hcd 因此,要把它改为: aliasusb-controllerohci-hcd aliasusb-controller1ehci-hcd 如果不做这样的修改,那么使用USB-1.1host控制器的机器在启动内核的时候将找不到相应的驱动模块. 支持USB键盘的模块名字也从keybdev变为usbkbd 支持USB鼠标的模块名字也从mousedev改为usbmouse 因此,我们必需修改启动脚本/etc/rc.sysinit文件.同时为了兼容原有的2.4.x系统,我们在脚本的一开始定义两个变量: # #-----KERNEL2.6.xsupport------ #Thisisforcompatibilitybetweenkernel-2.4.xandkernel-2.6.x # UNAME=`uname-r` KERNELVER=$ if["$KERNELVER"="2.6"];then # #Thisiskernel-2.6.x # KSYMS=/proc/kallsyms KEYBDEV_NAME=usbkbd MOUSEDEV_NAME=usbmouse else # #Thisiskernel-2.4.x # KSYMS=/proc/ksyms KEYBDEV_NAME=keybdev MOUSEDEV_NAME=mousedev fi 然后,把/etc/rc.sysinit脚本文件中出现keybdev和mousedev的地方都改为$KEYBDEV_NAME和$MOUSEDEV_NAME。
把脚本文件/etc/rc.sysinit中的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:"modprobe$KEYBDEV_NAME2>/dev/null action$"InitializingUSBmouse:"modprobe$MOUSEDEV_NAME2>/dev/null fi 改为: needusbstorage= if[$usb="1"];then if["$KERNELVER"="2.6"];then needusbstorage=`LC_ALL=Cgrep-e"^I.*Cls=08"/sys/bus/usb/devices2>/dev/null` LC_ALL=Cgrep"hid"/sys/bus/usb/drivers||action$"InitializingUSBHIDinterface:"modprobehid2>/dev/null else 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 fi action$"InitializingUSBkeyboard:"modprobe$KEYBDEV_NAME2>/dev/null action$"InitializingUSBmouse:"modprobe$MOUSEDEV_NAME2>/dev/null fi
9.其它 防火墙iptables需要升级。 关于声卡的问题,可以参阅参考文档[2]和[6]。 关于在linux-2.6.x系统上运行vmware的问题,请参阅参考文档[2]和[6]。
10.参考文档 [1]Kernel2.6.x,thenewbreed:http://linuxbooks.pananix.com/kernel2.6.html [2]UpgradingRH9to2.6.0-test4:http://www.fearthecow.net/index.pl?section=guest&page=kernel [3]HowToUpgradeToThe2.6Kernel:http://kerneltrap.org/node/view/799 [4]BuildingLinuxKernel2.6onRedHat8:http://www.sabalsoftware.com/article_buildingKernel26OnRedhat8.php [5]MigratingtoLinuxkernel2.6onrecentRedhatsystems:http://linux-sxs.org/upgrading/migration26.html [6]MigratingtoLinuxKernel2.6:http://thomer.com/linux/migrate-to-2.6.html
源代码网供稿. |