大部分发行版安装就自带1个linux内核, 是不需要用户自己编译的.

那么编译1个内核到底有什么好处呢, 其实好处无非有两点:
         1. 精简内核
         通用发行版的内核特点就是兼容性好, 这里的兼容性是只硬件兼容性啦, 也就是说通用的内核集成了很多种硬件的驱动和功能,而其实绝大部分的硬件驱动和部分功能(如raid支持,偏门的文件系统格式支持)是一般家用机用不上的。
         而自己编译内核能在选项里去除这些多余的选项, 只挑选当前机器适用的硬件驱动, 往往能得到1个更精简的内核,理论上是比1个臃肿的内核更加稳定和快速的。
         再讲,对于任何软件来讲。理论上用当前机器自己编译出来的会比用其他环境机器编译出来的性能要高一点点。

2.添加新硬件支持
         往往一些旧版本通用的内核对一些新硬件支持不足, 例如ubuntu 10.10就没有很多无限网卡的驱动, 这时可以下载1个新内核的源代码, 把该无线网卡的驱动选项选上,编译出来的新内核就支持这个新的无线网卡了。

下面就详细介绍下两大发行版的编译内核步骤。


一, 准备内核编译工具。

         包括gcc make 和 执行make menuconfig 所需的工具。         
         Ubuntu:
                  sudo  apt-get install build-essential kernel-package   libncurses5-dev

Fedora:
                 
sudo yum install ncurses-devel -y gcc* gcc-c++ *aclocal


二, 下载内核源代码
        
所有版本的内核源代码都能在官方网站https://www.kernel.org/pub/linux/kernel/v3.x/ 里下载得到。
         个人不建议下载最新版本的内核, 而是下载你当前发行版源里的最新内核, 例如我当前用的是mint 13 Maya(基于ubuntu 12.04) , 源里的内核是3.2.38 , 而我一开始就下载 3.8.2 版本内核源码来编译。 结果编译不出version.h 文件导致后来的闭源显卡驱动安装失败.

后来选择3.2.38的源代码,编译安装就很顺利了。

下载源代码包后,在任意1个目录上解压, 注意虽然源代码很小, 但是解压后足足500多MB, 编译时生成的链接文件后高达800多MB, 注意硬盘空间就ok。

我一般放在~/Compile/kernel/ 下解压。
 
          例如我下载的源代码包是: linux-3.8.1.tar.bz2
          
          解压出来的是1个文件夹 ~/Compile/kernel/linux-3.8.1/
    
          至于具体的解压命令我就不写出来了, 如果你不会解压tar包的话我想你也没必要去编译内核的。

三, 卸载显卡驱动。
         
一般来讲, 每次更新内核后显卡驱动都要重装,否则不能进入新内核的图形界面, 通常新手编译内核很少会一次就编译出满意的新内核,所以我建议编译内核之前先把显卡驱动卸载了,方便重启测试新内核。

如果你当前使用intel 集成显卡, 则不需要执行之个动作,因为intel显卡的开源驱动已经很好地集成在通用发行版上面了。无须卸载而且你也无法卸载。

如果你使用ATI/AMD 显卡, 则进入/usr/share/ati 目录执行卸载脚本。
          sudo sh /usr/share/ati/amd-uninstall.sh

我自mx200后未用过N卡, N卡的卸载方法请自行google~

四,清理编译环境的垃圾。
          
所谓垃圾就是上一次编译产生的中间文件, 我说过几次了,一般新手总要编译几次内核的。如果你是第一次解压源代码包编译,就不需要执行这一步, 首先进入解压出来的源代码目录,然后执行下面命令
          
         Ubuntu:
                  make-kpkg clean

Fedora:
                  make mrproper

五,编辑编译选项
          注意如果你真的是有心去优化自己的内核的话,这个是1个很费时间的过程。
          在内核源代码目录上执行:
          make menuconfig

里面有很多选项, 具体信息可以参考我的另一些blog文章:
          http://nvd11.blog.163.com/blog/static/20001831220127259426804/

有几个容易出错的地方,请参考这里:
          http://nvd11.blog.163.com/blog/static/20001831220132109939100/

无非注意几个原则:

1. 首先你要明白你的显卡,声卡,cpu, 网卡(有线or无线) 的型号信息, 起码要知道芯片的型号。 因为这些驱动都必须在内核配置里手动制定的。 具体信息可以用 lspci 或者 lsusb 或者 dmesg 命令来查看。

2. 选上必要的选项和驱动, 什么是必要的选项, 例如你当前用的文件系统格式支持, 如果你用无线网卡就要启动wireless支持等。  驱动就更不用说了, 如果你用的是创新的核心显卡, 就必须选上创新的声卡驱动, 但是独显驱动不用执着, 那是在编译内核后另外安装的。

3. 移除一切多余的选项和驱动, 例如raid支持, 这年代家用电脑投资raid的效果远不如投资在ssd固态硬盘上。 又比如 非x86平台支持这个选项, 只会令你的内核无谓的增大。  驱动就更加了, 内核选项里可能有100个品牌的网卡驱动, 而实际上你只需要选中你当前使用的那1个, 其余99个就移除掉吧。

六,保存配置文件。
             
       当你编辑完所有选项时记得,在主界面选最后1个选项保存你的配置, 输入1个文件名就ok了,  例如我一般保存为 kc.config.
       这样当你第二次编译时, 先make menuconfig 进入配置, 然后选倒数第二项导入之前保存的配置文件, 就可以方便地修改了,建议每一次修改都保存1个不同的文件名。
       保存完就可以退出了。 配置文件会保存到当前源代码目录下。

七,激活配置文件
      
实际上,编译的时候,系统是会检索".config" 最这个文件作为配置文件的, 每次执行清理的时候会把这个文件清楚, 所以再编译前要把你保存的配置文件命名为.config

假如我最新保存的配置文件是kc.config 则执行:
       cp kc.config .config

八,指定编译进程数量
      
这一步的作用是充分利用你的多核心cpu, 一般来讲你的cpu有多少个核心(双核4线程可以当作4核心)就设几个编译线程数量。
       Fedora不需执行这个动作, 在编译命令时加1个参数就ok了, 后面会提到。

       Ubuntu:

  export CONCURRENCY_LEVEL=5

个人建议做成1个profile, 每次重启编译内核前执行1次。

九,执行编译。

Ubuntu:
                time fakeroot make-kpkg --initrd --append-to-version=amd336 kernel-image kernel-headers
   
              
#注意红色部分是你自定义的版本号.. 随便起一个,不能有大些

Fedora:
               time make make all -j4
        
              
#红色部分是制定4个线程编译的意思。如国双核cpu就设为2吧

其中time 是顺便计时的命令。
   很多人都说编译内核是1个漫长的过程, 不过根据我的实际数据, 普通的4核cpu(真的很普通的Q6600) 编译一次其实也只需要5分钟多点。
     

十,安装内核
      
Ubuntu:
             
   内核编译完成后,会自动在源代码目录的上一级目录生成两个deb包, 其中1个是内核和模块的包, 另个是头文件的包(安装闭源显卡驱动的前提), 所以需要退到上一级目录。执行:
                sudo dpkg -i linux-imagexxxxx.deb

这个动作会自动帮你更新grub配置, 内核就安装了, 头文件的包无必要现在安装,先测试内核包无问题再安装都未迟。

      Fedora:    
              fedora 编译完后并不生成安装包, 但是实际上内核文件和模块和头文件都编译出来了。只需要在当前源代码目录下执行:
              sudo make modules_install   #这一步是安装模块
             
              sudo make install          #安装内核和头文件

fedor执行安装命令完后系统也会自动帮你更新grub配置。

那么内核和模块被安装在哪里呢? 实际上内核是被安装在/boot 里, 而模块是被放到/lib/modules/<对应版本folder>/ 下
              所以执行ls -lh /boot 能查看你编译出来的新内核, 如下图 我自己编译的新内核足比fedora 18自带的小25%哦:

十一, 重启测试新内核
        
内核安装就可以重启了, 重启后会见到grub菜单多了1个你编译的内核选项,  选上他启动就可以测试了

那么测试什么呢, 最主要测试两大部分:

1. 测试你机器的所有硬件设备是否运作正常, 着重测试声卡,网卡,摄像头.. 当然了,前提是启动成功啊, 很多人由于关键内核选项没选上导致启动失败的。

2.查看开机日志, 看看启动失败的服务。

十二, 怎样卸载你自己编译的内核

当你发现自己编译的内核有问题时, 则只能重启用旧内核启动,卸载你自己编译的内核并重新编译, 那么如何卸载内核呢。

首先你要确保你当前是在旧内核启动的环境下, 可以用uname -r 来检查,否则请重启。
        Ubuntu:
               
ubuntu是用包来安装内核的, 所以只需要用apt-get 命令来卸载自编译内核就ok了。
                忘了新内核的包名字?
                可以用如下命令来查找:
                dpkg --get-selections | grep linux 
                下面命令下载内核
               sudo  apt-get remove linux-imagexxxx  #这个动作会同时帮你把grub里的信息移除
               
              
如果你也安装了头文件的包, 请务必把header的包也卸载。

Fedora:
               
fedora 自编译并不是用包管理器安装的, 所以要手动删除内核和模块,并更新gurb设置,当然个人建议写成1个脚本,用root来执行就ok啦, 脚本参照下面:
                 rm -rf /lib/modules/3.8.1v2/    #删除模块
                 ls /boot/*v2* | xargs rm           #删除内核  注意有3个文件,注意关键字 这一步要小心
                 rm -rf /boot/grub2/grub.cfg    #删除grub配置
                 grub2-mkconfig -o /boot/grub2/grub.cfg   #重新生成grub配置

好了卸载完新内核, 就可以从本文的第步重新开始啦,直到编译出满意的内核为止。

Ubuntu/Fedora 编译内核教程相关推荐

  1. Ubuntu下编译内核

    一.下载源代码和编译软件的准备  下载内核源代码:http://www.kernel.org/  注意,点击2.6.25内核的F版,即完整版.  如果你懒得去网站点联接,运行下列命令: 代码: $cd ...

  2. Debian编译内核教程

    个人拼凑 基本方法 先是获取内核源码 方法1.内核官网下载内核 官网: 在 kernel 的官网上有三种版本,mainline,stable,longterm mainline 是主线版本,最新的,像 ...

  3. linux内核编译最详细,Linux内核编译详细教程,linux内核编译

    Linux内核编译详细教程,linux内核编译 尝试编译下Linux-kernel 4.14.14,使用Ubuntu 16.04 64位 系统. kernel-4.14.14 内核文件约96MB,解压 ...

  4. 【linux系列】内核编译最新教程+常见问题总结

    [linux系列]内核编译最新教程+常见问题总结 编译环境 环境准备 编译准备 修改配置 linux 提供的三种配置命令 使用 gconfig 配置 编译内核 安装内核 载入新内核 检查内核 常见问题 ...

  5. ubuntu环境下编译内核详解(linux kernel compile)

    声明:本文是个人参考网上有关资料,编译2.6.25内核的总结,如按本文步骤编译内核造成的责任和本文作者无关. 本文放在本人的blog上面:http://hi.baidu.com/ffbp89/ 本文还 ...

  6. ubuntu上编译Linux内核步骤

    一.虚拟机的准备 1.下载Ubuntu镜像 Enterprise Open Source and Linux | Ubuntu 在最左边Ubuntu Desktop处点22.04LTS下载iso文件 ...

  7. ubuntu中linux内核的编译、更换与使用

    由于需要在PC机上做一些Linux驱动的实验,来学习<linux设备驱动开发技术及应用>这本书,最近在ubuntu上配置.编译.安装了更老一些的内核.原来ubuntu11.10自带的内核是 ...

  8. 编译linux内核分区,Ubuntu编译内核及grub的一些笔记

    最近心态不稳定,不怎么想发表文章,但看了看之前写了的笔记,想想还是整理出来吧,其实我写文章,也有一部分原因是为了心里的慰藉--当年游戏打不过别人,关注点便转向其它方面.这里整理的是以前编译内核.引导启 ...

  9. linux 2.6 添加系统调用,在Fedora 13里编译内核(linux-2.6.36)+添加系统调用

    在Fedora 13里编译内核(linux-2.6.36)+添加系统调用 首先说明:我系统本来内核是2.6.33版本,我编译的是2.6.36版本 第一步:下载内核源代码.我下载的是linux-2.6. ...

最新文章

  1. 【深度学习笔记】‘module‘ object has no attribute ‘xfeatures2d‘
  2. 正则表达式全部符号详解
  3. Dogleg“狗腿”最优化算法
  4. 《视觉SLAM十四讲》笔记(ch8)
  5. SpringCloud个人笔记-02-Feign初体验
  6. python 的多线程执行速度
  7. MySQL 日期时间类型
  8. vue组件内数值做watch监听,首次监听不到的问题
  9. git卡在Resolving deltas 100%的解决办法
  10. GB28181协议简介及实践
  11. 关于j2sdk的设置
  12. php查看版本命令,如何查看php版本?查看php版本的详细步骤分享
  13. 桌面版whatsapp自动发送实例分析
  14. 学习halcon之颜色识别
  15. 龙贝格积分——matlab实现
  16. wordpress mysql缓存_【新功能】wordpress数据库缓存功能介绍和教程
  17. 1628 Pizza Delivery
  18. Termux使用SSH
  19. kindeditor图片上传配置水印
  20. java 客户端上传_java实现上传文件到服务器和客户端

热门文章

  1. 基于Kubernetes1.20.1版本开发调试环境搭建
  2. 校验数字签名防止apkP二次打包
  3. 【技术分享】如何解锁高通骁龙660上的安卓引导加载程序
  4. c#动态修改代码的crackme
  5. HTML5学习笔记(二)2015-12-7
  6. Composer update 问题: Could not authenticate against github.com
  7. 1.8 finally和return的执行顺序
  8. Python基于socket实现的多任务版TCP服务端
  9. Codeforces Round #744 (Div. 3)【A-D E的题解】
  10. Dubbo服务暴露原理