linux内核补丁安装和编译安装

来源:互联网 发布:印章制作软件下载 编辑:程序博客网 时间:2024/06/10 01:26

一、简介

          内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。

二、详解

1、内核补丁安装

(1) 检查当前内核源码的版本号

[root@rhel5 ~]# cd /usr/src/ [root@rhel5 src]# ls -F kernels/  linux-2.6.26  redhat/ [root@rhel5 src]#cd linux-2.6.26               //进入linux-2.6.26内核目录            [root@rhel5 linux-2.6.26]# make kernelversion  //查看内核版本号2.6.26-279.el6.x86_64[root@rhel5 linux-2.6.26]# head -5 Makefile    //查看Makefile文件,了解内核版本号 VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 26 EXTRAVERSION = -279.el6.x86_64NAME = Rotary Wombat
(2)下载linux-2.6.26内核和补丁

从官方网站http://www.kernel.org 或以下地址下载内核

[root@rhel5 ~]# wget -c  http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.tar.bz2 .[root@rhel5 src]# wget -c  http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.26.8.gz .  
(3)打补丁

将linux-2.6.26内核增加补丁到linux-2.6.26.8版本

[root@rhel5 ~]# tar -jxf linux-2.6.26.tar.bz2 -C /usr/src/[root@rhel5 src]# ls -F kernels/  linux-2.6.26/  patch-2.6.26.8.gz  redhat/ [root@rhel5 src]# gzip -dv patch-2.6.26.8.gzpatch-2.6.26.8.gz:       71.8% -- replaced with patch-2.6.26.8 [root@rhel5 src]# ls -F kernels/  linux-2.6.26/  patch-2.6.26.8  redhat/
[root@rhel5 src]# cd linux-2.6.26/      //进入linux-2.6.26内核源码目录 [root@rhel5 linux-2.6.26]# ls           //显示linux-2.6.26内核源码目录内容 COPYING        MAINTAINERS     arch     fs       kernel  samples   usr CREDITS        Makefile        block    include  lib     scripts   virt Documentation  README          crypto   init     mm      security Kbuild         REPORTING-BUGS  drivers  ipc      net     sound [root@rhel5 linux-2.6.26]# patch -p1 <../patch-2.6.26.8 //安装2.6.26.8内 核补丁 patching file sound/core/pcm.c patching file sound/core/pcm_native.c patching file sound/core/rawmidi.c patching file sound/core/seq/oss/seq_oss_synth.c patching file sound/pci/emu10k1/emu10k1_main.c patching file sound/pci/emu10k1/emumixer.c patching file sound/pci/hda/hda_intel.c patching file sound/pci/hda/patch_analog.c patching file sound/pci/hda/patch_sigmatel.c patching file sound/pci/oxygen/hifier.c patching file sound/pci/oxygen/oxygen.c patching file sound/pci/oxygen/oxygen_mixer.c patching file sound/pci/trident/trident_main.c patching file sound/ppc/awacs.c patching file sound/soc/fsl/fsl_dma.c patching file sound/soc/fsl/fsl_ssi.c patching file virt/kvm/kvm_main.c 

其中patch -p1 ../patch-2.6.26.8补丁命令的"-p"参数说明如下:

"-p0":表示使用完整路径名。

"-p1":表示去除路径前面的斜杠。

"-p2":表示去除路径前面的斜杠和前面的二个目录。

或者直接使用命令:

[root@rhel5 src]#cd linux-2.6.26/[root@rhel5 src]#bzip2 -dc ../patch-2.4.18-rmk5.bz2 | patch -p1
(4)成功应用补丁
查看当前内核源码的版本
[root@rhel5 linux-2.6.26]# head -5 Makefile VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 26 EXTRAVERSION = .8 NAME = Rotary Wombat [root@rhel5 linux-2.6.26]# make kernelversion 2.6.26.8
至此,内核补丁已打好,接下来就是使用makemenuconfig之类的命令来配置内核、编译内核、编译模块、安装模块和安装内核。

2、内核编译并安装

(1)准备工作

#make mrproper

       作用是在每次配置并重新编译内核前需要先执行“make mrproper”命令清理源代码树,包括过去曾经配置的内核配置文件“.config”都将被清除。即进行新的编译工作时将原来老的配置文件给删除到,以免影响新的内核编译。

       即检查有无不正确的.o文件和依赖关系,如果使用刚下载的完整的源程序包即第一次进行编译,那么本步可以省略。而如果你多次使用了这些源程序编译内核,则最好要先运行一下这个命令。

(2)配置内核

配置内核一般分手工配置,载入当前内核配置(载入内核模块和载入当前内核配置config)

一、载入内核模块(推荐)


从linux-2.6.32开始可以使用make localmodconfig自动精简内核, 菜鸟也能轻松精简内核到十几MB。

注意: 该方法会自动去掉一些从开机到当前没用使用的模块(主要是驱动模块), 所以你可以使用一下你的摄像头, 挂载一下iso文件.....以保证需要的模块不会被精简掉, 否则使用新内核时会发现不能挂载iso文件, 不能使用某些外设等等.

终端执行:

#make localmodconfig      //载入当前模块配置内核

然后出现简单的内核参数选择,.可以长按回车键选择默认选项节省时间.

终端执行:

make menuconfig ##检查一下是否有自己需要的模块没有选上,初学者可以忽略这个步骤

二、手工配置内核

配置内核参数的方法一般有四种:
#make config              //基于文本命令行工具,不推荐使用
#make menuconfig     //基于ncurse库编制的图形工具界面
#make xconfig            //基于X11图形工具界面
#make gconfig           //基于gtk+的图形工具界面

第一种:

终端执行:

#make config   //纯文本配置方式,不推荐使用  

第二种:

终端执行:

#make menuconfig   //简单的基于文本选单的配置方式,推荐使用

Make menuconfig.png

       make menuconfig是一种选择简单的配置内核方法,在终端输入make menuconfig,等待几秒后,终端变成图形化的内核配置界面。进行配置时,大部分选项使用其缺省值,只有一小部分需要根据不同的需要选择。

对每一个配置选项,用户有三种选择,它们分别代表的含义如下:

<*>或[*]——将该功能编译进内核

[ ]——不将该功能编译进内核

[M]——将该功能编译成可以在需要时动态插入到内核中的代码

注意:使用make menuconfig 可能需要安装ncurses( sudo apt-get install ncurses-dev)

第三种:

终端执行:

#make xconfig      //基于图形窗口模式的配置界面,Xwindow下推荐使用

Make xconfig.png

注意:如果要用make xconfig,则要先安装libqt3-compat-headers( sudo apt-get install libqt3-compat-headers)

第四种:

终端执行:

#make gconfig      //基于gtk+的图形工具界面
注意:如果要用make gconfig,则要先安装gtk+

内核参数解释:

a、make menuconfig详解

b、Linux内核配置文档!!!(make menuconfig)

c、Linux-3.10-x86_64 内核配置选项简介

三、载入当前配置.config配置内核

终端执行:

#cp /usr/src/kernels/2.6.32.8.el6.x86_64/.config .#make oldconfig  //载入当前内核配置

   make oldconfig会读取当前目录下的.config文件,在.config文件里没有找到的选项则提示用户填写,然后备份.config文件为.config.old,并生成新的.config文件。

       注释:如果系统现在使用的内核为通用内核(系统默认安装的,或者是内核官网下载编译好的包安装的),载入当前配置配置内核后编译出来的依然是没有针对本机器优化的内核,这样安装的内核不如去下载编译好的通用内核更节省时间.但是如果目前使用的内核是针对本机器优化过的内核,载入当前配置配置内核后编译出来的内核也会是针对本机器优化后的内核。

因此:推荐正在使用针对本机器优化过的内核的时候才采取这个方式配置内核!

(3)编译并安装

一、编译内核和模块

#make -jx //多线程编译内核,x为你设置的线程数,一般处理器为多线程,那么双核处理器的支持的线程数为2X2=4

生成内核模块和vmlinuz,initrd.img,Symtem.map文件。

注:#make相当于分别执行#make bzImage 和#make modules,由于是本机替换内核,所以无需分开执行。

      这一步所需的时间较长,为了加快编译速度,我们可以加上“-j”选项,后面跟的数字是jobsnum ,建议设置为 CPU 核心数 + 1jobsnum值可以由命令“ cat /proc/cpuinfo |sed -n '/^processor/p' |wc -l”获得。

补充:(以下等价于#make -jx)

#make -jx //多线程编译内核模块,x为你设置的线程数
#make modules -jx //多线程编译内核模块,x为你设置的线程数#make headers -jx //多线程编译内核头文件,x为你设置的线程数

二、安装模块
#make headers_install  //安装内核头文件#make modules_install  //安装内核模块
      编译成功后,系统会在/lib/modules目录下生成一个2.6.32子目录里面存放着新内核的所有可加载模块编译好的modules),modules_install即将该目录拷贝到/lib/modules下。

三、安装内核

#make install          //安装内核
     即复制.config,vmlinuz,initrd.img,System.map文件到/boot目录

具体操作如下:

a、将生成的linux-2.6.32/.config 拷贝到要替换内核系统的/boot下,并重命名为config-2.6.32。

b、将生成的linux-2.6.32/arch/x86-64/boot/bzImage 拷贝到要替换内核系统的/boot下,并重命名为vmlinuz-2.6.32(注:这里需特别注意拷贝后的文件名变为vmlinuz-x.x.x)。

c、将生成的linux-2.6.32/System.map 拷贝到要替换内核系统的/boot下,并重命名为System.map-2.6.32。

d、将make modules_install生成的系统目录/lib/modules/linux-2.6.32 拷贝到要替换内核系统的/lib/modules下,在要替换新内核的系统的/lib/modules目录下执行以下命令#update-initramfs-c -k2.6.32,生成/boot/initrd.img-2.6.32

e、Ubuntu或Debian系统会#update-grub(或#update-grub2), 更新启动加载文件。对于RedHat系统有三个配置文件/etc/grub.conf;/boot/grub/menu.lst;/boot/grub/grub.conf前两个配置文件是第三个的软连接,三个grub文件自动会更新,默认启动新内核,因此我们可以不用自行更新grub信息了。reboot后就可以得到一个正常的内核。

(4)卸载内核

查看已经安装的内核 ,命令:#rpm -q kernel

查看CentOS已安装的内核

如果需要卸载指定的内核,请终端执行:#rpm -e kernel-2.6.18-128.e15

注:LINUX内核的版本文件名看起来很难区分,千万不要搞错版本

编译参考链接:

a、配置并编译内核[更新到linux-2.6.34

b、Ubuntu中文论坛:ubuntu环境下编译内核详解

c、Linux公社:make menuconfig详解

d、linux编译内核详解(英文)

三、总结

(1)要充分理解.config,vmlinuz,initrd.img,System.map四个文件的作用。

(2)因篇幅有限,还有很多编译内核的参数、内核文件的作用等内容没涉及到,读者可查询相关内容。

(3)还会积累新的知识点,也望能相互沟通联系:aoyang888@qq.com。


0 0
原创粉丝点击