编译新内核为什么有些人想要编译新内核? Debian 自带的默认内核已经包含了绝大部分配置,所以编译新内核并不是必需的。并且,Debian提供了多个内核供选择。所以您应该先确认一下,有没有适合您硬件的内核映像软件包存在。然而,基于下列理由,编译新内核还是很有用的:
[list][*]支持某些特殊的硬件,或者默认的内核配置和某些硬件冲突
[*]使用某些不为所提供的内核支持的选项 (例如,支持 high memory)
[*]通过删除无用的驱动程序来优化内核,以减少启动时间
[*]创建整体的而不是模块化的内核
[*]运行最新的内核或开发中的内核
[*]深入了解 linux 内核
[/list]
8.6.1. 内核映象管理
不要害怕尝试编译内核。它很有趣而且很合算。
为了以 Debian 的方式编译内核,您需要一些软件包: fakeroot,kernel-package,linux-source-2.6 以及其它一些可能已经安装过的软件包(完整的列表请参阅 /usr/share/doc/kernel-package/README.gz)。
此方法将从您的内核源码创建一个 .deb 文件,并且,如果您有非标准模块,将同时创建它们的同步依赖 .deb 文件。这是一个管理内核的较好的方法; /boot 目录将保存内核,System.map,以及当前编译的活动配置文件的日志。
注意,您不一定要以 “Debian 方式”编译内核;但我们发现使用软件包系统来管理您的内核,确实可以更加安全和易用。事实上,您可以直接从 Linus 那里而非 linux-source-2.6 得到内核源码,并仍使用 kernel-package 的编译方法。
注意您可以找到完整的文档,通过使用 kernel-package 它在 /usr/share/doc/kernel-package里。本节只包含一个简单的入门指南。
此后,我们假设您具有操作您机器的权力,可以将内核源码解压到您的 home 目录[22]。我们还假设您的内核版本是 2.6.26。确定您处于打算解开内核源码的目录,然后使用 tar xjf /usr/src/linux-source-2.6.26.tar.bz2 解压,并进入 linux-source-2.6.26 刚才创建的目录。
现在,可以开始配置您的内核了。如果您已经安装配置好,并正在运行 X11,请执行 make xconfig;否则请执行 make menuconfig(必须已经安装好 libncurses5-dev)。请花点时间阅读在线帮助并仔细地作选择。如果有疑问,通常来说包含您所不确定的设备驱动程序(用来管理硬件外设的软件,例如以太网卡、SCSI 控制器等)会比较好一点。注意:对于与特殊硬件无关的其它选项,如果您不了解它们,最好保持默认值。不要忘记选择 “Kernel module loader” 中的 “Loadable module support” (它们默认并没有被选择)。否则,您的 Debian 安装将会遇到问题。
清除源码树并复原 kernel-package 参数。也就是使用 make-kpkg clean。
现在,开始编译内核: fakeroot make-kpkg --initrd --revision=custom.1.0 kernel_image。其中版本号 “1.0” 可以随便您修改;它仅是一个用来跟踪您的内核编译的版本号。同样地,您也可以用任何您喜欢的词替换 “custom” (例如,主机名称)。编译内核可能要花费较长的时间,这取决于您的机器的性能。
一旦编译完成,您就可以像安装其它软件包一样安装定制的内核。以 root 身份,执行 dpkg -i ../linux-image-2.6.26-subarchitecture_custom.1.0_amd64.deb。其中 subarchitecture 部分是一个可选的子结构,这取决于您所设置的内核选项。dpkg -i 将安装内核以及其它的一些支持文件。例如,System.map 可能会被安装(用来辅助调试内核问题),/boot/config-2.6.26 也将被安装,它包含了您当前的配置。新的内核软件包将会自动地更新系统上的启动引导器,让它使用新内核。如果您创建了一个模块软件包,也要同时安装该软件包。
下面到了重启系统的时刻了;请仔细阅读前述步骤所产生的所有警告信息,然后执行 shutdown -r now。
要了解 Debian 内核与编译内核的更多信息,清参阅 Debian Linux Kernel Handbook。欲获得关于 kernel-package 的更多信息,有一份很好的文档 /usr/share/doc/kernel-package。
[22] 可以在其他目录解开内核源码并编译自定义内核,但是不需要额外的权限是最简单的方式。
hantu 于 2009-07-25 22:32:21发表:
新手的话就不要编译内核了,连一点编译经验都没有,看着一大堆的英文想都不想就问别人
刘冲 于 2009-07-25 19:28:04发表:
另外,你确定不能识别网卡是内核的原因吗?
刘冲 于 2009-07-25 19:25:15发表:
[i=s] 本帖最后由 刘冲 于 2009-7-25 19:27 编辑 [/i]
嗯,直接编译试试,不用上面的方法,直接make
make mrproper
make menuconfig
make
make modules_install
cp -v arch/i386/boot/bzImage /boot/*<版本号>
cp -v System.map /boot/System.map-<>
cp -v .config /boot/config-<>
install -d /usr/share/doc/linux-<>
cp -r Documentation/* /usr/share/doc/linux-<>
mkinitramfs -o initrd.img* <版本号>
debian中,mkinitramfs在initramfs-tools包里。
内核版本号,就是/lib/modules/目录下相应的文件夹名字。
edi 于 2009-07-25 18:24:54发表:
我在debian下编译内核,编译2.6.30内核,总是失败,不知道你们怎么弄的!如果我不编译内核,那么就没有办法识别我的网卡(无论有线或无线,都不能识别)郁闷中!!
刘冲 于 2009-07-24 12:52:14发表:
编译吧。
yhzm1314 于 2009-07-24 12:51:32发表:
嗯,这么说的话我也要在我的Debian上编译一下最新内核看看
没自己动手编译过
在学基础呢!
刘冲 于 2009-07-23 12:42:05发表:
转自官方文档
http://www.debian.org/releases/lenny/amd64/ch08s06.html.zh_CN