编译内核的目的在于把纷繁复杂的内核源码编译成一个可执行的镜像文件。当然,内核功能复杂,并不是所有的 功能都需要用到,所以,我们在使用make对其编译前,要做一件事——配置。kconfig和make就好比将军和士兵。kconfig是指导方向的,make是干活的。kconfig对内核进行配置,告诉make,哪些功能需要编译进内核,哪些功能要作为模块编译,make便根据配置文件来进行编译。

###编译步骤

  • 获取内核源码(这几天kernel.org被黑了,该步骤方法暂时用不了):

1、使用git工具:

ubuntu下安装git:

sudo apt-get install git

使用git检出Linus分支的版本:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.t.git

检出之后便可以通过下列命令进行升级:

git pull

使用上述两个命令便可以获得内核源码的最新版本。

2、直接从kernel.org上下载源码包:

源码包有两种格式:

linux-x.y.z.tar.bz2和linux-x.y.z.tar.gz

bz2结尾的压缩包使用的是bzip2压缩格式,而gz结尾的压缩包使用的是gzip压缩格式。你可以任选一种,只是解压所用的命令不同罢了。一般来说,使用的是bz2格式,因为它具有较好的压缩效率。解压命令对应如下:

bz2:

tar xjvf linux-x.y.z.tar.bz2

gz:

tar xzvf linux-x.y.z.tar.gz

  • 配置内核

配置内核的工具有下面几种:

  • make menuconfig : 终端图形界面,依赖于ncurses库
  • make config : 纯文本界面
  • make xconfig : X-window界面
  • make gconfig : 和xconfig类似,不过依赖于GTK库
  • make allyesconfig :编译内核尽可能多的功能
  • make allmodconfig :尽可能多地编译成内核模块配置的结果是产生.config文件
  • make oldconfig :如果你有.config文件,你就可以使用。和make config类似,但只询问新特性的配置
  • make defconfg :按照默认的配置文件arch/i386/defconfig进行配置。可再使用make menuconfig进行配置

我一般使用的是make menuconfig,因为它是比较折中的方案。使用make menuconfig前要安装ncurses库:

sudo apt-get install libncurses5-dev

安装完成后在源码目录下执行命令:

make menuconfig

根据需要,进行适当的配置后,便可进行编译操作了。

  • 编译

生成.config命令后在源码目录下执行:

make bzimage -j8

完成后会在arch/i386/boot/下生成bzimage压缩镜像。

  • 安装

make module_install:将编译生成的内核模块复制到/lib/modules/<kernel-version>目录中去。

make install:复制内核镜像到/boot目录中并重命名为vmlinuz-x.y.z;生成initrd-<kernel-version>.img;配置引导文件。