很久之前就想写篇关于编译Linux内核的文章了,一直拖到了现在。好吧废话少说,下面进入主题。
一、准备工作
1,编译Linux内核首先得有内核代码吧。去这里下最新稳定版源代码吧。我这里使用的版本是2.6.37.2
2,gcc编译工具,如果没有装请先去这里吧。
二、配置
拿到内核源代码后一般解压到 “/usr/src/”目录下,以我使用的linux-2.6.37.2.tar.bz2为例:
tar vxjf linux-2.6.37.2.tar.bz2
su
mv linux-2.6.37.2 /usr/src/
我这里没有打任何内核补丁,直接进入内核目录开始进行配置工作:
cd /usr/src/linux-2.6.37.2
下面就进入正式的编译阶段了,一般第一步是清理源代码(我们是从官方下载的代码,应该是干净的),这样做的目的主要是清楚之前的配置和一些之前编译生成的文件等等。这里有3个命令可以使用:
make clean 清除大部分的生成文件,但是保留配置文件
make mrproper 清除全部的生成文件和配置文件
make distclean 清除全部的生成文件、配置文件、编辑器备份文件和路径文件。是清除最彻底的一个,推荐使用。
make distclean
清理完内核代码以后,开始配置工作。配置命令可用的一般是下面
make config 基于文本交互模式,即会一项一项的问你这个选择什么...当然我们不推荐使用这个命令。
make menuconfig 基于文本的菜单模式,这里会显示菜单进行你选择配置如下图:
这里每个选项前面有个[]使用空格键可以在[],[*],[M]之间进行选择,这里说明一下区别,如一项选择[]则有关功能将不会被编译,选择[*]则相关功能会被编译为.o文件之后被编译进内核bImage,如被选择[M]则只会被编译为.o文件,不会被编译进内核,这些就是内核模块,可以手动加载。推荐使用
make oldconfig 这个命令使用已有的配置文件,但是会询问新增的配置选项。
make xconfig 图形化的配置,但是需要安装qt。推荐使用
我们常用的就是make menuconfig 以及make xconfig。这里我们使用make menuconfig,由于我这里是编译本机使用的内核,所以我只须把现存内核(2.6.34)中的配置文件(/boot/config-2.6.34-desktop)拷贝过来就行了。一般情况下我们是不需要每项都手动配置的,因为里面一般都有内核默认的选项。
cp /boot/config-2.6.34-desktop /usr/src/linux-2.6.37.2/.config
make menuconfig
配置菜单打开后如果没有需要改动的就直接选择Exit,这样我们的内核就配置好了。下面就开始编译了。
三、编译内核
一切就绪下面我们就下命令开始编译内核吧:
make bzImage
这里大约需要10分钟,耐心等待吧。
内核编译完成后,下面就要编译内核模块了:
make modules
这个时间比较长,你可以去冲咖啡看电视了...
模块编译完成后我们就要安装了,首先安装内核模块:
make modules_install
这个很快,因为其实就是一个复制的动作。
下面我们安装内核:
make install
到此已经基本完成了。至于修改启动项神马的,SUSE下是安装内核后就直接修改好了(不信可以打开/boot/grub/menu.lst文件看看就行了),至于其它的版本不是很清楚,没有验证过。重新启动后就可以从新内核进入了,不过显卡驱动需要重新安装一下。
在编译内核前打内核补丁的方法,以及编译完成后的清理工作请参考这里。