如何编译Linux内核

 

  有时候觉得Linux内核版本太低,想升级一下,或者想研究一下,我们就需要以下方法了。顺带说,Linux的开放性在此也体现出来了优越性,呵呵~

  总的来说,根据各大教程总结出来,在你解压的Kernel目录下执行以下步骤就完成了。

# make config
# make bzImage
# make modules
# make modules_install
# mkinitramfs -o yourinitrd.img 2.3.31.6(或mkinitrd yourinitrd.img)
# make install

  以下简单说明一下上述方法:

  一、到http://kernel.org下载最新的kernel(或者你想要的版本,以下以linux-2.6.31.6为例说明,并假设在root权限,否则加sudo)。
  二、拷贝到/usr/src目录下,$ cp ~/linux-2.6.31.6.tar.bz2 /usr/src。(其实在任意目录都可以,只是在这个目录看起来正规一点,呵呵~)
  三、到/usr/src目录下,$ cd /usr/src。解压kernel。$ tar jxf linux-2.6.31.6.tar.bz2。(想了解jxf参数的意思,可以tar –help)。
  四、编译config,最简单的方法就是将已有的config拷贝过来。查看/boot目录,cd到linux-2.6.31.6目录,$ cd linux-2.6.31.6。譬如我的,$ cp /boot/config–2.6.28-16-generic config。然后$make config。当然还有推荐$make menuconfig $make xconfig 可视化比较好,可以很直观,不过这两者都需要安装一些包,看你个人。make config用文字方式列出很多很多参数,你看着选择(后面转载文章详细列出参数)。当然还有两个比较简便的方法。$ make defconfig 就是利用默认的选项,据说Linus的i386机子就是这个配置,哈哈~$ make allyesconfig 就是将所有选项都选yes,这个编译要花的时间就很长很长了,4小时以上,当然得看你机子的配置了。
  五、清楚一些不要的东西,$ make clean。当然如果你是刚下载下来,从来没编译过的,可以忽略此步骤。
  六、$make bzImage。一般大于512K用这个,当然你说一定要用$make zImage我也没辙,不过还是推荐$ make bzImage吧。
  七、$ make modules。编译模块。
  八、$ make modules_install。安装模块。
  九、制作initrd.img文件。SCSI硬盘需要制作,IDE盘好像可以省略,我没试,因为自己的是SCSI。$ mkinitramfs -o initrd-newkernel.img 2.6.31.6。这个是在Ubuntu下的,因为Ubuntu下mkinitrd命令不可以用。至于参数可以自己用help(其实如果你敲错了,它自己就会出来提示,呵呵)
  十、$ make install。将上述的东西安装到/boot下,执行完此命令后,你就可以到/boot目录下看到System.map-2.6.31.6/vmlinuz-2.6.31.6/config-2.6.31.6。你如果看到以上文件,恭喜你,你编译成功了。记得手动把生成的initrd-newkernel.img也栲过来,想重新命名随你。
  十一、接下来就是编写menu了。有的是menu.lst,有的是grub.conf,看你的发行版本来,以Ubuntu为例,添加以下代码到原来的menu之后:

title           Ubuntu new, kernel 2.6.31.6
uuid            050d4e1f-eb58-4b5b-8902-d65999fa6bb3
kernel          /boot/vmlinuz-2.6.31.6 root=UUID=050d4e1f-eb58-4b5b-8902-d65999fa6bb3 ro quiet splash
initrd          /boot/initrd-newkernel.img.img

  上面uuid和root=后面的东西都是依照原来的menu画出来的,你可以参考自己的menu。

  至此,系统编译完成,你可以reboot你的电脑了。$ reboot。重启后,选择你的系统进去,享受你的过程吧。利用$ uname -r查看你的版本

 

参考:http://hi.baidu.com/xtlp/blog/item/ae905bdfa6b8151949540328.html

原文地址:https://www.cnblogs.com/big4panda/p/6417589.html