Linux下编译升级内核

时间:2020-12-30 12:31:44

一、介绍: 什么是linux内核

Linux内核是Linux操作系统的核心,主要包括文件系统模块、内存管理模块、进程管理模块、进程间通信模块和网络接口模块5大模块。

1、文件系统模块:主要负责文件系统的管理,在Linux2.6内核支持ext2、ext3、ext4、gfs、及网络文件系统nfs、cifs等。

2、内存管理模块:主要负责无聊内存和虚拟内存的资源分配。 

3、进程管理模块:主要负责进程的资源分配协调管理。 

4、进程间通信模块:主要负责协调进程之间的资源分配关系和进程资源的竞争分配。 

5、网络接口模块:主要负责对系统进行远程管理。

 

二、为什么要升级内核 ?

        顾名思义,Linux的内核承担着Linux操作系统的最为核心的任务,是其它程序和硬件等运行过程中的仲裁者:它要管理所有进程的内存,保证它们都能平等得到处理器的时隙。此外,它还提供程序和硬件之间的接口等功能。 

通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、更稳定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是Linux使用者的必要操作内容。 

一般,内核的版本序列号使用三个数字表示,如2.2.14,版本号越高表示功能越强。版本号分为两个系列:一种是产品系列,以偶数命名,例如,1.2.x、2.0.x、2.2.x等,运行稳定,已经经过较为周密的测试;另外一种是开发测试系列,以奇数命名,用以进行最新功能的测试,不建议初学者和生产过程中使用。

 

三、升级linux内核前的准备工作

1、查看当前系统内核版本

[root@localhost ~]# uname -a
Linux localhost 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:35 EDT 2010 i686 i686 i386 GNU/Linux

Linux下编译升级内核

 

新版本的内核分两种:

  • 1、一种是full Source版本,完整的内核版本比较大,一般是 tar.gz或者是.bz2文件,
  • 2、一种是patch文件,即补丁, patch文件则比较小,一般只有几十K到几百K,但是patch文件,是针对于特定的版本的,你需要找到自己对应的版本才能使用。

内核升级所需依赖包

在进行内核升级或定制内核时,Linux系统需要事先安装GCC编译工具、ID连接器和make编译器(一般情况下,我都是在装Linux系统的时候把所有的开发工具、系统工具和管理员工具都装上了,以免后期需要单独安装某个包的时候还有其它的各种依赖性安装,这样比较省事......反正如果不在乎那么一点硬盘空间的话,建议就这样搞准没错-.-)

 

 

2、下载Linux2.6内核源码文件

内核源码文件可以去http://www.kernel.org/ 这个网站下载,里面有很多版本的(包括稳定版和开发版)源码文件,我这里下载的是linux-2.6.36.tar.bz2

 

 

3、内核的编译安装

[root@localhost ~]#tar jxvf linux-2.6.36.tar.bz2 -C /usr/src/     //解压到该目录/usr/src/

[root@localhost ~]#cd /usr/src/linux-2.6.36/  #进入目录

[root@localhost linux-2.6.36]#make mrproper     //去除内核的依赖关系以及编译后的垃圾信息

 [root@localhost linux-2.6.36]# make menuconfig   //进入菜单方式界面配置内核

 通过界面可以清楚看到按上下键选择指定菜单,通过回车键可以进入带有箭头→的下一级子目录,通过Y键可将选项编译到内核,按N键将不选择选项,即既不把选项编译到内核也不编译成模块,M键可将选项编译成模块,按两次Esc键可退出到上一级,按?键可查看指定选项的帮助文档,按/键可搜索指定选项的位置以及路径,如下:

Linux下编译升级内核

需要勾选上General Setup下面的 “enable deprecated sysfs features to support old userspace tools”,不然编译安装之后会找不到原来的挂载点。

[root@localhost linux-2.6.36]#make;make modules;make modules_install;make install    //分别是编译内核、编译模块、安装模块、安装内核,注意是在linux-2.6.36/这目录下编译。

修改引导启动管理器的配置文件

[root@localhost linux-2.6.36]#cat /boot/grub/grub.conf 

# 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,0)
#          kernel /vmlinuz-version ro root=/dev/sda3
#          initrd /initrd-version.img
#boot=/dev/sda
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
password --md5 $1$bPWSBsNd$0uoEJVJ3aM/IC3qT4aEbU.
title CentOS (2.6.36)
        root (hd0,0)
        kernel /vmlinuz-2.6.36 ro root=LABEL=/ rhgb quiet
        initrd /initrd-2.6.36.img
title CentOS (2.6.18-194.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-194.el5 ro root=LABEL=/ rhgb quiet
        initrd /initrd-2.6.18-194.el5.img

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ps:其实不需要进行修改,内核升级好之后会自动在grub.conf文件中加入上门红色的配置。重启电脑就可以选择需要启动的内核,如果不需要旧的内核可以在grub.conf配置文件中将旧内核的参数注释掉即可。

 

升级完内核之后,重新进入到系统中运行uname -a命令就可以查看到升级后的Linux内核版本了,如下图所示:

Linux下编译升级内核