linux 内核编译

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

 

1.得到最新内核linux

  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文件是针对于特定的版本的,须要找到本身对应的版本才能使用。 vim

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)来清除之前的配置.ui

3.编译内核spa

  输入以下命令,编译生成一个压缩内核:操作系统

  $ make.net

  开始编译内核模块:

  $ 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

相关文章
相关标签/搜索