ubuntu下编译linux内核

来源:互联网 发布:网页编程html 编辑:程序博客网 时间:2024/05/02 19:00

原文地址:http://hi.baidu.com/lcplj123/item/d47fc1d6000b554efb5768aa

当前电脑状态:

系统:Ubuntu 10.04.4 LTS

kernel信息:2.6.32-38-generic


一、下载kernel源码

网址:http://www.kernel.org/

我下载的文件:linux-2.6.32.61.tar.xz

如何解压这个文件:

首先,xz -d linux-2.6.32.61.tar.xz,会生成linux-2.6.32.61.tar文件

然后,tar xvf linux-2.6.32.61.tar,就成功解压。

解压目录:解压到一般的目录下就可以,没什么特别的。

我解压后的目录:/home/yutao/yutao/linux/linux-2.6.32.61

你现在就可以看这个版本的kernel的源码了,如果你不需要编译,后面的就不用看了。


二、编译kernel


1.make mrproper

进入到/home/yutao/yutao/linux/linux-2.6.32.61目录下,在终端中执行make mrproper

注:如果你是第一次编译,跳过此步。

它的含义是将上一次编译的.o和.config等相关文件删除掉,它是更深层次的清除你上次编译内核的东西


2.配置内核

如果你对如何配置内核比较了解,你可以执行make menuconfig命令

你或许也可以尝试make defconfig命令,它会基于默认的配置为你的体系结构创建一个配置。

推荐使用下面的方法,来利用系统已经存在的内核配置文件:

cp /boot/config-`uname -r` ./.config

以我的为例:cp /boot/config-2.6.32-38-generic ./.config

.config这个文件是隐藏的,Ctrl+H就可以看到它


3.开始编译内核

make bzImage         //编译大内核,编译小内核用make zImage  我用了10mins

make modules         //编译模块 我用了40mins

make install modules_install   //将内核与模块相关的文件复制到系统位置 很快,几分钟吧


4.碰到的问题

        

上面是我编译前后的/boot文件夹下的对比,我存在的问题是,我缺少了一个文件:initrd.img-2.6.32.61,而这是非常重要的一个文件。

解决方法:http://blog.csdn.net/mayouyang/article/details/3997849

首先进入到/lib/modules/,在这个目录下有一个2.6.32.61,应该是之前编译生成的,具体不详

mkinitramfs 2.6.32.61 -o /boot/initrd.img-2.6.32.61

这样,我的问题就解决了。


5.修改开机引导项

仿照已存在的项添加即可:

sudo gedit /boot/grub/grub.cfg
### yutao add begin 20140213
menuentry 'Ubuntu, with Linux 2.6.32.61 yutao' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod ext2
    set root='(hd0,6)'
    search --no-floppy --fs-uuid --set cd48f9e1-634a-4e4c-9ae6-a9851f69a5ef
    linux    /boot/vmlinuz-2.6.32.61 root=UUID=cd48f9e1-634a-4e4c-9ae6-a9851f69a5ef ro   quiet splash
    initrd    /boot/initrd.img-2.6.32.61
}
### yutao add end 20140213


6.reboot

开机后,进入开机引导项后,就可以看到多了一个Ubuntu, with Linux 2.6.32.61 yutao,选择它就ok啦。

进入系统后,查看内核版本号,发现已经不是之前的2.6.32.-38-generic

yutao@yutao:~$ uname -r
2.6.32.61
yutao@yutao:~$

0 0