分享
 
 
 

稍做努力,昨天在redhat 9上编译linux 2.6.11

王朝system·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

从2.6发布以来,一直想用一下,昨天终于下决心了。当然要从网上看一些文章,还有内核源码自己带的文档了。

一 编译安装前

1、备份数据

其实没有必要,就是借机整理一下自己的东西,平时做好归纳总结,可以省略,因为如果新内核启动出错,可以从旧的内核启动,在

默认情况下,linux 2.6.11安装后在grub的菜单里还是旧的为默认选项。

2、获取新的内核源码

一般当然从官方网站www.kernel.org或者它的mirror站点去下载,其他的网站一个是没有必要,一个是防人之心(怕被该过),新的

内核包大概30多兆,下载要一段时间,这之间随便你干什么。

3、解包、运行前准备

使用root用户在/usr/src/目录下解开源码包:tar jxf linux-2.6.11.7.tar.bz2

养成一个好的习惯,先看软件带的文档,看看README和Documentation/Changes文件,确定编译运行2.6内核需要的最小系统软件要求

。一般redhat 9能够满足,但是需要注意的是module-init-tools 0.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=/

# make moveold # {重要}保存旧版的模块工具,以便2.4使用

# make all install

# ./generate-modprobe.conf /etc/modprobe.conf # module-init-tools工具包使用的新的配置文件

二 编译安装中

4、配置、编译和安装新的内核

现在终于可以从事实质的一步了,有些...

新内核在Makefile方面的改动很大, "make menuconfig"和"make xconfig"继续存在, 但是"make xconfig"被改写了, 不再使用原来的

Tcl/Tk语言, 而是基于QT库了. 新增加了"make gconfig", 它是基于GTK库的. "make xconfig"和"make gconfig"比原来更强大而且更易于使用

了. 但是, 好像还不太稳定...

我还是用我最常用的"make menuconfig"来配置(由于我不是用root来配置编译内核,为了保持源码的完整和默认的配置信息,所以我

在我的一般用户的目录下建立了一个专门用来编译内核的目录:/home/user/buildkernel,所以我用的命令make后面都带有参数“O=/home/use

r/buildkernel”,即配置命令为“make O=/home/user/buildkernel menuconfig”):

按照自己的需要选择相应的配置选项,在这里提几点:

"Loadable Module support"选项, 一定要选上"Module unloading"和"Automatic kernel module loading"这两个选项.

"Processor type and features"选项, 一定要选上"Preemptible Kernel"选项, 这是2.6.x内核优于2.4.x内核的重要原因之一.

"Block Devices"的配置, 一定要选上对loopback和ramdisk的支持.

"Multi-device support(RAID and LVM)", 要选上"device mapper".

"Input device support", 记得要选上"Keyboards"和"Mice"的支持.

"Graphics support", 要选上对frame buffer的支持.

ALSA, 要选上"OSS API emulation"选项. OSS可以不用了.

USB, 能选的都选上吧 :-)

文件系统, 选上常用的那几种就可以了. 如果要体验sysfs的话, 要选上对sysfs的支持.

配制好内核后, 就可以直接编译了, 在2.6中"make dep"这一步已经不再需要了。下面的命令为:

通常的命令 我使用的命令

$ make # make O=/home/user/buildkernel

下面需要root用户操作:

# make modules_install install # make O=/home/user/buildkernel modules_install install

安装后:

(1)把压缩内核映象拷贝到/boot目录下, 并创建相应的System.map符号链接;

(2)修改bootloader的配置文件;

(3)调用mkinitrd程序创建内核的initrd映象;

(4)对于GRUB而言, 将在/boot/grub/grub.conf配置文件增加如下类似的配置行:

title Red Hat Linux (2.6.11.7)

root (hd0,0)

kernel /vmlinuz-2.6.11.7 ro root=LABEL=/ #有些文章说2.6不支持LABEL参数,但是在这个版本就支持了

initrd /initrd-2.6.11.7.img

可以重起使用新的内核了。但是有些软件需要调整。

三 编译安装后

5、rpm的问题

在2.6内核中,rpm会提示如下错误:

rpmdb: unable to join the environment

error: db4 error(11) from dbenv->open: Resource temporarily unavailable

error: cannot open Packages index using db3 - Resource temporarily unavailable (11)

error: cannot open Packages database in /var/lib/rpm

no packages

解决方案有:

1)在内核中打开BSD process accounting选项能够解决这个问题。

2)也可以设定如下的环境变量来解决问题:

export LD_ASSUME_KERNEL=2.2.5

3)也可以下载安装新发布的rpm软件包。

通过这个途径也可以解决realplay的相同问题。

在原来的redhat 9中的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系统,

可以加上下面几行:

#

# ----- KERNEL 2.6.x support ------

# This is for compatibility between kernel-2.4.x and kernel-2.6.x

#

UNAME=`uname -r`

KERNELVER=$

if [ "$KERNELVER" = "2.6" ]; then

#

# This is kernel-2.6.x

#

KSYMS=/proc/kallsyms

else

#

# This is kernel-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. 解开这个包以后, 直接"make install"就可以了. 它将产

生/etc/hotplug/配置目录.

7. 体验sysfs

首先, 创建目录/sys:

# mkdir /sys

然后, 按照下列步骤修改启动脚本/etc/rc.sysinit文件:

找到行: mount -f /proc", 在下面增加:

if [ "$KERNELVER" = "2.6" ]; then

mount -f /sys

fi

找到行: action $"Mounting proc filesystem: " mount -n -t proc /proc /proc, 在其下面增加这样一行:

#

# Mount /sys for kernel-2.6.x

#

if [ "$KERNELVER" = "2.6" ]; then

action $"Mounting sysfs filesystem: " mount -n -t sysfs /sys /sys

fi

接下来, 在/etc/fstab文件中, 加入这样一行:

none /sys sysfs defaults 0 0

最后, 修改/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

对应于通用USB host控制器的内核模块名字已经从usb-uhci该为uhci-hcd。

但是,在安装module-init-tools程序包时生成的/etc/modprobe.conf配置文件却仍然使用usb-ohci这个名字。即:

alias usb-controller usb-ohci

alias usb-controller1 ehci-hcd

因此, 要把它改为:

alias usb-controller ohci-hcd

alias usb-controller1 ehci-hcd

如果不做这样的修改, 那么使用USB-1.1 host控制器的机器在启动内核的时候将找不到相应的驱动模块.

支持USB键盘的模块名字也从keybdev变为usbkbd

支持USB鼠标的模块名字也从mousedev改为usbmouse

因此, 我们必需修改启动脚本/etc/rc.sysinit文件. 同时为了兼容原有的2.4.x系统, 我们在脚本的一开始定义两个变量:

#

# ----- KERNEL 2.6.x support ------

# This is for compatibility between kernel-2.4.x and kernel-2.6.x

#

UNAME=`uname -r`

KERNELVER=$

if [ "$KERNELVER" = "2.6" ]; then

#

# This is kernel-2.6.x

#

KSYMS=/proc/kallsyms

KEYBDEV_NAME=usbkbd

MOUSEDEV_NAME=usbmouse

else

#

# This is kernel-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=C grep -e "^I.*Cls=08" /proc/bus/usb/devices 2>/dev/null`

LC_ALL=C grep 'hid' /proc/bus/usb/drivers || action $"Initializing USB HID interface: " modprobe hid 2> /dev/null

action $"Initializing USB keyboard: " modprobe $KEYBDEV_NAME 2> /dev/null

action $"Initializing USB mouse: " modprobe $MOUSEDEV_NAME 2> /dev/null

fi

改为:

needusbstorage=

if [ $usb = "1" ]; then

if [ "$KERNELVER" = "2.6" ]; then

needusbstorage=`LC_ALL=C grep -e "^I.*Cls=08" /sys/bus/usb/devices 2>/dev/null`

LC_ALL=C grep 'hid' /sys/bus/usb/drivers || action $"Initializing USB HID interface: " modprobe hid 2> /dev/null

else

needusbstorage=`LC_ALL=C grep -e "^I.*Cls=08" /proc/bus/usb/devices 2>/dev/null`

LC_ALL=C grep 'hid' /proc/bus/usb/drivers || action $"Initializing USB HID interface: " modprobe hid 2> /dev/null

fi

action $"Initializing USB keyboard: " modprobe $KEYBDEV_NAME 2> /dev/null

action $"Initializing USB mouse: " modprobe $MOUSEDEV_NAME 2> /dev/null

fi

9. 其它

防火墙iptables需要升级。

关于声卡的问题, 可以参阅参考文档[2]和[6]。

关于在linux-2.6.x系统上运行vmware的问题, 请参阅参考文档[2]和[6]。

10. 参考文档

[1] Kernel 2.6.x, the new breed: http://linuxbooks.pananix.com/kernel2.6.html

[2] Upgrading RH9 to 2.6.0-test4: http://www.fearthecow.net/index.pl?section=guest&page=kernel

[3] HowTo Upgrade To The 2.6 Kernel: http://kerneltrap.org/node/view/799

[4] Building Linux Kernel 2.6 on Red Hat 8: http://www.sabalsoftware.com/article_buildingKernel26OnRedhat8.php

[5] Migrating to Linux kernel 2.6 on recent Redhat systems: http://linux-sxs.org/upgrading/migration26.html

[6] Migrating to Linux Kernel 2.6: http://thomer.com/linux/migrate-to-2.6.html

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有