有了以上包的,应该可以用传统方法编译内核。
如果想用新方法编译内核,那么还需要下面的包:
# apt-get install kernel-package
# apt-get install apt-get install fakeroot
安装了kernel-package包后,我建议,当编译过程中遇到什么问题的时候,就打开这个文件看看:/usr/share/kernel-package/docs/README
做好了上述的准备工作,我们开始按下面的步骤编译、安装内核
将内核的源文件复制到相关的目录下,然后解压缩。我是将源代码复制到了/usr/src目录下
# tar xvf linux-2.6.28.tar.bz2
# cd /usr/src/linux-2.6.28
作一些清理工作。当然,如果解压缩后第一次编译,可以不做这些
# make clean
# make mrproper
把当前内核的配置作为模板
# cp /boot/config-2.6.18-6-k7 .config
先不要对内核配置文件做任何改动,直接开始编译。如果按config-2.6.18-6-k7的配置编译新内核后能正常启动,再进行内核配置。因为我是在字符界面的菜单模式下进行相关操作的,所以使用下面的命令:
# make menuconfig
出现内核配置的界面后,就可以根据自己的电脑的硬件情况进行相应的选择。
开始编译
# make-dpkg clean
# fakeroot make-kpkg --initrd linux_image
上面的这两条命令正确执行完后,我们会在/usr/src目录下看到这样的一个debian包:
linux-image-2.6.28_2.6.28-10.00.Custom_i386.deb
安装这个包,就能完成新内核的安装。
# dpkg -i linux-image-2.6.28_2.6.28-10.00.Custom_i386.deb
上面的命令自动完成menu.lst文件的修改,在其中加入了如下的内容:
title
root
kernel
initrd
savedefault
title
root
kernel
initrd
savedefault
重新启动电脑,可以看到GRUB的启动界面已经被修改。选择运行kernel 2.6.28的菜单,看看LINUX能否正常启动。
我们再看看传统的方法。我在用这一方法编译内核时,遇到了一些麻烦。实际上,我在debian3.1环境下编译过内核2.4.X,虽然也有一些周折,但最 终还是成功的。我还是直接说编译过程中的所需要运行的命令吧。我将linux-2.6.28.tar.bz2复制到了/usr/src目录下。
# tar xvf linux-2.6.28.tar.bz2
# cd /usr/src/linux-2.6.28
# make clean
# make mrproper
# make
# make modules_install
# cp -v /arch/i386/boot/bzImage /boot/vmlinuz-2.6.28
# cd ../../..
# cp System.map /boot/System.map-2.6.28
# mkinitramfs -o /boot/initrd.img-2.6.28 2.6.28
# cp .config /boot/config-2.6.28
当然,还要修改/boot/grub/menu.lst,加入如下的内容:
title
root
kernel
initrd
savedefault
做完这些工作,重新启动电脑,看看是否可以正常进入LINUX系统。
我在编译过程中遇到的几个问题:
1、用传统方法编译内核,启动后显示'Unpacking initramfs ...
经过多次实验,我认为是使用mkinitrd命令制作initrd.img文件带来的问题。我用mkinitramfs命令制作initrd.img文件,就可以使启动正常。操作格式如下:
# mkinitramfs -o /boot/initrd.img-2.6.28 2.6.28
在上述的命令中,-o /boot/initrd.img-2.6.28指明了生成initrd.img-2.6.28文件的输出路径,
其后的空格后的2.6.28指明要将路径/lib/modules/2.6.28下的驱动模块加入initrd.img-2.6.28文件中。如果没有这 一参数,加入initrd.img-2.6.28文件中的则是当前版本的驱动模块。例如,如果当前正在运行的linux操作系统的内核版本是 2.6.18,那么,/lib/modules下就会有2.6.18子目录,下面的命令虽然是想生成2.6.28版本的initrd.img文件,但实际 上是将/lib/modules/2.6.18下的驱动模块加入:
# mkinitramfs -o /boot/initrd.img-2.6.28
就我目前的理解,我认为用传统方法生成initrd.img文件产生错误的原因在于,现在网上流传的编译内核的方法是基于非常低的内核版本,在这些版本 中,启动压缩文件为initrd格式,所以那些资料都教大家用mkinit生成initrd.img。而在较高版本的内核的编译选项中,用 initramfs代替了原先的initrd,用mkinitrd命令生成initrd.img文件自然就会产生格式错误,所以必须用 mkinitramfs命令代替mkinitrd命令生成initrd.img。initramfs的选项在内核编译选项菜单下的位置(linux- 2.6.28)是:
General Setup
|---[M] Initial RAM filesytem and RAM disk (initramfs/initrd) support
2、让内核识别USB设备
要使编译选项中的下列选项被选中:
3、让内核识别SATA硬盘
{M}
[*]
[*]
[M]