ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:29.60KB ,
资源ID:5024282      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5024282.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(LINUX内核升级指导.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

LINUX内核升级指导.docx

1、LINUX内核升级指导LINUX内核升级指导薛老师本例讲解如何在vm虚拟机环境下,从redhat 9.0 2.4内核版本升级到2.6.18版本,因内核跨度较大,且虚拟机默认设置等问题,期间有些问题需要特别注意,这里整理各方面资料,以对实际操作做以指导。注意:本例所有安装包都可以在一、准备工作启动Linux系统,并用根用户登录,进入终端模式下。1、查看Linux内核版本# uname a目前的版本显示显示的是2.4.20,那就进入下一步 2、下载2.6内核源码 linux-2.6.18.tar.bz23、下载内核升级工具(因内核相差较大,很多软件包需要升级,否则新内核将有很多基本功能不能使用)(

2、1)下载module-init-tools-3.2.tar.bz2(2)下载mkinitrd-4.1.18-2.i386.rpm(3)下载lvm2-2.00.25-1.01.i386.rpm(4)下载device-mapper-1.00.19-2.i386.rpm(5)下载binutils-2.17.tar.gz(此项忘了是否是必须,自己验证下吧) 安装时依次执行如下命令:tar zxf binutils-2.17.tar.gzcd binutils-2.17./configureMakeMake install二、配置工作4、为了简化操作,将下载好的内核和4个升级工具都拷贝到/usr/src

3、文件夹下。5、拷贝完毕,开始解压新内核,具体操作请依次执行以下命令: # tar jvxf linux-2.6.18.tar.bz2 (解压新内核)6、安装module-init-tools工具包在/usr/src目录下,依次执行下列命令:# tar jvxf module-init-tools-3.2.tar.bz2 (解压module-init-tools)# cd module-init-tools-3.2 (由/usr/src目录进入module-init-tools目录下)#./configure -prefix=/# make moveold# make all install#.

4、/generate-modprobe.conf /etc/modprobe.conf命令make moveold将把系统原来的modutils工具程序改名为*.old(比如,lsmod.old等等).这将使得你可以继续使用原有的linux-2.4.x系统, 因为在2.4.x系统下, 新的module-init-tools工具包实际上是倚赖原来*.old程序来加载内核模块. 如果忘记了这一步也不要紧张, 可以先下载并安装原来的modutils程序包, 然后按照上面的步骤重来一遍就可以了.7、安装另外三个升级工具回到/usr/src目录下,依次执行下列3个命令来安装另外三个升级工具:# rpm -

5、ivh -nodeps mkinitrd-4.1.18-2.i386.rpm (注意,这里一定要加入-nodeps参数,下同)# rpm -ivh -nodeps lvm2-2.00.25-1.01.i386.rpm# rpm -ivh -nodeps device-mapper-1.00.19-2.i386.rpm如果不更新以上几个升级包,在后面编译内核时会提示以下错误:(注意:如果可以上网可以用Uvh参数的升级方式安装rpm包)mkinitrd failedmake1: * install Error 1make: * install Error 28、配置内核选项。# cd linux-

6、2.6.18 (进入到/usr/src/linux-2.6.18目录下,然后在文档Documentation/Changes中给出了欲成功地升级到kernel-2.6.x所需的最小系统软件要求)# make mrproper (该命令可确保源代码目录下没有不正确的.o文件,非必须)# make menuconfig (文本窗口配置内核各选项)运行这个命令有时会出现一个图形界面,列出了所有的内核配置选项,有的选项下还有子选项,你可以用方向键来选择,用Y键来确定。经过我多次试验,大多数选项默认就行,以下几个选项必须选择(请认真核对下面每一个选项,否则编译很有可能前功尽弃,确认下列标记的选项对应被选

7、择为内核而不是内核模块,其余默认即可):(1)Loadable Module support选项中,一定要选上“Module unloading”和“Automatic kernel module loading”这两项;(2)Device Drivers-Block Devices中一定要选上Loopback device support;Device Drivers-Multi-device support(RAID and LVM)”处要选上“device mapper support”;Device Drivers-Graphics support”, 一定要选上” Support f

8、or frame buffer devices”;Device Drivers -USB support -选上”USB Mass Storage support”(如果是在实环境中,想要更多USB支持,就全选吧。我的是在虚拟机中,用不着了)Device Drivers -; Network device support -;Ethernet (10 or 100Mbit) -; ; AMD PCnet32 PCI support(3) File system-(以下9个选项是关于ext2和ext3文件系统配置,全部选上)Second extended fs supportExt2 exten

9、ded attributesExt2 POSIX Access Control ListsExt2 Security LabelsExt3 journalling file system supportExt3 extended attributesExt3 POSIX Access Control ListsExt3 Security LabelsJBB (ext3) debugging supportFile system-DOS/FAT/NT Filesystems -选上“ NTFS file system support”(新版本获得对ntfs分区的支持,和NT共存时非常有用,当然如

10、果你只是虚拟机玩玩的话,可以忽略本项);File Systems - Miscellaneous filesystems - Compressed ROM file system support (cramfs)(光驱的支持)ext2和ext3文件系统配置很重要,也是必需的,如果对Ext3、Ext2文件的支持直接编译进内核,在你reboot时机器就会当掉,出现如下错误信息:kernel panic : no init found ,try passing init = option to kernel.或者是:VFS:Cannot open root device hdxy or unknow

11、-block(0,0)Please append a correct root= boot optionkernel panic:VFS:Unable to mount root fs on unknown-block(0,0)或者是:mount: error 19 mounting ext3pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed: 2umount /initrd/proc fail: 2Freeing unused kernel memory: 244k freedKernel panic not syncing: No

12、init found. Try passing init = option to kernel(4)如果你在vmware下重新编译内核,硬盘采用的是默认的scsi的,以下选项必选,非常注意:Device Drivers -SCSI device support -SCSI disk supportDevice Drivers-SCSI device support-SCSI low-level drivers-; BusLogic SCSI support(虚拟机为默认的scsi硬盘时,改为M从新编译内核模块,以生成独立的scis驱动程序)三、编译工作9、编译步骤在/usr/src/linux

13、-2.6.18目录下,执行以下命令即可编译。# make dep (建立编译时所需的从属文件。注意:如果内核从未编译过,此步可跳过)# make clean (清除内核编译的目标文件)# make bzImage (注意大小写I。这一步才真正编译内核)内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。如果用make zImage编译,内核很大的话,系统会提示你使用make bzImage命令来编译,所以直接用make bzImage来编译。# make modules (编译可加载模块,选择的外部模块越多时间越长,建议刚

14、开始的时候不要删除默认模块,先熟悉一下内核后再说)# make modules_install (安装可加载模块)安装成功后,系统会在/lib/modules目录下生成一个2.6.18子目录,里面存放着新内核的所有可加载模块。# make install (安装新内核)注意:make install的时候可能会出现如下错误信息:No module BusLogic found for kernel 2.4.12mkinitrd failed此问题一般只出现在SCSI硬盘VMWARE+REDHAT架构中,因为BusLogic被编译进了内核而不是一个module的形式(2.4内核的Buslogic

15、模块即使静态编译进内核也不行)。解决方式是直接将可以BusLogic.o文件复制过去:# cp /usr/src/linux-2.6.18/drivers/scsi/BusLogic.o /lib/modules/2.6.18/kernel/drivers/scsi不过别忘记,复制过后再执行一下make install。(如果make menuconfig时,把BusLogic模块选成M-Module模式-就不会出现这个提示。)注意:如果出现no module /bin/true found for kernel 2.6.10系升级包造成,如下解决办法,原理不详,但有效编辑 /sbin/mki

16、nitrdfor n in $scsimodules; do# for now allow scsi modules to come from anywhere. There are some# RAID controllers with drivers in block/findmodule $ndone改成#for n in $scsimodules; do#findmodule $n# done即注释掉程序代码,再次make install 成功四、启动新内核10、新内核已经自动拷贝到/boot文件夹下, 新版本的内核安装已经不需要手动操作。11、修改Grub启动管理器# df (查看根

17、目录在那个分区,下一步要用到。注意,这里根分区不时boot的那个50M的分区,而一般是你最大的那个分区,也就是”/”,千万不要搞错哦。我的为 /dev/sda1)# vi /boot/menu.lst redhat貌似应该编辑这个,如果没有的话,看看grub.conf 内容相同default=1timeout=10splashimage=(hd0,0)/grub/splash.xpm.gztitle Red Hat Linux (2.6.18)root (hd0,0)kernel /vmlinuz-2.6.18 ro root= LABEL=/initrd /initrd-2.6.18.img

18、做两处修改:(1) 将default=1改为default=0(下方启动列表的序号,从0开始,不改的话,重启之后默认进入第二项2.4内核)(2) 将kernel行的“LABEL=/”换成根目录所在的分区,2.6内核在某些平台上不认LABLE标签(上一步查看的就是,我的如下)default=0timeout=10splashimage=(hd0,0)/grub/splash.xpm.gztitle Red Hat Linux (2.6.18)root (hd0,0)kernel /vmlinuz-2.6.18 ro root=/dev/sda1initrd /initrd-2.6.18.imgt

19、itle Red Hat Linux (2.4.20-8)root (hd0,0)kernel /vmlinuz-2.4.20-8 ro root=LABEL=/initrd /initrd-2.4.20-8.img12,重启,此时可以通过grub启动列表进入2.4或2.6内核,但是此时的内核缺少很多关键功能。13.rpm出错,需升级rpm最简单的做法如下修改/usr/lib/rpm/macros 在里面寻找 代码: %_dbi_cdb create cdb mpool mp_mmapsize=16Mb mp_size=1Mb 修改成 代码: %_dbi_cdb create cdb mpoo

20、l mp_mmapsize=16Mb mp_size=1Mb private14. 支持Hotplug下列配置使2.6.18内核可以mount光驱等其他设备:首先要在内核配置时配置了HOTPLUG的支持. 然后, 由于/proc/ksyms改名为/proc/kallsyms, 所以必需修改启动脚本/etc/rc.sysinit. 为了兼容原有的linux-2.4.x系统, 可以加上下面几行,此代码方案最为简洁:# - KERNEL 2.6.x support -# This is for compatibility between kernel-2.4.x and kernel-2.6.x#U

21、NAME=uname -rKERNELVER=$UNAME:0:3if $KERNELVER = 2.6 ; then# This is kernel-2.6.x#KSYMS=/proc/kallsymselse# This is kernel-2.4.x#KSYMS=/proc/ksymsfi然后, 把rc.sysinit文件中所有出现/proc/ksyms的地方都换成$KSYMS变量引用. 配置好后, 还必需下载hotplug的用户态辅助工具在VI下使用以下命令将原路径全换成全局变量,注意里面的斜杠不是字符V:1,$ s/proc/ksyms/$KSYMS/g 替换 /etc/rc.sys

22、init中的字符串包:http:/www.kernel.org/pub/linux/uti.4_03_11.tar.gz. 解开这个包以后, 直接make install就可以了. 它将产生/etc/hotplug/配置目录.7. 体验sysfs首先, 创建目录/sys:# mkdir /sys然后, 按照下列步骤修改启动脚本/etc/rc.sysinit文件:o 找到行: mount -f /proc, 在下面增加:if $KERNELVER = 2.6 ; thenmount -f /sysfio 找到行: action $Mounting proc filesystem: mount -

23、n -t proc /proc /proc, 在其下面增加这样一行:# Mount /sys for kernel-2.6.x#if $KERNELVER = 2.6 ; thenaction $Mounting sysfs filesystem: mount -n -t sysfs /sys /sysfi接下来, 在/etc/fstab文件中, 加入这样一行:none /sys sysfs defaults 0 0最后, 修改/etc/init.d/halt脚本中的halt_get_remaining函数:将:awk $2 /$|/proc|/dev/next改为:awk $2 /$|/pr

24、oc|/sys|/dev/next8. 支持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

25、usb-ohcialias usb-controller1 ehci-hcd因此, 要把它改为:alias usb-controller ohci-hcdalias usb-controller1 ehci-hcd如果不做这样的修改, 那么使用USB-1.1 host控制器的机器在启动内核的时候将着不到相应的驱动模块.支持USB键盘的模块名字也从keybdev变为usbkbd, 支持USB鼠标的模块名字也从mousedev改为usbmouse. 因此, 我们必需修改启动脚本/etc/rc.sysinit文件. 同时为了兼容原有的2.4.x系统, 我们在脚本的一开始定义两个变量:# - KERN

26、EL 2.6.x support -# This is for compatibility between kernel-2.4.x and kernel-2.6.x#UNAME=uname -rKERNELVER=$UNAME:0:3if $KERNELVER = 2.6 ; then# This is kernel-2.6.x#KSYMS=/proc/kallsymsKEYBDEV_NAME=usbkbdMOUSEDEV_NAME=usbmouseelse# This is kernel-2.4.x#KSYMS=/proc/ksymsKEYBDEV_NAME=keybdevMOUSEDEV

27、_NAME=mousedevfi然后, 把/etc/rc.sysinit脚本文件中出现keybdev和mousedev的地方都改为$KEYBDEV_NAME和$MOUSEDEV_NAME.(参看前面的VI替换命令) 把脚本文件/etc/rc.sysinit中的needusbstorage部分从:needusbstorage=if $usb = 1 ; thenneedusbstorage=LC_ALL=C grep -e I.*Cls=08 /proc/bus/usb/devices 2/dev/nullLC_ALL=C grep hid /proc/bus/usb/drivers | act

28、ion $Initializing USB HID interface: modprobe hid 2 /dev/nullaction $Initializing USB keyboard: modprobe $KEYBDEV_NAME 2 /dev/nullaction $Initializing USB mouse: modprobe $MOUSEDEV_NAME 2 /dev/nullfi改为:needusbstorage=if $usb = 1 ; thenif $KERNELVER = 2.6 ; thenneedusbstorage=LC_ALL=C grep -e I.*Cls=

29、08 /sys/bus/usb/devices 2/dev/nullLC_ALL=C grep hid /sys/bus/usb/drivers | action $Initializing USB HID interface: modprobe usbhid 2 /dev/nullelseneedusbstorage=LC_ALL=C grep -e I.*Cls=08 /proc/bus/usb/devices 2/dev/nullLC_ALL=C grep hid /proc/bus/usb/drivers | action $Initializing USB HID interface: modprobe hid 2 /dev/nullfiaction $Initializing USB keyboard: modprobe $KEYBDEV_NAME 2 /dev/nullaction $Initializing USB mouse: modprobe $MOUSEDEV_NAME 2 /dev/nullfi退出,重启,基本上就可以正常使用2.6.18的内核了,目前未发现有其他问题,有问题的话多数还是发生在内核配置出错,有时间可以详细了解下内核配置的含义。附录:转载的内核配置说明列

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1