我的Debian GNU/Linux——内核编译篇

距离上一篇"我的Debian GNU/Linux——安装篇"已经过去了快三个月了,本人不但很菜还很懒,加上一堆乱七八糟的考试都在年底,这篇关于内核编译的文章就一拖再拖.自己配置编译了几次内核,觉得对整个过程还是比较熟悉的.虽然对于普通用户编译内核没有多大意义.

在动手编译之前我想说Debian自带的默认内核已经包含了绝大部分配置,完全可以满足一般用户的需求,对于编译自己的内核是否有必要也是一个值得考虑的问题,编译内核是需要大量的时间(取决于您的硬件配置).如果基于以下理由,编译新内核还是很有用的:

  • 支持某些特殊的硬件,或者默认的内核配置和某些硬件冲突
  • 使用某些不为所提供的内核支持的选项
  • 通过删除无用的驱动程序来优化内核,以减少启动时间
  • 创建整体的而不是模块化的内核
  • 运行最新的内核或开发中的内核
  • 深入了解linux 内核

网络上关于编译内核基本是按照linux编译软件三步走的方式(配置,make,make install),我并不喜欢这个,软件包管理起来很不方便.按照Debian的方式编译是个很好的选择,编译结束就生成一个deb软件包,安装卸载都很容易.

按照Debian的方式编译内核需要安装fakeroot,kernel-package, libncurses5-dev三个软件包

apt-get install fakeroot kernel-package libncurses5-dev

下载解压源代码

mkdir kernel
cd kernel
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.1.tar.bz2
tar jxf linux-2.6.38.1.tar.bz2
cd linux-2.6.38.1

接下来输入

make menuconfig

开始配置内核,这个步骤挺费时间的.不知道从哪个版本开始还是Debian系统特有的,配置内核时系统都会先导入你现在正在使用的内核的配置文件.我一般只修改一下处理器相关的信息,去掉老掉牙的文件系统,还有去掉驱动里面什么万兆之类的东西,改太多也是很幸苦的.如果真的要配置非常个性化的内核,建议去读一下金步国的《Linux 2.6.19.x 内核编译配置选项简介》,虽然2.6.19.x内核比较老,但是还是很有参考价值的.本文只初略的介绍一下编译内核的过程,不会涉及内核配置的信息.

配置结束后执行以下几个步骤就可以开始编译内核了

#清除源码树并复原 kernel-package 参数
make-kpkg clean
 
#开始编译内核
fakeroot make-kpkg --initrd --revision=cwh.1.0 kernel_image
#如果使用root用户操作可以不用fakeroot,
#它只是在编译过程中暂时取得root权限,--revision参数也不是必须的.

接下来耗费相当长的时间等待编译过程,一般会出现许多个警告,只要不出现错误都可以编译成功,如过要消除警告需要调试内核修改源代码了.编译结束后会在kernel目录下生成一个内核deb包,按照安装本地软件包的方式dpkg -i就可以安装.

如果你只是想精简内核的话,可以使用make localmodconfig命令来简化内核配置过程.

Most people uses the kernel shipped by distros – and that’s good. But some people like to compile their own kernels from kernel.org, or maybe they like following the Linux development and want to try it. Configuring your own kernel, however, has become a very difficult and tedious task – there’re too many options, and some times userspace software will stop working if you don’t enable some key option. You can use a standard distro .config file, but it takes too much time to compile all the options it enables.

To make the process of configuration easier, a new build target has been added: make localmodconfig. It runs “lsmod” to find all the modules loaded on the current running system. It will read all the Makefiles to map which CONFIG enables a module. It will read the Kconfig files to find the dependencies and selects that may be needed to support a CONFIG. Finally, it reads the .config file and removes any module “=m” that is not needed to enable the currently loaded modules. With this tool, you can strip a distro .config of all the unuseful drivers that are not needed in our machine, and it will take much less time to build the kernel. There’s an additional “make localyesconfig” target, in case you don’t want to use modules and/or initrds.

以上内容摘自:Kernel Newbies.

大段的英文,其实意思挺简单的,就是说新的内核只会编译现有正在运行的内核已经加载的模块.所以,如果准备这样编译内核的话,在编译前最好把你所有可能会使用到的硬件都插上去.当然你也可以先用make localmodconfig命令生成简化的.config文件再用make menuconfig来自定义.

结束了,其时编译内核也不会很难......

» 本博客采用署名 2.5 中国大陆许可协议进行许可,本文版权归作者所有,欢迎转载,但必须在明显位置给出原文连接。
anyShare分享到:
发表评论?

0 条评论。

发表评论

注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>