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

原文地址:https://www.cnblogs.com/zhangjiankun/p/4855728.html