要编译Linux,首先其实是要获得Linux的内核源码(kernelsourcecode)。最新的Linux官方源码是可以从或其映像站点取得,而最新2.6.x版本通常置于/pub/linux/kernel/v2.6/
将下载的内核源代码放到Linux系统目录文件夹/usr/src/中。
要想顺利完成内核编译,首先要检测或安装必要的工具:
1.安装gcc,make等编译工具:
apt-getinstallbuild-essential
Ø2.安装makemenuconfig时必须的库文件:NCurses(libncurses5-dev或ncurses-devel),这是当makemenuconfig时用作生成菜单窗口的程序库:
apt-getinstalllibncurses-dev
apt-getinstallkernel-package
3.安装Linux系统生成kernel-image的一些配置文件和工具
apt-getinstallfakeroot
apt-getinstallinitramfs-tools,module-init-tools
4.通常在编译Linux内核时,通常还须要以下工具(这种工具通常是可选的):
ØGNUC++Compiler(g++或gcc-c++)-编译makexconfig使用的Qt窗口时须要
ØQt3(qt-devel或qt3-devel)-makexconfig时用作Qt窗口的程序库
ØGTK+(gtk+-devel)-makegconfig时用作GTK+窗口的程序库
ØGlade(libglade2-devel)-要编译makegconfig时的GTK+窗口时须要
在Ubuntu系统中,我们可以使用下边的命令来获得相关的软件包:
apt-getupdate
apt-getinstalllibncurses5-devwgetbzip2
解压内核
tarxzvflinux-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内核源码攻入补丁:
cdlinux-2.6.30
bzcat../patch-2.6.30.bz2|patch-p1
makemenuconfig菜单选项格式的配置界面,如图1所示,在这儿可以通过鼠标来设置各个选项。
makeoldconfig命令只选择新编译选项。通常情况下,当编译Linux内核时linux系统,执行makemenuconfig弹出对话框,可以对内核的编译选项进行新的设定linux内核裁剪与移植,并生成一个.config文件,make的时候就是按照.config的设定值进行编译内核。假如再重新执行makemenuconfig的时候,内核编译选项又重新回到了原先的默认值。这时可以使用makeoldconfig命令。当我们设定了内核编译选项以后,执行makeoldconfig命令就可把上面设定好的内核编译选项储存起來。当上次再执行makemenuconfig命令的时,出现的设定就是前一次的设定内容
注意:假如是在PC机下,没有特殊的要求,初学者编译内核linux内核裁剪与移植,可以先选择“默认”的编译选项,倘若出现问题,可以对照旧的编译配置文件,逐渐查找并解决问题。
接出来编译与安装内核
首先用makemrproper命令消除所有旧的配置和旧的编译目标等文件:
cd/usr/src/linux-2.6.30
makemrproper
接着执行命令make来编译内核,在默认情况下,make是一个次序执行的工具。它按顺序调用底层编译器来编译C/C++源文件。在个别情况下,有的源文件不需以其他源文件为基础即可编译,这时可以使用–j选项调用make来完成并行编译操作。make指令格式如下:
make–jn
n代表同时编译的进程,可以推动编译速率,n由用户计算机的配置与性能决定,当前的典型值为10。make编译内核过程如图所示。
经过前面的编译内核的步骤,会在目录arch/x86/boot目录下生成名为“bzImage”的文件,那就是编译下来的新内核。为便捷管理,须要把它联通至目录/boot中,并更名为"vmlinuz-核心版本"。为保存编译选项便捷日后参考linux学习,同时也要把.config复制至/boot及更名为"config-核心版本"。这种步骤,我们可以通过输入命令makeinstall来完成:
makeinstall
接出来执行命令:
makemodules
进行来编译模块,
最后执行命令
makemodules_install
makemodules_install是将内核模块安装到/lib/modules中
接出来是"安装引导配置"请见“Linux内核剪裁与编译(上篇)--基于2.6.30内核”
本文出自:邱铁、于玉龙、徐子川编绘.LINUX应用与开发典型实例精讲.复旦学院出版社.2010年出版