Linux 2.6.39.1 内核编译总结

闲来无事,又开始学习linux设备驱动程序,以前本来就有一颗内核树,但是是2.6.31的,我下载了最新的2.6.39.1内核,进行了编译,建立了内核树,同时将默认启动的内核改成了最新的内核,通过uname -r命令可以查看,如下图所示:

clip_image001

现在把主要的过程记录如下,

1、首先到www.kernel.org 下载最新版的内核,将内核解压到/usr/src目录下,使用命令tar jvxf linux-2.6.39.1.tar.bz2,如下图所示:

clip_image002

2、切换到linux-2.6.39.1目录中,执行sudo make menuconfig,对内核进行配置:

如果没有menuconfig,执行下面的命令,下载相应的软件包:

sudo apt-get install build-essential kernel-package libncurses5-dev

clip_image003

clip_image004

clip_image005

clip_image006

注意,上图中的Linux-2.6.39.1是附加在2.6.39.1后面的,这样看起来就很难看,所以在文章开始的时候,用uname -r得到的是如下所示的结果:

clip_image001[1]

3、完成内核的配置后,在/usr/src/linux-2.6.39.1目录下执行,sudo make命令进行编译,经过漫长的等待

编译完成。(如果在多核的机器上,可以使用make的多线程选项加快编译); 加速编译过程.

(1) 可以使用 $ make -j<n> . 其中n = 2 * cpu的个数. 对于一般的单CPU系统, 通常用 $ make -j2 . 为编译过程分配2个人物, 这样在进行磁盘I/O时候, CPU就不会空闲了. 一般这个选项可以将速度提高10%左右.

(2) 还可以使用ccache来提高编译速度. Debian/Ubuntu系统中默认没有安装, 首先安装它: $ sudo apt-get install ccache . 然后更改内核根目录的Makefile, 将CC和HOSTCC变量定义前添加ccache:

CC               = $(CROSS_COMPILE)gcc

HOSTCC     = gcc

更改为:

CC               = ccache $(CROSS_COMPILE)gcc

HOSTCC     = ccache gcc

http://hi.baidu.com/study_all_the_life/blog/item/a6bd6b0e863c66ed37d1223a.html

4、安装编译模块:make modules_install (这一步要往根文件系统copy模块文件,如果要区分同一版本的内核的不同修改,应该在编译前配置内核General Setup中的LOCALVERSION 指定不同的名称,这样不同版本就会拷贝模块文件到不同的子目录下)。

5、在当前系统中安装内核:make install (会把内核代码树中生成的内核镜像拷贝到系统/boot路径中,同时生成内核启动所需文件 ,但还没有更新grub引导文件)

6、针对新内核生成initrd.img(什么是initrd.img?),使用命令: mkinitramfs -o /boot/initrd.img.XXX /lib/modules/2.6.16XXX   (-o后面的参数指定生成的文件,后面一个参数是模块安装的目录)。

7、使用命令:sudo update-grub,这个工具会根据/boot目录中镜像的信息自带生成grub.cfg,路径为/boot/grub/grub.cfg,但是,这个工具生成的文件有bug,如下图所示:

clip_image007

默认生成的grub.cfg没有54、行和63行,需要手动添加。

8、重新启动系统,发现成功的将新编译好的内核安装到了现有的系统当中。

clip_image001[2]

posted @ 2011-07-18 16:01  justinzhang  阅读(1023)  评论(0编辑  收藏  举报