1、linux2.4内核升级到 2.6内核简单过程2008年 01月 04日 星期五 22:53linux2.4内核升级到 2.6内核简单过程Linux 2.4内核升级为 2.6内核前期准备:1. 去 linux的官方网站上下一个 linux 2.6的内核!http:/www.kernel.org;2. 安装一个 modele-init-tools-3.0.tar.gz工具包,因为 2.4.x的 modutils工具包已经不适合新的2.6.x内核,必须将它升级到 modele-init-tools工具包。可以到http:/www.kernel.org/pub/linux/utils/kernel/
2、modele-init-tools-3.0.tar.gz下载3. 安装 modele-init-tools工具包#configure prefix/#make moveold#make all install#./generate-modprobe.conf /etc/modprobe.conf4. 升级 binutils工具下载一个 binutils-2.16工具包下载地址为:http:/ install5. 下面就可以开始编译内核了,首先把下载的内核解压缩,#tar xzvf linux-2.6.20.tar.gz#./configure /生成 Makefile文件 #make menu
3、config /开始配置内核l Loadable Module support 选项,一定要选上 Module unloading 和 Automatic kernel module loading这两项。l Processor type an features 选项,一定要选上 Preemptible kernell Block Devices选项,一定要选择支持 loopback 和 ramdiskl Multi-device support(RAID and LVM) 要选上 device mapperl Input device support 要选上 Keyboards 和 Mice
4、的支持l Graphics support 要选上 frame buffer 的支持l ALSA 要选上, OSS API emulation (声卡驱动)l USB 选项,能选择的就都选上l 关于文件系统,常用的几种一定要选上,比如Ext2 extended attributesExt2 POSIX Access Control ListsExt2 Security LabelsExt3 journalling file system supportExt3 extended attributesExt3 POSIX Access Control ListsExt3 Security Lab
5、els如果使用虚拟机的一定要把 sics的驱动选择上6配置好内核以后,保存推出开始编译。#make bzImage#make modules#make modules_install# cp /usr/src/linux-2.6.18/drivers/scsi/BusLogic.o /lib/modules/2.6.18/kernel/drivers/scsi用于解决 SCSI硬盘VMWARE+REDHAT 架构中,因为 BusLogic被编译进了内核而不是一个 module的形式(2.4 内核的 Buslogic模块即使静态编译进内核也不行)。解决方式是直接将 BusLogic.o文件复制过
6、去.(如果不是 SCSI硬盘VMWARE+REDHAT 架构中上面的拷贝可以省略)#make install7.到这里内核的编译已经完成,可以重新启动 linux系统了,#reboot转)Linux 内核升级全过程 手把手教你一次成功(2.4.20-8 到 2.6.18)2007年 01月 23日 星期二 14:54Linux内核升级全过程 手把手教你一次成功(2.4.20-8 到 2.6.18)=时间:2007-01-08 作者:飘扬首发:Q Q: 47720194=序言由于开发环境需要在 linux-2.6内核上进行,于是准备对我的虚拟机上的 Linux系统升级。没想到这一弄就花了两天时间
7、(反复装系统,辛苦啊),总算把 Linux系统从 2.4.20-8内核成功升级到了 2.6.18内核。网上虽然有很多介绍 Linux内核升级的文章,不过要么过时,下载链接失效;要么表达不清,不知所云;更可气的是很多文章在转载过程中命令行都有错误。刚开始我就是在这些“攻略”的指点下来升级的,以致于浪费了很多时间。现在,费尽周折,升级成功,心情很爽,趁性也来写个“升级攻略”吧!于是特意又在虚拟机上重新安装一个 Linux系统,再来一次完美的升级,边升级边记录这些步骤,写成一篇 Linux内核升级记实录(可不是回忆录啊!),和大家一起分享!首先说明,下面带#号的行都是要输入的命令行,且本文提到的所有
8、命令行都在终端里输入。接下来,让我们一起开始精彩的 Linux内核升级之旅吧!一、准备工作启动 Linux系统,并用根用户登录,进入终端模式下。1、查看 Linux内核版本# uname -a如果屏幕显示的是 2.6.x,说明你的已经是 2.6的内核,也用不着看下文了,该干什么干什么去吧!如果显示的是 2.4.x,那恭喜你,闯关通过,赶快进行下一步。2、下载 2.6内核源码下载地址:http:/www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz23、下载内核升级工具(1)下载 module-init-tools-3.2.tar.bz
9、2http:/www.kernel.org/pub/linux/utils/kernel/module-init-tools/module-init-tools-3.2.tar.bz2 (2)下载 mkinitrd-4.1.18-2.i386.rpmhttp:/ (3)下载 lvm2-2.00.25-1.01.i386.rpmhttp:/ device-mapper-1.00.19-2.i386.rpmhttp:/ 4个升级工具我都有备份,如果以上下载地址失效,请到 http:/ 留下你的邮箱,我给你发过去)二、配置工作好啦,2.6 内核和 4个升级工具都下载完了(少一个也不行,如果没有下载齐
10、全,请不要尝试下面的步骤,升级是不会成功的),下面回到 Linux系统中开始配置工作吧。4、将下载好的内核和 4个升级工具都拷贝到/usr/src 文件夹下。怎么拷贝就不用我教了吧不会拷贝的去撞墙吧!呵呵!5、拷贝完毕,开始解压新内核,具体操作请依次执行以下命令:# cd /usr/src (进入到/usr/src 目录下,如果已经在/usr/src 目录下,可不执行该命令)# rm rf linux (删除 linux文件夹。值得一提的是,如果内核先前从未编译过,则没有这个文件夹,此命令行可略过)# tar jvxf linux-2.6.18.tar.bz2 (解压新内核)# ln -s l
11、inux-2.6.18 linux (重新生成 linux文件夹)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#./generate-modprobe.conf /etc/modpr
12、obe.conf7、安装另外三个升级工具回到/usr/src 目录下,依次执行下列 3个命令来安装另外三个升级工具:# rpm -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如果不更新以上几个升级包,在后面编译内核时会提示以下错误:mkinitrd failedmake1: * install Error 1make: *
13、 install Error 28、配置内核选项。有点繁琐,希望一次成功哦。# cd linux-2.6.18 (进入到/usr/src/linux-2.6.18 目录下)# make mrproper (该命令可确保源代码目录下没有不正确的.o 文件)# make menuconfig (配置内核各选项)此时会出现一个图形界面,列出了所有的内核配置选项,有的选项下还有子选项,你可以用方向键来选择,用 Y键来确定。经过我多次试验,大多数选项默认就行,以下几个选项必须选择(请认真核对下面每一个选项,否则编译很有可能前功尽弃):(1)Loadable Module support选项中,一定要选上
14、“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 for frame buffer devices”;Device Drivers -;USB support
15、 -选上”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 extended attributesExt2 POSIX Access Control ListsEx
16、t2 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”;File Systems Miscellaneous filesystems - Compressed ROM file system support (
17、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-block(0,0)Please append a correct “root=“ boot optionkernel panic:VFS:Unable to mount root fs on
18、 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 init found. Try passing init = option to kernel(我的机器就是在重启之后出现第三种错误,进不去系统,郁闷死,只好重装了)(4)如果你在 vmw
19、are下重新编译内核,硬盘用的是 scsi的,以下选项必选:Device Drivers -SCSI device support -SCSI disk supportDevice Drivers-SCSI device support-SCSI low-level drivers-; BusLogic SCSI support三、编译工作OK,繁杂的配置工作完成了,至此,编译前的准备工作都做好了!9、开始编译啦:在/usr/src/linux-2.6.18 目录下,执行以下命令即可编译。编译需要一段时间,给自己倒杯茶耐心等候吧!# make dep (建立编译时所需的从属文件。注意:如果内核
20、从未编译过,此步可跳过)# make clean (清除内核编译的目标文件)# make bzImage (注意大小写。这一步才真正编译内核)内核编译成功后,会在/usr/src/linux/arch/i386/boot 目录中生成一个新内核的映像文件 bzImage。如果用 make zImage编译,内核很大的话,系统会提示你使用 make bzImage命令来编译,所以我直接用 make bzImage来编译。# make modules (编译可加载模块)# make modules_install (安装可加载模块)安装成功后,系统会在/lib/modules 目录下生成一个 2.6
21、.18子目录,里面存放着新内核的所有可加载模块。# make install (安装新内核)注意:make install 的时候可能会出现如下错误信息:No module BusLogic found for kernel 2.4.12mkinitrd failed此问题一般只出现在 SCSI硬盘VMWARE+REDHAT 架构中,因为 BusLogic被编译进了内核而不是一个 module的形式(2.4 内核的Buslogic模块即使静态编译进内核也不行)。解决方式是直接将可以 BusLogic.o文件复制过去:# cp /usr/src/linux-2.6.18/drivers/scsi
22、/BusLogic.o /lib/modules/2.6.18/kernel/drivers/scsi不过别忘记,复制过后再执行一下 make install。(如果 make menuconfig时,把 BusLogic模块选成 M-Module模式-就不会出现这个提示。)四、启动新内核10、将新内核和 System.map文件拷贝到/boot 目录下,依次执行以下命令: # cp /usr/src/linux-2.6.18/arch/i386/boot/bzImage /boot/vmlinuz-2.6.18 # cp /usr/src/linux-2.6.18/System.map /b
23、oot/System.map-2.6.18 # cd /boot (进入 boot目录)# rm rf System.map (删除原来的连接) # ln -s System.map-2.6.18 System.map (重新建立连接) 11、修改 Grub启动管理器如果没有错误的话, 下面开始修改 grub配置文件(不要告诉我你用的 lilo)在/boot 目录下,执行以下命令:# new-kernel-pkg -mkinitrd -depmod -install 2.6.18 (这时候你的/boot 下生成一个 initrd-2.4.12.img,并且你的grub.conf也作了相应更改)
24、# df (查看根目录在那个分区,下一步要用到。注意,这里根分区不时 boot的那个 50M的分区,而一般是你最大的那个分区,也就是”/”,千万不要搞错哦。我的为 /dev/hda2)# vi /grub/grub.conf 进入 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做两处修
25、改:(1) 将 default=1改为 default=0(不改的话,重启之后默认进入 2.4内核)(2) 将 kernel行的“LABEL=/”换成根目录所在的分区(上一步查看的就是)此步很重要,修改错误将会可能导致进不去系统,我把我修改后的 grub.conf文件列出来,不明之处,可以对照修改: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/hda2initrd /initr
26、d-2.6.18.imgtitle 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,OK,大功告成!赶快重启,看看升级后的 2.6内核吧(如升级过程中遇到不明问题,或是探讨内核升级话题,请到 http:/ 留言)一、为什么要编译内核;有时我们为了实现某些功能,比如对 iptables的防火墙有些需要内核支持;还有实现一些硬件 的支持等,这时我们需要重编内核;二、内核源码版本的选择;如果发行版本提供内核源码,最好还是用发行版本提供的;
27、比如 Fedora 4.0 提供了很多版本的内核源码;我们安装好后,他自带的配置文件大多能满足我们的需要,对于新手来说,根据自带的内核的配置文件.config ,我们也能学到一点如何配置内核。也没有什么难的,熟能生巧罢了;如果从 kernel.org 下载最新稳定版本的内核也是可以的;三、内核源码安装或解压;对于 Fedora Core 4.0 来说,内核源码是放在 /usr/src/kernels 目录中;如果通过在线升级内核,也是放在这个目录中;如果您的系统中的 /usr/src/kernels/ 中没有内容,说明您没有安装内核的源码包 kernel-devel 软件包;您可以通过软件包管
28、理器来补装,请参考 相关文档。如果您用 Fedora Core 4.0 ,我建议您在保留老内核的基础上,在线下载最新版本的内核 kerenl-devel 和对应版本的 kernel 或者从 kernel.org 下载,有时可能新的 kerenl 已经解决了您所面对的问题,这时就没有必要编译内核了;如果您是通过在线安装的内核源码包,比如通过 apt+synaptic 或者 yum 安装的,内核源码会被放到/usr/src/kernel 下的目录中,您要进入相对应的目录进行编译;在线更新软件包,请参考 相关文档,推荐 apt+synaptic 工具;如果您是是下载 kernel 和 kernel-
29、devel 的 rpm 包,可以通过来安装;rootlocalhost beinan# rpm -ivh kernel*.rpm如果您是从 kernel.org 下载的类似 linux-2.6.13.tar.bz2 或者 linux-2.6.13.tar.gz 的,您要把下载下来的文件移到 /usr/src 目录中解压;然后进入解压的目录中进行配置和编译;rootlocalhost beinan# mv linux-2.6.13.tar.bz2rootlocalhost beinan# cd /usr/src/rootlocalhost src# tar jxvf linux-2.6.12.3
30、.tar.bz2提示:本文以 linux-2.6.12.3为例,其实通过发行版的升级版的 kernel-devel 和从 kernel.org 下载下来的差不多,大同小异;不同的是通过在线升级的 rpm格式的内核源码包,有配置文件.config 可以参考;安装到的目的地是/usr/src/kernel 对 FC 4.0来说;如果您要高编译和配置内核,四、内核的配置;1、进入目录执行 make mrproper ,对于从 kernel.org 下载而来的 tar.bz格式的源码包;rootlocalhost src# cd linux-2.6.12.3/rootlocalhost linux-2
31、.6.12.3#rootlocalhost src# cd linux-2.6.12.3/rootlocalhost linux-2.6.12.3# make mrproperrootlocalhost linux-2.6.12.3# make menuconfig对于 Fedora Core 4.0 ,如果您是通过在线安装的 kernel 和 kernel-devel 新版本的包,比如是2.6.12-1.1398_FC4-i686,你可以直进入 /usr/src/kernel/相应的目录中直接执行 make menuconfig ;利用发行版本提供的 .config 来配置,这样方便点。不要
32、 make mrproper ,否则.config 就没有了;这也是为什么要用发行版本提供的内核源码升级包的原因;其它配置和安装大同小异;模仿总可以吧;2.简要的配置内核;进入配置内核的配置模式后,我们可能一无所知,看下面;内核配置有两种方法,一种是直接置入内核 * ;另一种是编成模块 M ;两种方法各有优点;直接编入内核的,比如设备的启动,不再需要加载模块的这一过程了;而编译成模块,则需要加载设备的内核支持的模块;但直接把所有的东西都编入内核也不是可行的,内核体积会变大,系统负载也会过重。我们编内核时最好把极为重要的编入内核;其它的如果您不明白的,最好用默认。1)移动键盘上下左右键,按 En
33、ter 进入一个目录。把指针移动到 Exit就退出当前目录到上级目录;2)针对自己机器存在的问题进行修改,比如大内存的支持;选择自己机器的 CPU;移动键盘到 Processor type and features - ,然后按 ENTER进入;找到 Processor family (Pentium-Pro) - 按 ENTER进入;进入后我们发现有好多 CPU的型号可选;一般的情况下要根据bash-3.00# cat /proc/cpuinfo 输出的信息来选,比如我们的是 Celeron (P4)一代的,应该选如下的,当然默认的 486 也是可以正常运行的,既然我们重编一次内核,就得选中
34、对应型号的,也许性能有所提高呢;Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon)对大内存支持;如果内存是 1G或者 1G以上,但小于 4G的,就要选 4G支持;如果超过 4G的,要选 64G的支持;High Memory Support (4GB) -(X) 4GB( ) 64GB还有比如声卡等硬件,需要我们一步一步的查看;如果有不明之处,就要按 shift+?的组合键来查看说明。一般的情况下,2.6.x 的内核会根据机器的情况自动配出一个文件,只需要我们来查看一下,把重要的地方改改就行了;再举个例子:比如我现在所用
35、的声卡是 intel ac97的,我应该怎么配置呢?首先要知道自己的声卡的芯片组,我们要通过 lspci -v 来查看;rootlocalhost beinan#lspci -v只查看声卡的,应该用如下的方法:rootlocalhost beinan# lspci -v |grep audio00:1f.5 Multimedia audio controller: Intel Corp. 82801DB (ICH4) AC97 Audio Controller (rev 03)通过上面的输出,我们知道这台机器用的是 intel AC97声卡;所以我们要特别注意 AC97的配置;找到 Devic
36、e Drivers - Sound -Sound card support 声卡的支持,这个是一定要选中的吧;Advanced Linux Sound Architecture 对声卡支持的 ALSA驱动的支持;下面有 OSS驱动,只是一部份。如果想用 OSS的驱动更全的,可以去买;其它的就看如下的选吧;Sequencer supportSequencer dummy clientOSS Mixer APIOSS PCM (digital audio) API* OSS Sequencer APIRTC Timer support* Verbose printk Debug大多是默认的就好,如
37、果您不知道是做什么用的,或者怎么用;然后我们再向下看有Generic devices - 进入里面Dummy (/dev/null) soundcardVirtual MIDI soundcardMOTU MidiTimePiece AV multiport MIDIUART16550 serial MIDI driverGeneric MPU-401 UART driverISA devices - 如果您用 ISA声卡就在这里面选;PCI devices - 如果您用 PCI声卡,就在这里面选,集成声卡也在这里;USB devices - 这是 USB声卡内核支持选项;我有一个这样的声卡,
38、但没有试过;PCMCIA devices - 这是 PCMCIA声卡的选项,我还没有看过这样的声卡呢;如果您有,就在这里面动动手吧。因为我用的是 Intel 集成的声卡,所以要在 PCI中选择,我们在中可以看到有两个与 INTEL有关的;Intel/SiS/nVidia/AMD/ALi AC97 Controller 这个才是 Intel AC97声卡的;Intel/SiS/nVidia/AMD MC97 Modem (EXPERIMENTAL) 这个是机器集成的 INTEL猫的蜂鸣器的;因为我发现如果把猫的蜂鸣器的驱动也选上,可能造成两个冲突。所以只能选上面的那个;我们再回到 Open So
39、und System - 中看看,与我用的声卡是不是有关的?Open Sound System (DEPRECATED)Intel ICH (i8xx) audio supportOSS sound modulesLoopback MIDI device supportMicrosoft Sound System support我们也可以看到 Open Sound System中也有好多的声卡驱动,大家根据前面的 lspci -v 来选择吧。3)对于操作系统所采用的文件系统的支持要编入内核,最好不要编成模块;(重要)比如我的 Fedora core 4.0 所采用的文件系统用的是 ext3 ,所以我要把它直接编入内核;好处是不受模块丢失或者损坏而不能启动系统;而有时您把系统所采用的文件系统编译成模块,出现 VFS错误,也有这方面的事,可能是您没有把 ext3加入到相应的加载模块的配置文件中,所以我们为了减少麻烦,把风险降到最低,还是要直接置入内模的好;File systems -Ext3 journalling file system support* Ext3 extended attributes* Ext3 POSIX Access Control Lists* Ext3 Security Labels