redhat9内核升级过程

作者:laomai

地址:http://blog.csdn.net/laomai

本文记录了我在winxp下的vmware6.5虚拟机中升级linux2.4.2内核到2.6.18的过程。

主要参考了以下两篇文章
1、Linux内核升级全过程 手把手教你一次成功(2.4.20-8到2.6.18)
作者:飘扬,
首发地址:http://www.piaoyang.org/blog

飘扬的这篇文章写的很详细,只是个别地方还有瑕疵,

本文主要就是以该文为蓝本,修正了原文中的一些错误,

并加入了编译图标的详细说明。
2、我自己以前写的内核编译过程笔记。

一、安装linux系统并登陆
1、安装linux redhat 9,最小安装,grub启动,具体步骤略。
2、启动Linux系统,并用root用户登录,进入终端模式下。
以后未加说明时下面带#号的行都是要输入的命令行,
且本文提到的所有命令行都在终端里输入。
3、查看内核版本
# uname -a
如果屏幕显示的是2.6.x,说明你的已经是2.6的内核,
也用不着看下文了,该干什么干什么去吧!
~~~如果显示的是2.4.x,那恭喜你,闯关通过,赶快进行下一步。

二、准备必要的软件包
2.1 安装开发工具包,主要包括
gcc、make、ncurse,依次执行如下命令
#rpm -ivh binutils-2.13.90.0.18-9.i386.rpm
#rpm -ivh cpp-3.2.2-5.i386.rpm
#rpm -ivh glibc-kernheaders-2.4-8.10.i386.rpm
#rpm -ivh glibc-devel-2.3.2-11.9.i386.rpm
#rpm -ivh gcc-3.2.2-5.i386.rpm
#rpm -ivh ncurses-devel-5.3-4.i386.rpm
最后一个ncurse开发库如果不装,在编译module-init-tool时会报错。

2.2、下载2.6内核源码和升级工具,包括
(1)2.6内核源码
下载地址:http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2
(2)下载module-init-tools-3.2.tar.bz2
http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/module-init-tools-3.2.tar.bz2
(3)下载mkinitrd-4.1.18-2.i386.rpm
http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/mkinitrd-4.1.18-2.i386.rpm
(4)下载lvm2-2.00.25-1.01.i386.rpm
http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/lvm2-2.00.25-1.01.i386.rpm
(5)下载device-mapper-1.00.19-2.i386.rpm
http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/device-mapper-1.00.19-2.i386.rpm

三、配置内核
3.1 将下载好的内核源码包和4个升级工具都拷贝到/usr/src文件夹下。步骤略。
3.2 开始解压新内核,具体操作步骤:
(1)#cd /usr/src 
 (进入到/usr/src目录下)
(2)#rm –rf linux 
 (删除linux文件夹。值得一提的是,如果内核先前从未编译过,则没有这个文件夹,此命令行可略过)
(3)#tar jvxf linux-2.6.18.tar.bz2  (解压新内核)
(4)#ln -s linux-2.6.18 linux  (重新生成linux文件夹)
3.3 安装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/modprobe.conf 
备注:这一步的输出文件名modprobe.conf一定要写对。
我第一次安装是用tab键的自动完成功能写成了./generate-modprobe.conf /etc/modules.conf,
结果挂了... 
3.4、安装另外三个升级工具
回到/usr/src目录下安装另外三个升级工具,依次执行如下命令:
# cd /usr/src   (回到/usr/src目录下)
# 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 failed
      make[1]: *** [install] Error 1
      make: *** [install] Error 2
3.5、配置内核选项。有点繁琐,~~希望一次成功哦~~。
# cd linux-2.6.18  (进入到/usr/src/linux-2.6.18目录下)
# make mrproper  (该命令可确保源代码目录下没有不正确的.o文件)
# make menuconfig (配置内核各选项,具体说明见下)
3.6 内核选项说明
执行make menuconfig会出现一个图形界面,列出了所有的内核配置选项,
有的选项下还有子选项,你可以用方向键来选择,用Y键来确定。
经过多次试验,大多数选项默认就行,以下几个选项必须选择
(请认真核对下面每一个选项,否则编译很有可能前功尽弃):
(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 for 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 support
           Ext2 extended attributes
           Ext2 POSIX Access Control Lists
           Ext2 Security Labels
           Ext3 journalling file system support
           Ext3 extended attributes
           Ext3 POSIX Access Control Lists
           Ext3 Security Labels
           JBB (ext3) debugging support
(4)ile system--->DOS/FAT/NT Filesystems
             --->“NTFS file system support”;也要选上
注意:
       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 option
       kernel panic:VFS:Unable to mount root fs on unknown-block(0,0)
或者是:
       mount: error 19 mounting ext3
       pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed: 2
       umount /initrd/proc fail: 2
       Freeing unused kernel memory: 244k freed
       Kernel panic – not syncing: No init found. Try passing init = option to kernel
(某人的机器就是在重启之后出现第三种错误,进不去系统,郁闷死,只好重装了~~~
如果依照本文做完所有步骤,当你重启Linux系统后,若不幸进不去2.6.18内核,
你会发现你的出错信息就是上面三种了~~~哈!)
(5)如果你在vmware下编译内核,硬盘用的是scsi的,以下三个选项必选:
   Device Drivers ---><*>SCSI device support  (此项不选的话,下面两项就选择不上)
   Device Drivers ---><*>SCSI device support ---><*>SCSI disk support
   Device Drivers---><*>SCSI device support--->SCSI low-level drivers ---><*>; BusLogic SCSI support
                
3.7选项配置图标的说明:
(1)选项的配置方法:
  按Y,表示以build-in的方式包含,也就是把选项集成到内核里.
  对应的图标为[*]或<*>,
  按N,表示不包含。对应的图标为[ ]或< >
  按M,表示以模块的形式包含,对应的图标为<M>. 注意不是所有的选项都可以用模块形式加载的

(2)选项的状态图标 
 每个选项设完之后会显示一个状态图标,只能是下面5种之一
 [*] - built-in表示这个选项被集成在内核里了
 [ ] - excluded 表示这个选项被内核排除了
 <M> - module 表示这个选项以模块的形式放在内核里,
  用户用到这个选项的时候要执行insmod命令.
  要注意不是所有的选项都可以以模块的形式加载的。
  所以当你按了m键,图标仍然是[*]而不是<M>时,就要
  明白这个选项只能要么集成在内核里,要么被内核排除。
 < > - module capable,表示这个选项虽然被排除了,但
  可以以模块的形式被重新加载,比如,一个图标为<M>的
  选项,按N键以后状态就会变成< >.
 <*> - 这个图标帮助没写,当实际上会出现,比如,按某个选项状态为<M>
    或者< >时,按Y键,图标就会变成这个,意思和[*] 一样,把可以用模块
    加载的选项变成build-in方式加载。
   
(3)归纳一下就是: 括号里如果为空白,则该选项未被加载,想使用该选项时必须重新编译内核;
   如果括号里是*,是以build-in的方式加载;
   如果中间是m(此时只能是尖括号),就是以模块的形式动态加载.想使用时用insmod载入。不必重新编译内核

四、编译工作
OK,繁杂的配置工作完成了,至此,编译前的准备工作都做好了!
4.1、开始编译啦……
在/usr/src/linux-2.6.18目录下,执行以下命令即可编译。
# make dep  (建立编译时所需的从属文件。注意:如果内核从未编译过,此步可跳过)
# make clean  (清除内核编译的目标文件。注意:如果内核从未编译过,此步可跳过)
# make bzImage  (注意大小写。这一步才是真正编译内核,也就是编译built-in的东西)
     这一步时间较长,我的机器是1个小时左右。
     内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。
     如果用 make  zImage编译,内核很大的话,系统会提示你使用make   bzImage命令来编译,
     所以直接用make bzImage来编译。
# make modules  (编译可加载模块)
  这一步时间也不短,我的机器用了半个小时
# make modules_install  (安装可加载模块)
  安装成功后,系统会在/lib/modules目录下生成一个2.6.18子目录,里面存放着新内核的所有可加载模块。
#make (这一步也要进行,不然执行下面的make install时会报错)
#make install  (安装新内核)
注意:
     make install的时候可能会出现如下错误信息:
     No module BusLogic found for kernel 2.4.12
     mkinitrd failed
此问题一般只出现在SCSI硬盘+VMWARE+REDHAT架构中,
因为BusLogic被编译进了内核而不是一个module的形式
(2.4内核的Buslogic模块即使静态编译进内核也不行)。
解决方式是直接将BusLogic.o文件复制过去:
#cp /usr/src/linux-2.6.18/drivers/scsi/BusLogic.o  /lib/modules/2.6.18/kernel/drivers/scsi
不过别忘记,复制过后再执行一下make install。
这一步若卡住了,下面的都无法进行
五、启动新内核
5.1、将新内核和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   /boot/System.map-2.6.18    
# cd  /boot  (进入boot目录)
# rm –rf  System.map  (删除原来的连接)    
# ln –s System.map-2.6.18  System.map   (重新建立连接)    
5.2、修改Grub启动管理器
如果没有错误的话, 下面开始修改grub配置文件
在/boot目录下,执行以下命令:
# new-kernel-pkg --mkinitrd --depmod --install 2.6.18
(这时候你的/boot下会生成一个initrd-2.4.18.img,并且你的grub.conf文件也作了相应更改)
# df 
(查看根目录在那个分区,下一步要用到。注意,这里根分区不时boot的那个50M的分区,
而一般是你最大的那个分区,也就是“/”对应的物理设备名,千万不要搞错哦。我的为 /dev/hda2)
# vi /grub/grub.conf 
进入grub.conf文件,找到如下信息:
default=1
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.6.18)
        root (hd0,0)
        kernel /vmlinuz-2.6.18 ro root= LABEL=/
        initrd /initrd-2.6.18.img
做两处修改:
(1) 将default=1改为default=0(不改的话也可以,只不过重启之后会默认进入2.4内核)
(2) 将kernel行的“LABEL=/”换成根目录所对应的设备名(上一步用df查看的就是)
此步很重要,修改错误将可能导致进不去系统,我把我修改后的grub.conf文件列出来,不明之处,可以对照修改:
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.6.18)
        root (hd0,0)
        kernel /vmlinuz-2.6.18 ro root=/dev/hda2
        initrd /initrd-2.6.18.img
title 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.img
5.3,赶快重启,看看升级后的2.6内核吧,OK,大功告成!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux命令大全完整版 目 录 目 录 I 1. linux系统管理命令 1 adduser 1 chfn(change finger information) 1 chsh(change shell) 1 date 2 exit 3 finger 4 free 5 fwhois 5 gitps(gnu interactive tools process status) 5 groupdel(group delete) 6 groupmod(group modify) 6 halt 7 id 7 kill 8 last 8 lastb 8 login 9 logname 9 logout 9 logrotate 9 newgrp 10 nice 10 procinfo(process information) 11 ps(process status) 11 pstree(process status tree) 14 reboot 15 renice 15 rlogin(remote login) 16 rsh(remote shell) 16 rwho 16 screen 17 shutdown 17 sliplogin 18 su(super user) 18 sudo 19 suspend 19 swatch(simple watcher) 20 tload 20 top 21 uname 21 useradd 22 userconf 22 userdel 23 usermod 23 vlock(virtual console lock) 24 w 24 who 25 whoami 25 whois 25 2. linux系统设置命令 27 alias 27 apmd(advanced power management BIOS daemon) 27 aumix(audio mixer) 27 bind 29 chkconfig(check config) 29 chroot(change root) 30 clock 30 crontab 31 declare 31 depmod(depend module) 32 dircolors 32 dmesg 33 enable 33 eval 33 export 33 fbset(frame buffer setup) 34 grpconv(group convert to shadow password) 35 grpunconv(group unconvert from shadow password) 35 hwclock(hardware clock) 35 insmod(install module) 36 kbdconfig 36 lilo(linux loader) 37 liloconfig 38 lsmod(list modules) 38 minfo 38 mkkickstart 39 modinfo(module infomation) 39 modprobe(module probe) 39 mouseconfig 40 ntsysv 41 passwd(password) 41 pwconv 41 pwunconv 42 rdate(receive date) 42 resize 42 rmmod(remove module) 42 rpm(redhat package manager) 43 set 46 setconsole 47 setenv(set environment variable) 48 setup 48 sndconfig 48 SVGAText Mode 49 timeconfig 49 ulimit 50 unalias 50 unset 51 3. linux文档编辑命令 52 col 52 colrm(column remove) 52 comm(common) 52 csplit(context split) 53 ed(editor) 53 egrep 54 ex 54 fgrep(fixed regexp) 54 fmt(fromat) 54 fold 55 grep 55 ispell(interactive spelling checking) 57 jed 58 joe 58 join 60 look 61 mtype 61 pico 62 rgrep(recursive grep) 62 sed(stream editor) 63 sort 64 spell 65 tr(translate character) 65 uniq 65 wc(word count) 66 4. linux压缩备份命令 67 ar 67 bunzip2 68 bzip2 68 bzip2recover 69 compress 69 cpio(copy in/out) 70 dump 72 gunzip(gnu unzip) 73 gzexe(gzip executable) 74 gzip(gnu zip) 74 lha 75 restore 76 tar(tape archive) 77 unarj 80 unzip 81 zip 82 zipinfo 83 5.linux文件管理命令 85 diff(differential) 85 diffstat(differential status) 86 file 87 find 87 git(gnu interactive tools) 90 gitview(gnu interactie tools viewer) 91 ln(link) 91 locate 92 lsattr(list attribute) 92 mattrib 93 mc(midnight commander) 93 mcopy 94 mdel 94 mktemp 95 mmove 95 mread 95 mren 96 mshowfat 96 mtools 96 mtoolstest 96 mv 97 od(octal dump) 97 paste 98 patch 99 rcp(remote copy) 101 rhmask 101 rm(remove) 101 slocate(secure locate) 102 split 102 tee 103 tmpwatch(temporary watch) 103 touch 103 umask 104 whereis 104 which 105 cat 105 chattr(change attribute) 106 chgrp(change group) 106 chmod(change mode) 107 chown(change owner) 108 cksum(check sum) 109 cmp(compare) 109 cp(copy) 110 cut 111 indent 111 6.linux文件传输命令 115 bye 115 ftp(file transfer protocol) 115 ftpcount 115 ftpshut(ftp shutdown) 115 ftpwho 116 ncftp(nc file transfer protocol) 116 tftp(trivial file transfer protocol) 116 uucico 116 uucp 117 uupick 118 uuto 119 7. linux磁盘管理命令 120 cd(change directory) 120 df(disk free) 120 dirs 121 du(disk usage) 121 edquota(edit quota) 122 eject 122 lndir(link directory) 123 ls(list) 123 mcd 125 mdeltree 125 mdu 126 mkdir(make directories) 126 mlabel 126 mmd 127 mmount 127 mrd 127 mzip 127 pwd(print working directory) 128 quota 128 quotacheck 128 quotaoff 129 quotaon 129 repquota(report quota) 130 rmdir(remove directory) 130 rmt(remote magnetic tape) 130 stat(status) 131 Tree 131 umount 132 8. linux磁盘维护命令 133 badblocks 133 cfdisk 133 dd 134 e2fsck(ext2 file system check) 134 ext2ed(ext2 file system editor) 136 fdisk 137 fsck.ext2(file system check-second filesystem) 137 fsck(file system check) 138 fsck.minix(file system check-minix filesystem) 139 fsconf(file system configurator) 139 hdparm(hard disk parameters) 139 losetup(loop setup) 141 mbadblocks 141 mformat 141 mkbootdisk(make boot disk) 142 mkdosfs(make Dos file system) 143 mke2fs(make ext2 file system) 143 mkfs.ext2 144 mkfs(make file system) 144 mkfs.minix 145 mkfs.msdos 145 mkinitrd(make initial ramdisk images) 145 mkisofs(make iso file system) 145 mkswap 147 mpartition 148 sfdisk 148 swapoff 149 swapon 149 symlinks(symbolic links) 149 sync 150 9. linux网络通讯命令 151 dip 151 getty(get teletypewriter) 151 mingetty 152 ppp-off 152 smbd(samba daemon) 152 telnet 153 uulog 154 uustat 154 uux 155 cu(call up) 156 dnsconf(dns configurator) 157 efax 158 httpd(http daemon) 159 ifconfig 159 mesg 160 minicom 161 nc 161 netconf 162 netstat 162 ping 163 pppstats(point to point protocol status) 164 samba 164 setserial 165 shapecfg(shaper configuration) 165 smbd(samba daemon) 166 statserial(status ofserial port) 166 talk 166 Tcpdump 167 testparm(test parameter) 168 traceroute 168 tty(teletypewriter) 169 uuname 169 wall(write all) 170 write 170 ytalk 170 arpwatch(ARP watcher) 170 apachectl(Apache control interface) 171 smbclient(samba client) 171 pppsetup 172 10. linux电子邮件与新闻组命令 173 archive 173 ctlinnd(control the internet news daemon) 173 elm 173 getlist 174 inncheck(inn check) 174 mail 175 mailconf 175 mailq(mail queue) 175 messages 176 metamail 176 mutt 177 nntpget 178 pine 178 slrn 180 11. linux其他命令 181 reconfig 181 startx(start X Window) 181 xconfigurator 181 XF86Setup 182 xlsatoms 182 xlsclients 183 xlsfonts 183 yes 184

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值