红联Linux门户
Linux帮助

专业级别:牛人给出的编译Linux内核的详细过程

发布时间:2009-10-12 22:01:03来源:红联作者:jovewu
1、准备源码
最新的源码可以从kernel.org上获取,如当前最新版本为2.6.31:
$ wget http://oss.ustc.edu.cn/linux-kernel/v2.6/linux-2.6.31.tar.bz2
2、解压源码:
$ tar xvf linux-2.6.31.tar.bz2 -C /usr/src/
TIP:当然,解压缩到/usr/src/中并不是必须的,你可以解压缩到任何位置。
3、检查源码(该步不是必须):
$ cd /usr/src/linux-2.6.31
$ make mrproper
TIP:该步的作用是检查源码是否有.o文件和依赖问题,从全新的源码编译时不需要这一步。配合make clean(主要清除.o文件)使用更好,make mrproper主要清除环境变量及配置文件
4、 编译内核
默认情况下,编译输出的文件是放在源码目录里的,可以通过O=output/dir参数来指定输出文件的位置(字母O,不是数字0)。很多第一次编译内核的人都会碰到一个问题,/usr所在分区的空间不够,此时,这个参数就很有用。
源码提供了很多配置方式,推荐使用menuconfig:
进入/usr/src/linux-2.6.31,已经进入则略过:$ cd /usr/src/linux-2.6.31
创建/build/kernel menuconfig文件夹:$ mkdir -p /home/你的用户名/build/kernel menuconfig
使用menuconfig配置:$ make O=/home/你的用户名/build/kernel menuconfig
对于第一次编译内核的人,不推荐直接从内核默认配置开始,推荐使用发行版自带的配置文件,通常/boot下会有config-2.6.xx的文件。选择Load an Alternate Configuration File,然后输入/boot下那个config文件的名字,载入即可。第一次编译最好还是不要随便修改配置了,如果失败的话,会留下心理阴影的:-)
在配置里随便看看,如果有什么懂的也可以根据自己的需求改改,不明白的地方就不要动了吧。完了之后别忘了save,保存的时候文件名就填.config。
接下来就开始正式编译了。编译时间可能会有些长,为了避免终端意外关闭,可以使用screen,具体用法这里就不谈了。
$ make O=/home/name/build/kernel
为了加快编译的速度,可以使用-j参数,开启多线程。比如双核的cpu可以这样编译
$ make -j4 O=/home/name/build/kernel
一般-jn的n为核数的两倍即可
5、安装内核
$ sudo make O=/home/name/build/kernel modules_install install
6、生成initrd
$ sudo mkinitramfs -o /boot/initrd-img.2.6.31 2.6.31
关于mkinitramfs的其他参数,请参考man mkinitramfs,关于initrd的作用,请自己google搜索。我近期也会写一篇文章剖析一下initrd。
7、 修改引导
使用grub的话,可以直接使用:
$ sudo update-grub
来更新引导文件,当然也可以自己编辑/boot/grub/menu.lst或者/boot/grub/grub.cfg文件。
8、] 重启
重启之后可以通过以下命令确认你当前使用的是不是刚编译的内核:
$ uname -a
文章评论

共有 23 条评论

  1. tyjjk 于 2011-04-11 15:26:06发表:

    还没开始,赚B中

  2. luomingdong09 于 2011-04-11 12:34:00发表:

    很好 很强

  3. subdream 于 2011-04-11 10:13:37发表:

    总体不错,但是还是存在问题,编译过了但是启动不了

  4. 云淡风清 于 2009-10-19 09:20:11发表:

    学习。。。。。

  5. rgwan 于 2009-10-18 07:49:07发表:

    诶,debian官方是编译deb包kernel,redhat(fedora)是rpm报kernel。
    你这样make && make install 怎么行?
    不小心sudo apt-get autoremove就把grub,grub-common删掉了,重启看你怎么进系统?

  6. shenhao0129 于 2009-10-17 15:08:58发表:

    唉!

  7. ipitx 于 2009-10-17 12:44:14发表:

    的确是对新手很有帮助,不过标题是很高调

  8. 寻路行者 于 2009-10-17 09:29:25发表:

    初学者,看起来有点距离。

  9. pananc 于 2009-10-16 17:22:12发表:

    没看懂啊

  10. cheGuevara 于 2009-10-15 22:03:21发表:

    不错!

  11. cfl09 于 2009-10-13 21:32:51发表:

    我进得是新手区嘛?

  12. dgtg 于 2009-10-13 21:19:07发表:

    看不懂,新来的、、、、学习学习!!!

  13. Th-17 于 2009-10-13 20:29:16发表:

    专业个鸟!
    任何负责任的Linux发行版,官方文档都会有这样的指南。
    好弱智的标题。

  14. hgqcs 于 2009-10-13 17:24:14发表:

    高手之类

  15. Bruce.Ko 于 2009-10-13 17:00:26发表:

    太牛了,佩服!

  16. 咦~ 于 2009-10-13 13:34:40发表:

    学习了~~

  17. 思考者 于 2009-10-13 13:02:42发表:

    就是要动手才知道啊~~

  18. you778589 于 2009-10-13 11:10:24发表:

    扭人就是不一样啊

  19. 358471392pp 于 2009-10-13 11:09:39发表:

    需要亲自玩玩啊

  20. oplesd 于 2009-10-13 00:07:44发表:

    果然是牛人

  21. 414716676 于 2009-10-12 23:32:16发表:

    非常不错的文章!!!!!!!!

  22. 大宝 于 2009-10-12 22:52:43发表:

    我是调用Ubuntu的配置,然后自己调整一下,目的就是为了解决1394和摇杆的问题
    后来突然发现,解决1394有更简单的方法,就没再弄内核了,累~
    至于摇杆,反正目前还没想着模拟飞行,暂时放着吧~

  23. rgwan 于 2009-10-12 22:25:05发表:

    什么牛人?要用make-kpkg,要不然在ubuntu系统不小心执行了个autoremove命令就不小心把你原来的内核和grub全部D掉了