由于项目需要,今天搞了一天的linux内核编译升级,终于成功了。主要参考资料就是下面这一篇内核编译安装的文档,当然,很多细节根据内核的差异有所不同,任何文档只能提供内核编译安装的主要思想,所以我也没必要特意写一份新的linux内核编译心得了,大家可以参考这篇文章。
------------------------------------------------------------------------------------
虚拟机VMware下的Debian etch 2.6.18-6-686,欲升级为2.6.28内核。
首先,修改/etc/apt/sources.list,如果其中有含cdrom这行,用“#”号注释掉该行。
然后,打开终端Terminal,运行
#apt-get update
#apt-get install build-essential
这步将装上如gcc等的所有基本软件工具,由于打算使用X-Window中的xconfig界面来配置内核,所以,需要安装qt3,运行命令
#apt-get install pkg-config qt3-dev-tools libqt3-headers libqt3-mt-dev qt3-qtconfig qt3-doc
当然,前提是,以上所以软件包,都能在http://www.debian.com/distrib/packages中找到。
然后在http://www.kernel.org/上下载最新的Linux Kernel。
为啥?他娘的,好不容易升级一次,咋还不整个最新的?我升级时,最新内核文件是linux-2.6.28.tar.gz,放到目录/usr/src下,
#cd /usr/src
#tar xzvf linux-2.6.28.tar.gz
#ln -s linux-2.6.28 linux //在当前目录下创建linux-2.6.28的链接文件linux
#cd linux
#make xconfig
X-Window下的内核配置命令,如果要使用USB摄像头,一定把video4linux(v4l和v4l2的选项选为模块),最好把其中的驱动都选上,比如gspca,spca5xx,zc0301等。另外,还需要选上 。其他的可以用默认选项。然后saveàquit。之后运行
#make dep //这步应该是检查依赖关系
#make clean //如果是第一次编译新下载的内核,这步可省略
#make bzImage //生成新内核的镜像
#make modules //编译外挂模块
#make modules_install //安装模块
#/sbin/depmod –a //创建模块的链接
#make install
这步创建System.map与vmlinuz。若不成功,需要手动创建,进入/boot文件夹下,执行
#cd /boot
#cp /usr/src/linux/System.map System.map-2.6.28
#cp /usr/src/linux//arch/i386/boot/bzImage vmlinuz-2.6.28
不过,正常情况下,上三步不用执行,make install已经创建好了链接。
接下来,我是这样做的:
#/usr/sbin/mkinitramfs -o /boot/initrd-2.6.28 2.6.28
#cd /boot/grub
#vim menu.lst
在最下面的
#####End Default Options#####
后添加
title Debian GNU/Linux kernel 2.6.28
root (hd0,0)
kernel /boot/vmlinuz-2.6.28 root=/dev/sda1 ro
initrd /boot/initrd.img-2.6.28
savedefault
注意,这里的格式要和原来Kernel的启动设置格式相同,然后确认一下,相应文件是否确实存在,比如/boot/vmlinuz-2.6.28。
这时我重启后,出现错误:
could not load /lib/modules/2.6.28/modules.dep,还好保留有原来的内核,于是又进入原内核,删掉了之前生成的/boot/initrd.img-2.6.28,执行
#cd /usr/src/linux
#update-initramfs –c –k 2.6.28
这样,重新在/boot下创建initrd.img-2.6.28,重启后,进入了新内核,内核编译升级成功。