如何升级/编译Linux内核

时间:2020-12-30 12:31:56
             如何升级/编译Linux内核             
                                      
如何编译Linux内核
具体如下:太多了,打了主要的部分。有些地方没有说明,看命令就明白了。
1、下载内核文件如:linux-2.4.18-3.tar.gz拷贝到/usr/src目录并解压缩。
# cd /usr/src
# tar zvxf linux-2.4.18-3.tar.gz
2、进入解压目录。(/usr/src/linux-2.4.18-3,视文件名而定)
# cd /usr/src/linux-2.4.18-3
# make mrproper
# make xconfig
3、进行选译,自己设定个性化的内核。完后点“save and exit”
4、进行编译。
# make dep
# make clean
# make bzImage (I要大写哟)
5、编译模块。
# make modules
# make modules_install
# depmod -a
6、编译完成,开始替换文件。
# cd /boot
# rm System.map
# rm vmlinuz
# mv /usr/src/linux-2.4.18-3/System.map System.map
# mv /usr/src/linux-2.4.18-3/arch/i386/boot/bzImage vmlinux
7.修改开机设定。
GRUB是 /boot/grub/grub.conf文件 lilo是/etc/lilo.conf文件
可以用命令
# mkinitrd /boot/initrd-2.4.18-3.img 2.4.18-3来生成initrd文件。
用GRUB来举例子说。(红色部分)
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,7)
# kernel /vmlinuz-version ro root=/dev/hda10
# initrd /initrd-version.img
#boot=/dev/hda
default=1
timeout=5
splashimage=(hd0,7)/grub/splash.xpm.gz
title Red Hat Linux (2.4.18-3)
root (hd0,7)
kernel /vmlinuz-2.4.18-3 ro root=/dev/hda10
initrd /initrd-2.4.18-3.img
title win xp
rootnoverify (hd0,0)
chainloader +1
重启计算机,完工。
附加说明:
内核编译好后在以下几个位置的。
1。bzImage文件 /usr/src/linux-2.4.18-3/arch/i386/boot目录
2。外挂模块 /usr/src/linux-2.4.18-3/arch/i386/lib目录
3。已安装的模块文件 /lib/modules/2.4.18-3目录

【2005-8-10 14:57:00】
______________________________________________________________________________

  准备工作:
  内核(Kernel)即是Linux系统的最重要部分。它负责为软件提供硬件设备的抽象、处理进程资源的分配、管理内存和文件系统、及网络等.因此要想读写NTFS文件系统,就必需将核心编译为包含NTFS模块,要想拨号上网就必需使核心支持PPP协议……,有了核心的强大功能才能使pppd,ftp,bash等程序得以有效的运行和开发。Linux的源代码是公开的,因此内核可定制编译以适应不同的需要。(注意:编译内核并不是重新安装系统)
  
  要想编译内核需先获得其源代码。源代码可从安装盘安装,亦可下载解压/usr/src/linuxxxxxx目录中。(linuxxxxxxx目录名可自定)  
 
  配置内核:(以Red Hat9.0为例)
  
  首先make mrproper进行清理工作,其次必需配置要把什么编入内核。执行make menuconfig进入配置程序。进入其中的分类后可见<>[]形式的条目移动光标按空格可选择''''*''''M''''空''''.*表示编入内核。M表示编译为模块(即内核中并不含该部分有需要时自动载入,一定时间不用时自动卸载,以增强kernel的灵活性节省系统资源,减小kernel体积).。空''''表示不编入,即新内核不支持该功能.配置完毕保存。
 
  注意:由于内核配置繁琐,有时只是想改变有限的条目,而对其它的配置一窍不通。这样可使用默认配置并稍加修改。未经修改的/usr/src/linuxxxxx/.config及/usr/src/linuxxx/configs下的文件都是默认配置。可在make mrproper后cp /usr/src/linuxxx/configs/所选文件 usr/src/linuxxxx/.config(如直接使用.config自然就不用cp了)再make menuconfig 略加修改.配置完毕保存!还有其他类似menuconfig的工具如:xconfig(需在XWindows中运行) 等。
  
  配置完成后make dep;make clean进行联接清除。
  编译内核: 执行make bzImage;
  make modules;
  make modules_install;
 编译成功!/usr/src/linxxxxxxx/arch/i386/boot/bzImage即为编好的内核;
  配置LILO;
  配置后即可引导内核;
  将bzImage拷贝至/或/boot下(可更名);
  编辑/etc/lilo.conf(编辑前内容类似下面)
  prompt
  timeout=50
  default=WindowsXP
  boot=/dev/hda
  map=/boot/map
  install=/boot/boot.b
  message=/boot/message
  lba32
  image=/boot/vmlinuz-2.4.20-8bigmem
  label=Linux
  initrd=/boot/initrd-2.4.20-8bigmem.img
  read-only
  append=”root=LABEL=/”
  other=/dev/hda1
  optional
  label=WindowsXP
  在此文件中加入:
  image=“bzImage”的路径/bzImage
  label=自定(即是启动时的标识)
  read-only
  
  配置后应类似:
  prompt
  timeout=50
  default=WindowsXP
  boot=/dev/hda
  map=/boot/map
  install=/boot/boot.b
  message=/boot/message
  lba32
  image=/boot/vmlinuz-2.4.20-8bigmem
  label=Linux
  initrd=/boot/initrd-2.4.20-8bigmem.img
  read-only
  append=”root=LABEL=/”
  other=/dev/hda1
  optional
  label=WindowsXP
  image=/boot/bzImage
  label=Linuxnew
  read-only
  然后保存,执行lilo命令;
  重起后即可使用新内核了。
  核心不宜过大否则影响速度。执行dmesg命令后有Memory一项可观察kernel大小。
如何编译内核:
如果你不想改变内核的版本,直接到第四步。
第一步:在任何一个子目录下(但通常是在/usr/src/下)untar 解开新的内核源程序:
        tar xvfz linux-x.x.xx.tar.gz (例如linux-2.0.35.tar.gz)
        或者是打补丁(patch):
              gzip -cd patch-2.0.35.gz | patch -p0
              打完补丁直接跳到第四步
 
 
第二步:rm /usr/src/linux
        这通常是一个符号连接。
第三步:在 /usr/src/ 下建立一个符号连接到你的新内核目录。
        ln -s /usr/src/linux.2.x.xx /usr/src/linux
        老版本的内核可能还要做一下工作:
        cd /usr/include
        rm -rf asm linux scsi
        ln -s /usr/src/linux/include/asm-i386 asm
        ln -s /usr/src/linux/include/linux linux
        ln -s /usr/src/linux/include/scsi scsi
第四步:将当前目录变成 /usr/src/linux
        cd /usr/src/linux
第五步:变成超级用户
        su
第六步:配置内核
       make menuconfig
        当使用 "make menuconfig" 时,在左面出现一个 "< >" 的选项能被编译成为一个模块。当选项被选中,按下空格键来循环选择选项是被选中或未选中, ("<*>")表示将被编译成内核映像而("")表示将被编译成模块。
在这里有极其多的内核选项,无法在此一一解释 -- 所以请利用内核内置的帮助功能。基本上每个选项都至少有一些描述,而且每个通常都有一行"如果您不知道这个选项的含义,输入 Y。(或者 N)"。这些提示在您不知道一个特定选项的含义时能帮助您。要使用帮助,选中您有疑问的选项然后按 "?" 键
您可以参考 http://www.douzhe.com/docs/bbsjh/1/12500.html,里面详细讲解了每个选项的意义。更多信息请用Google搜索!
 第七步:生成新内核
         make dep
        make clean
        make zImage (或则用make bzImage进一步压缩内核)
        注意大小写一定要搞对!
        还有make zlilo/make install等可选择。  
第八步:如果你用了模块,你还需要生成和安装模块
        make modules
        make modules-install
        depmod -a
第九步:察看你的 /etc/lilo.conf 看用的是哪个目录的哪个文件作为
        image。例如:image = /boot/vmlinuz (slackware版是/vmlinuz)
    将 /usr/src/linux/System.map 复制到 /boot 目录中,
        将 /usr/src/linux/arch/i386/boot/zImage(或者是bzImage) 复制到 /boot 目录中并改名为 vmlinuz
             我不赞成改名覆盖的办法,推荐的方法是:
        用一个新文件名将新内核拷贝到相应的目录下,如
          cp /usr/src/linux/arch/i386/boot/zImage /boot/zImage2
        然后编辑/etc/lilo.conf文件,把原内核有关的那一段复制一份,如
          image = /boot/vmlinuz
                  root = /dev/hda1
                  label = linux
        复制后把image改成/boot/zImage2 把label改成newlinux.
        这样新内核与旧内核可以共存,当新内核不能启动时,还有备份在那儿呢.
        注意复制后放置的位置,如果没有设置default则谁是第一项谁就是缺省启动项。
第十步:安装新内核并重新起动。
        lilo (不要忘记了这一步哦! 并注意看输出信息)
        shutdown -r now