zoukankan      html  css  js  c++  java
  • linux 内核编译

    为了正确的合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主要有下面四个考虑: 
      ---自己定制编译的内核运行更快(具有更少的代码) 
      ---系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中) 
      ---不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞 
      ---将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些 

    1.获得最新内核

      Linux内核版本发布的官方网站是< http://www.kernel.org/>,国内各大ftp上一般都可以找到某些版本的内核。新版本的内核的发布有两种形式,一种是完整的内核版本,另外一种是patch文件,即补丁。完整的内核版本比较大,比如linux-2.4.0-test8.tar.bz2就有18M之多。完整内核版本一般是.tar.gz(.tgz)文件或者是.bz2文件,二者分别是使用gzip或者bzip2进行压缩的文件,使用时需要解压缩。patch文件则比较小,一般只有几十K到几百K,极少的会超过1M。但是patch文件是针对于特定的版本的,需要找到自己对应的版本才能使用。 

    2.配置内核

      内核的编译选项的个数非常多, v2.6.38的内核中就有 12 000 个左右的设置选项(这是包含所有arch的配置选项).
      内核编译选项不仅多, 有些编译选项之间还存在依赖关系, 所以手动设置编译选项几乎是不可能的.
      值得庆幸的是, 只要知道自己需要设置的那些选项, 就可以使用 make ***config 来进行设置, 它还会自动处理依赖关系.

    配置方法:

    • make menuconfig :: 源码根目录下生成 .config (没有会自动生成), .config中就是各个内核编译选项的选择状况. 依赖libncurses库
    • make defconfig :: 根据当前系统的架构默认 .config 生成内核源码目录下的 .config (每个架构的配置文件: ex. arch/x86/configs/x86_64_defconfig)
    • make oldconfig :: 将已有的 .config 放到源码根目录下后执行, 目的是为了复用之前的内核编译选项的配置.
    • make xconfig :: 图形化配置, 需要qt3, 个人觉得没有必要, 有 make menuconfig 就足够了.
    • make localmodconfig :: 生成以正在使用的内核模块为对象的 .config

    如果这不是你第一次配置这个内核,那么请先运行:make mrproper(http://www.cnblogs.com/laojie4321/archive/2012/04/11/2442921.html)来清除以前的配置.

    3.编译内核

      输入如下命令,编译生成一个压缩内核:

      $ make

      开始编译内核模块:

      $ make modules

    4. 安装内核及模块

      安装内核, bzImage文件是内核映像文件,是启动内核所必需的,我们应当把它拷贝到/boot目录下。一般内核映像文件的命名方式为它改名为vmlinuz-2.6.12.

      # make install (安装内核二进制映像, 生成并安装boot初始化文件系统映像文件)

      该指令将会在/boot目录下安装如下三个文件:

      System.map-2.6.25

      config-2.6.25

      vmlinuz-2.6.25

      安装模块,对于内核来说,每一个内核版本有自己的模块目录,默认在/lib/modules/内核版本号这个目录下,make modules_install会创建对应的目录,并把对应的模块文件拷贝过去。注意,这一步必须要在编译过内核再做。

      make modules_install (安装内核模块到 /lib/modules 下)
     

    6.创建initrd.img文件

      在终端输入如下代码:

      # cd /boot

      # mkinitrd -o initrd.img-2.6.25 2.6.25

      initrd映像文件包含设备驱动,用来加载操作系统的其余部分。并不是所有的电脑都需要initrd文件,不过创建一个是比较安全的做法。

    7.修改grub配置文件

       grub配置文件的位置在/boot/grub/menu.lst

      使用vim或者vi打开文件:

      # vi /boot/grub/menu.lst

       title Debian GNU/Linux, kernel 2.6.25 Default

      root (hd0,0)

      kernel /boot/vmlinuz root=/dev/hdb1 ro

      initrd /boot/initrd.img-2.6.25

      savedefault

      boot

      记得,需要填写正确的 root=/dev/hdXX 。保存并关闭该文件。如果你觉得全部手工输入有些麻烦,可以尝试输入update-grub命令:

      # update-grub

    参考:

    http://www.360doc.com/content/13/0308/14/11722082_270168965.shtml

    http://blog.chinaunix.net/uid-24782829-id-3211008.html

    http://www.cnblogs.com/wang_yb/p/3899439.html

    http://blog.chinaunix.net/uid-26404477-id-3126818.html

    http://www.oschina.net/question/234345_42957

  • 相关阅读:
    Apache 流框架 Flink,Spark Streaming,Storm对比分析(1)
    Apache 流框架 Flink,Spark Streaming,Storm对比分析(2)
    spark日志配置及问题排查方式。
    Structure Streaming和spark streaming原生API访问HDFS文件数据对比
    fstream,sstream的学习记录
    控制位数和填充0
    激活windows10(已更新工具)
    7-13 统计工龄(排序)
    Insertion or Heap Sort
    Insert or Merge
  • 原文地址:https://www.cnblogs.com/zhangjiankun/p/4855728.html
Copyright © 2011-2022 走看看