红联Linux门户
Linux帮助

内核编译过程[最新2.6.38-rc4内核][Fedora14][3月24日更新]

发布时间:2011-02-17 16:32:23来源:红联作者:pallana
[i=s] 本帖最后由 pallana 于 2011-3-24 15:29 编辑 [/i]

前几天看到论坛中介绍Ubuntu安装了2.6.37和2.6.38内核的帖子Ubuntu10.04&10.10安装最新kernel 2.6.37&2.6.38,心中也被激动起来了,于是开始进行内核的编译。我的系统是Fedora14,没法直接使用Ubuntu的方法来编译,所以我必须要找一个通用的方法,经过搜索,探索,还有很多次的尝试,我终于编译成功了。
因为我网路上搜索到的都是基于比较早的内核版本的安装方法,而我在编译最新内核的实践过程中发现和他们的方法有所不同,所以我必须要写一个步骤出来,以方便第一次编译的各位。
介绍一下我的成果:2.6.26.2是我第一个编译成功的内核,然后是2.6.37,今天把2.6.38-rc4也编译完成,而且现在我就用2.6.38-rc4内核[code]localhost ~$ uname -a
Linux localhost 2.6.38-rc4 #2 SMP Thu Feb 17 00:59:51 CST 2011 i686 i686 i386 GNU/Linux[/code]SMP Thu Feb 17 00:59:51 CST 2011显示出我是半夜编译完成的。

提醒一点:
内核编译是一件比较危险的事情,如果你处于初接触Linux,就如我半年前刚接触Linux时的水平,还是尽量少尝试自己编译内核,先熟悉系统使用为好。但是什么样的水平可以编译内核了呢?一个很好的水平测试就是:如果你能看懂我的文章,你觉得我接下来写的每一个部分都能够很好的理解,我所使用的每一个命令你都会使用,那么你就可以自己尝试着编译了,否则,最好不要尝试。

首先着手找资料,上网一搜“内核编译”,搜出来很多文章,以下是我的参考文章:
如何内核编译过程:
http://www.cnblogs.com/huangwei/archive/2010/04/27/1722052.html
http://blog.sina.com.cn/s/blog_5f4a198d0100jpna.html
金步国的内核详解:(2.6.19内核)
http://lamp.linux.gov.cn/Linux/kernel_options.html
ubuntu系统编译内核,提供了内核精简方法和2.6.28内核配置资料下载,推荐:
http://forum.ubuntu.org.cn/viewtopic.php?t=110461
另外这里也有一篇关于内核编译:
http://www.360doc.com/content/10/1024/23/2124912_63719892.shtml

以上这些都是我在网上搜索的资料,关于内核的编译基本方法和原理以及基础的介绍,请大家看上面的文章,我这里只介绍我自己编译内核的过程以及出现的一些问题和解决方法。
以下以我刚刚编译成功的2.6.38-rc4为例来说,2.6.26.2和2.6.37都是相同的方法。
1.准备工作
首先是编译环境的搭建,这个我没有什么好的建议。在Fedora下是使用一个命令搞定的。[code]sudo yum install gcc gcc-c++ *aclocal [/code]其他的版本只有各位自行搜索相关方法。
如果你安装了显卡驱动,还需要到官方网站上下载最新的驱动,放在一个方便的位置备用,如:~/ 目录下。注意不要放在中文路径下,因为我们需要在文本模式下安装驱动,文本模式对中文支持不是很好。若没有安装显卡驱动,就不需要这步。
下载你想要编译的内核,然后解压。打开终端,进入内核解压后的目录,如[code]@localhost linux-2.6.38-rc4$ [/code]编译目录所在的分区剩余空间不能太小,不要看下载的文件只有70M左右,我的2.6.38-rc4在编译完成后整个文件夹达到3.5G,所以保证5G的剩余空间是必须的。我就在想,这么多东西从哪里来的呢?Linux真的不可思意啊。
在这里不建议把源码解压到/usr/src目录,解压到用户目录里比较好。如我的~/download/linux-2.6.38-rc4目录,因为在/usr/src目录会给当前系统造成一些不稳定因素。
2.复制原先内核的配置文件
因为内核的配置选项很多,我们第一次配置的时侯不知道需要什么,最好有一个模板。Linux系统给我们保存了一个你当前使用内核的配置,如果你当前的系统一切正常,硬件也工作正常,那么这个内核的配置就是正确的,我们可以直接使用。这个内核配置文件在/boot/目录中,如我的当前内核是2.6.35.11-83.fc14.i686 ,那么配置文件就是config-2.6.35.11-83.fc14.i686,这是我使用源升级内核的最新的版本。我们把这个文件复制到源码根目录中,并重新命名为.config。[code]localhost linux-2.6.38-rc4$ cp /boot/config-2.6.35.11-83.fc14.i686 ./.config[/code]3.配置内核
执行命令:[code]make menuconfig[/code]如果提示缺少什么,则安装缺少的插件。
如我第一次执行的时侯提示如下[code]*** Unable to find the ncurses libraries or the
*** required header files.
*** 'make menuconfig' requires the ncurses libraries.
***
*** Install ncurses (ncurses-devel) and try again.
***
make[1]: *** [scripts/kconfig/dochecklxdialog] 错误 1
make: *** [menuconfig] 错误 2[/code]缺少ncurses-devel,源里面安装就可以了。[code]sudo yum install ncurses-devel[/code]如果你的系统还缺少其他的东西,根据提示安装即可。当一切正常后,则进入下面的界面

[attach]33728[/attach]

这就是文本的图形配置界面,如果需要配置可以根据上面我给的网址下载刘少侠的2.6.28中文手册或者金步国的资料来看,这里我们直接按向下键到最后,
如下图:

[attach]33729[/attach]

选择Load an Alternate Configuration File ,按Enter键后如下图:


[attach]33730[/attach]
这就是我为什么上面复制配置文件的时侯重命名为.config的原因了。直接回车即可调入我们刚刚复制过来的配置文件。
回到上面第一个界面,然后按两次ESC键退出配置,在退出之前会提示你是否保存,如下

[attach]33731[/attach]

自然要保存了,选择 按Enter键即可。好了,我们的内核配置已经完成,接下来就是几个命令的问题了。
4. 执行make命令开始进行编译
如果是第一次编译内核,直接make就可以了,如果编译过一次,那么就首先make clean 清除上次编译文件,再来make。
若是修改了配置,增加了几个模块,可以不用make clean,直接make ,make命令会自动的只编译新变更的部分,可以节约很多时间。
这一步上面的文章都提示还有其他的命令,但是我在实践的时侯只用make就可以了,也许是内核版本差别吧。

漫长的等待。。。。。等待的时间取决于你的机器。

在这等待的过程中介绍一个小知识:
make命令有一个选项,-j,可以把任务分成多份,分配在不同的处理器上,加速编译过程。如果你是双核处理器,则使用make -j4 ,对于四核处理器,使用make -j8 ,数字只要是处理器核心数目的两倍就好。但是注意不要使用 make -j ,后面没有任何数字,如果这样,那么make会为内核源码中每个子文件夹创建一个新线程,非常轻易的就能让你的计算机停止响应,然后你会花费更多的时间来完成编译,切记切记。
make命令不要用root用户来执行,而且也不需要root权限,否则会导致一些文件权限的问题。在整个过程中,只有后面的两条安装指令需要sudo来执行,其他的都不需要的。
5.安装内核模块和内核
执行命令[code]sudo make modules_install [/code]安装模块
执行命令[code]sudo make install[/code]安装内核。
我在第一次执行sudo make install 命令的时侯出现了如下信息:[code]Running DKMS auto installation service for kernel 2.6.38-rc4

vboxhost (4.0.0): Installing module.
.......(bad exit status: 10)
Build failed. Installation skipped.
Failed.[/code]从这里可以看到需要DKMS,若没有,请使用命令[code]sudo yum install dkms [/code]来安装。
另外这个vboxhost(4.0.0)的提示是因为我安装了VirtualBox4.0的缘故,首先也要卸载掉VirtualBox才行,如果你没有安装VirtualBox就不用管了。很多人使用VMare其他虚拟机,若是提示虚拟机有冲突,也需要先解决冲突再安装内核。
这里要注意一点,上面的文章提示采用其他的命令来安装内核,或者是还要执行什么命令,但是实践告诉我,不需要,其他的什么都不需要。只要两条命令就可以安装好。
当你看到[code]Running DKMS auto installation service for kernel 2.6.372.6.38-rc4[/code]的提示信息后面没有其他信息的时侯,内核就安装成功了。
6.享受你的内核
若没有安装显卡驱动,则可以直接重新启动系统,GRUB中选择新内核进入系统,你就可以享受你的新内核了。但是如果你安装了显卡驱动,请不要直接重启,而要进行下面一步:
7.解决显卡驱动
修改启动模式:[code]sudo vi /etc/inittab[/code]找到最后一行修改[code]id:5:initdefault:[/code]为[code]id:3:initdefault:[/code]保存后重启机器,选择新内核进入。如果你能够顺利的看到[code]Login:[/code]这个提示,那么恭喜你,你的新内核安装成功了,如果不行,重新启动机 器,选择旧内核进入,再次修改上面的/etc/inittab文件,修改为模式5,利用旧内核的图形界面进入系统,重新进行编译安装。直到成功进入新内核。
当你用文本模式进入新内核后,首先安装安装显卡驱动,安装完显卡驱动,再把上面的3改为5,重新启动机器,利用新内核进入图形界面的新系统。如果旧内核安装了显卡驱动而新内核不安装的话,是没办法用新内核进入图形界面的,所以前面我们需要预先下载显卡驱动。Fedora下升级内核后如何安装Nvidia显卡驱动请看我的另一篇帖子 Fedora升级内核后Nvidia显卡驱动问题解决
当你能够进入图形界面的新内核后,就表示你已经成功了。
8,修改默认启动内核
当我们测试新内核完全可以使用后,就可以修改GRUB,把新内核作为默认的启动内核了,修改方法:
sudo vi /boot/grub/grub.conf
把default=1修改为default=0,
我们安装新内核后,make命令会自动的修改GRUB,把启动选项加进来,而且默认的内核还是你以前的旧内核,再次赞美一下Linux。实际上我的这里是default=2,因为我编译过两个版本的内核。
完成了上面的步骤,你可以享受你的新内核了。

总结下来,执行的命令就是[code]make menuconfig
make
sudo make modules_install
sudo make install[/code]不需要执行其他的命令,这是我的内核编译过程。注意这些指令都是用普通用户身份执行的,请不要尝试root用户执行这些指令。

题后话:知识来自于实践,无论做什么,实践就是最好的老师。我从接触Linux以来一直在不停的尝试,折腾系统,然后我发现在不知不觉中很多概念或者所谓的知识,对于我来说不再是什么难题了。昨天晚上对照着刘少侠的2.6.28中文手册从头到尾看了一遍,然后配置出来一个安装后没法正常工作的内核。后来使用旧内核的配置文件才完全编译成功。但是看后我发觉对于内核的配置有了进一步的认识。今天上午看到我以前买的一本书《Linux 内核技术手册》Greg Kroab-Hartman编著,马骏 李莘 许斯桥 译 ,中国电力出版社出版,2010年6月刚出版,例子是2.6.30内核。我才发觉这本书就是讲内核编译的,而我几个月前买来的时侯根本看不懂,现在来看一目了然,因为我实践过了。推荐想进行内核编译或者是需要涉及内核的同志买这本书。如果我再次编译内核的话,就是跟我的计算机硬件完全匹配的内核了,不要任何一个多余的驱动。
在我进行内核编译的过程中,笔记软件帮了我很大的忙,我把每一步的操作后的提示信息都复制到笔记软件中记录下来,然后进行总结,我能写出这篇,笔记软件功不可没。推荐使用笔记软件进行学习,点这里查看我给出的有关笔记软件的建议。在本文开头给出的参考网页上的内容,被全部保存到我的笔记中了,这个也是我搜集资料的一个方法。资料搜集归类,是学习的好方法。
希望对于阅读的人有所帮助。

2011年02月18日 星期五 09时38分20秒
今天我编译的时侯使用了make -j4 ,然后就发现双CPU负载是100%,但是我还可以上网,开shutter截图,修改这篇文章,没有任何卡机的表现。真相如下图
[attach]33732[/attach]
请各位在用多核处理器的时侯不要浪费了资源

2011年03月24日 星期四 15时23分06秒
今天我再次看刘少侠的内核配置翻译手册,才发现手册开头就说可以用 H 键打开帮助文件的。而我直到现在才发现这个提示的作用。
make menuconfig时,对于每个配置,都是按下 H 键,然后就会看到系统自带的帮助文件,对于这个选项的说明。
当然是英文的,不过可以使用星际译王来划词翻译,看的时候也不是很难理解。
文章评论

共有 27 条评论

  1. yt20090291 于 2012-07-08 17:43:39发表:

    ding

  2. hailiang0208 于 2011-11-21 15:09:53发表:

    真不错哈~

  3. smallQ_nj 于 2011-04-28 11:38:16发表:

    正准备自己编译呢,感谢感谢~~

  4. pallana 于 2011-04-24 17:38:18发表:

    24# cikee


    内核的配置,可以写一本书了。
    如果需要,可以去下载电子书或者买书籍来看,我文章里也推荐了几本的。

  5. cikee 于 2011-04-24 16:04:04发表:

    内核的配置哪里好像略过了呢

  6. zhuxiufenghust 于 2011-04-22 17:30:37发表:

    牛人,顶一下

  7. ruanguowei 于 2011-04-21 17:04:19发表:

    写得真好。

  8. chingsos 于 2011-04-19 14:09:54发表:

    相当仔细啊

  9. yiyelin 于 2011-04-08 14:31:04发表:

    还剩几个了?????????

  10. hml1006 于 2011-04-08 10:12:19发表:

    试一下

  11. hml1006 于 2011-04-08 10:11:46发表:

    今天我也试一下

  12. zeur913 于 2011-03-23 14:32:40发表:

    真正有用的东西都让楼主一句话给注解掉了,无语啊。不过还是留了个链接,多谢楼主分享啊。

  13. mm8989 于 2011-03-04 09:51:47发表:

    收藏了!!!

  14. mm8989 于 2011-03-04 09:51:39发表:

    很好,很强大!!

  15. huigecool 于 2011-03-02 22:45:58发表:

    这,激发了我的兴趣

  16. lostangel 于 2011-03-02 21:24:19发表:

    谢谢分享

  17. lantian5435 于 2011-03-02 20:02:42发表:

    写的不错,学习了

  18. dbvasp 于 2011-02-24 14:20:56发表:

    写得不错
    不管是否新手 都可以试试 步骤并不困难
    可以使用闲置的机器来做这个事情
    多做总是有新体验的

  19. 考乌特莫克 于 2011-02-19 22:03:20发表:

    这个真不错!我必须要来支持啦~~~!希望楼主以后能够发更多这样的原创文章!

  20. pallana 于 2011-02-19 17:05:21发表:

    7# 奶茶dsk


    谢谢提醒,我已经把原文中关于headers和devel的部分去掉了

  21. zhoushengkai005 于 2011-02-18 11:20:57发表:

    很强大啊!

  22. 奶茶dsk 于 2011-02-18 10:21:59发表:

    [i=s] 本帖最后由 奶茶dsk 于 2011-2-18 10:56 编辑 [/i]

    编译内核可以不用kernel-headers 和kernel-devel,
    这两个rpm包都可以在src中提取出来

    锟斤拷锟斤拷:
    Kernel-headers includes the C header files that specify the interface between the Linux kernel and userspace libraries and programs. The header files define structures and constants that are needed for building most standard programs and are also needed for rebuilding the glibc package.


    锟斤拷锟斤拷:
    kernel-devel provides kernel headers and makefiles sufficient to build modules against the kernel package.

  23. Growth兆 于 2011-02-18 09:53:51发表:

    感谢pallana的技术分享,本贴已加入到论坛顶置的Linux应用索引贴中

  24. garrey 于 2011-02-17 21:46:31发表:

    写的不错

  25. dwillin 于 2011-02-17 21:07:10发表:

    好贴子

  26. lykginy 于 2011-02-17 19:19:33发表:

    很好 顶了

  27. wangyu 于 2011-02-17 17:48:45发表:

    很全,收藏