Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1169236
  • 博文数量: 234
  • 博客积分: 5592
  • 博客等级: 大校
  • 技术积分: 1987
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-23 14:12
文章分类

全部博文(234)

文章存档

2015年(1)

2013年(4)

2012年(16)

2011年(204)

2010年(9)

分类: LINUX

2011-07-10 21:59:29

要编译 Linux,首先当然是要获得 Linux 的内核源码(kernel source code)。最新的 Linux 官方源码是可以从或其映像站点取得,而最新 2.6.x 版本一般放在 /pub/linux/kernel/v2.6/

将下载的内核源代码放在Linux系统目录文件夹/usr/src/中。

要想顺利完成内核编译,首先要检查或安装必要的工具:

1.安装 gcc, make 等编译工具:

apt-get install build-essential

Ø         2.安装 make menuconfig 时必须的库文件:NCurses (libncurses5-dev ncurses-devel) ,这是当make menuconfig 时用作生成菜单窗口的程序库

apt-get install libncurses-dev
apt-get install kernel-package

3安装Linux系统生成 kernel-image 的一些配置文件和工具

apt-get install fakeroot

apt-get install initramfs-tools, module-init-tools

4.一般在编译 Linux 内核时,一般还需要以下工具(这些工具一般是可选的):

Ø         GNU C++ Compiler (g++ gcc-c++) - 编译 make xconfig 使用的 Qt 窗口时需要

Ø         Qt 3 (qt-devel qt3-devel) - make xconfig 时用作 Qt 窗口的程序库

Ø         GTK+ (gtk+-devel) - make gconfig 时用作 GTK+ 窗口的程序库

Ø         Glade (libglade2-devel) - 要编译 make gconfig 时的 GTK+ 窗口时需要

Ubuntu系统中,我们可以使用下面的命令来获得相关的软件包:

apt-get update

apt-get install libncurses5-dev wget bzip2

解压内核

tar xzvf linux-2.6.30.tar.gz

把源码包解压到 /usr/src中,通过运行解压命令后,发现/usr/src中多了一个linux-2.6.30 文件夹

这一步在内核的编译过程中是可选的,如果你对内核有特殊的要求,可以将自己写的补丁打到内核中去。

对于一般PC机上下载的linux-2.6.30内核源码包在PC机上编译是不需要这一步骤的。如果读者有新的要求,可以写补丁包,例如对当前的linux-2.6.30制作的补丁包(文件名为patch-2.6.30.bz2),可以使用patch命令给Linux内核源码打入补丁:

cd linux-2.6.30

bzcat ../patch-2.6.30.bz2 | patch -p1

make menuconfig菜单选项格式的配置界面,如图1所示,在这里可以通过键盘来设置各个选项。


make oldconfig命令只选择新编译选项。一般情况下,当编译Linux内核时,执行make menuconfig弹出对话框,可以对内核的编译选项进行新的设定,并生成一个.config文件,make的时侯就是根据.config的设定值进行编译内核。如果再重新执行make menuconfig的时侯,内核编译选项又重新回到了以前的默认值。这时可以使用make oldconfig命令。当我们设定了内核编译选项之后,执行make oldconfig命令就可把前面设定好的内核编译选项存储起來。当下次再执行make menuconfig命令的时,出现的设定就是前一次的设定内容

注意:如果是在PC机下,没有特殊的要求,初学者编译内核,可以先选择“默认”的编译选项,如果出现问题,可以对照旧的编译配置文件,逐步查找并解决问题。

接下来编译与安装内核

首先用make mrproper命令清除所有旧的配置和旧的编译目标等文件:

cd /usr/src/linux-2.6.30

make mrproper

接着执行命令make来编译内核,在默认情况下,make 是一个顺序执行的工具。它按次序调用底层编译器来编译 C/C++ 源文件。在某些情况下,有的源文件不需以其他源文件为基础即可编译,这时可以使用 –j 选项调用 make 来完成并行编译操作。make指令格式如下:

make –jn

n代表同时编译的进程,可以加快编译速度,n由用户计算机的配置与性能决定,当前的典型值为10make编译内核过程如图所示。


经过上面的编译内核的步骤,会在目录 arch/x86/boot 目录下生成名为“bzImage”的文件,那就是编译出来的新内核。为方便管理,需要把它移动至目录 /boot中,并改名为 "vmlinuz-核心版本"。为保存编译选项方便日后参考,同时也要把.config复制至 /boot 及改名为 "config-核心版本"。这些步骤,我们可以通过输入命令make install来完成:

make install

接下来执行命令:

make modules

进行来编译模块,


最后执行命令

make modules_install

make modules_install 是将内核模块安装到/lib/modules

接下来是"安装引导配置"请见“Linux内核裁剪与编译(下篇)--基于2.6.30内核”

本文出自:邱铁、于玉龙、徐子川编著.LINUX应用与开发典型实例精讲.清华大学出版社.2010年出版

阅读(3383) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~