LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1761|回复: 11

[分享]Debian中编译内核

[复制链接]
发表于 2010-1-30 22:34:56 | 显示全部楼层 |阅读模式
最近反复编译内核十余次,其间得到了d00m3d兄、simon22543兄、waq兄、聚焦深空兄等人的很多帮助,大量参考了金步国兄(csfrank122@hotmail.com)的作品( http://lamp.linux.gov.cn/Linux/kernel_options.html )十分感激,一并致谢!现在把自己的些许心得与大家分享。
一、为什么要编译内核
第一,可以支持一些现有内核不支持的硬件。如我的无线网卡。第二,可以加快运行速度。使用新内核启动,感觉splashy的进度条很快,明显超
过Debian自带的内核。究其原因,是因为一个发行版,为了普遍适应各种用户的需求,不得不支持很多的硬件,其中,可能你一辈子也用不上。 通过重新编译内核,可以大幅缩小内核尺寸,提高运行速度。第三,可以学会如何定制、裁减、编译自己的内核。

第二、编译内核前的准备
主要是安装几个必须的文件,通常可以这样:
sudo aptitude install gcc g++ make kernel-package libncurses5-dev

第三、Debian中编译内核的步骤
首先,sudo vi /etc/apt/source.list,把所有源的类型替换为sid。通常使用sid,可以体验更好的运行速度和内核的新特性。
其次,sudo aptitude update && sudo aptitude install linux-source-2..6.32。这时会在/usr/src里多出一个名为linux-source-2.6.32.tar.bz2的文件。我们把它解压缩 sudo tar xvfj linux-source-2.6.32.tar.bz2,然后进入新产生的目录,cd linux-source-2.6.32。现在,在linux-source-2.6.32目录里依次执行下面几条命令:
sudo make menuconfig 这里可以针对自己的硬件进行调整。
sudo make-kpkg clean 这个命令的作用是清理环境,为下面的编译打基础。
sudo make-kpkg --append-to-version -dacheng --revision 1.0.custum kernel_image 这个命令用来编译内核,如果你在内核选项里使用了initram,可以增加一个选项 --initrd。建议大家使用man make-kpkg看看相关的选项,因为有些必须以数字开始,有些不可以使用大写字母。我的
CPU是P4m 2.2,编译一次大约要使用65分钟。编译完毕后,会在/usr/src里多出一个名为linux-image-2.6.32-dacheng_1.0.custum_i386.deb的> 文件。
sudo dpkg -i /usr/src/linux-image-2.6.32-dacheng_1.0.custum_i386.deb 这当然是安装新内核了,呵呵~

第四、编译内核的技巧
1、make menuconfig的作用是产生一个.config文件。通常我们可以先cp /boot/config-2.6.xx  /usr/src/linux-source-2.6.32/.config,然后
sudo make menuconfig,在出现的菜单中,首先执行倒数第二项load an alternate configuration file,系统会自动读取.config文件。然后配
置各选项会方便一些。
2、新人编译内核,往往要编译多次才能成功。为了下次编译方便,在make menuconfig结束后,sudo cp .config /root/.config,下次在make menuconfig前,先把/root下的.config文件复制过去。sudo cp /root/.config /usr/src/linux-source-2.6.32。如果新内核可以启动系统,sudo cp /root/.config /root/config。总之,/root/.config是一个实验性的配置文件,/root/config是一个相对正确的配置文件,每次编译可在上
次配置文件基础上编译,用来减少BUG。一旦新内核BUG减少,马上备份为/root/config。
3、掌握几个必要的单词:
experimental  实验的,实验性的
deprecated  不赞成的,反对的
unsafe  不安全的
obsolete 废弃的
4、认识几个符号
[   ]:可以编入内核,也可以不编入内核,视自己的硬件而定
< >:可以编入内核、编为模块、也可以不编入内核
{   }:本功能被其它功能所依赖,因而被自动选定,此时可以编入内核、也可以编为模块
5、五种基本操作
输入y:把本功能编入内核
输入n:内核中没有此功能
输入m:把本功能编为一个模块,运行时可以动态插入或卸载
输入?:查看帮助
输入/:进行搜索
6、建议选中General setup===>rompt for develpment and/or incoming code/drivers,因为部分功能需要该选项,例如pppoe。
7、内核的很多功能存在相互依赖的关系,如果你需要的一个功能总找不到,可以用/搜索,然后检查依赖关系是否满足。下面通过一个例子说明 。
Symbol: ATH_COMMON [=y]
   Prompt: Atheros Wireless Cards
       Defined at drivers/net/wireless/ath/Kconfig:1
         Depends on: NETDEVICES [=y] && WLAN [=y] && WLAN_80211 [=y] && CFG80211 [=y]
           Location:
               -> Device Drivers
                   -> Network device support (NETDEVICES [=y])
                       -> Wireless LAN (WLAN [=y])
                           -> Wireless LAN (IEEE 802.11) (WLAN_80211 [=y])
上述例子中,ATH_COMMON是无线网卡的驱动。第四行说明只有NETDEVICES、WLAN、WAN-80211、CFG80211都被编进内核时,本项驱动才可以被选中。
7、为了缩小内核的尺寸,建议大家把kernel compression mode设置为LZMA,同时尽量把一些功能编译为模块,如对FAT、FAT32、NTFS文件系统>的支持,声卡、显卡、网卡、USB设备等。但有些功能必须编入内核,否则新内核不能启动。如system v ipc、对IDE硬盘的支持(当然,如果使>用SATA硬盘就无所谓了)、对ext2文件系统的支持、 Virtual terminal等。

现在,我的新内核仅为1.4M,所有模块仅为11M。截图如下,并附上我的config文件(大家可以把该文件解压到/usr/src/linux-2.6.xx下,命名为.config直接使用)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2010-1-31 12:51:48 | 显示全部楼层
Some notes:

1. As a rule of thumb, it is always a good practice to run "make mrproper" in the kernel source tree upon unpacked.

2. If you always test or switch between kernels, this trick may be useful:
http://www.linuxsir.cn/bbs/thread335331.html

3. Bare in mind, display driver is also kernel modules.  Therefore, if a new kernel is installed, it is necessary to re-compile the display driver.  It is true for both A-cards or N-cards.

4. To compile kernel modules, such as display drivers, it is necessary to have the same compiler version as the running kernel.
回复 支持 反对

使用道具 举报

发表于 2010-2-1 01:14:05 | 显示全部楼层
LZ 你怎么做到比原版小那么多的内核和模块,裁减掉了很多东西?还是压缩了?

另外其他/usr /var 目录可以瘦身吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-1 09:08:17 | 显示全部楼层
要控制内核大小,主要有三点。一是按d00m3d兄的指点,对内核采用LZMA压缩,二是对自己需要的功能,如驱动等尽量编译为模块,第三,不需要的东西,尽量不支持,如业余无线电什么的。如果需要也尽量编译为模块。
/var,好像只可以aptitude clean了。如果很在意,Debian了有两个包可以删除本机上用不到的软件,论坛里有介绍的,可以搜索试试。
回复 支持 反对

使用道具 举报

发表于 2010-2-1 09:34:48 | 显示全部楼层
Post by dacheng;2066594
.....
/var,好像只可以aptitude clean了。如果很在意,Debian了有两个包可以删除本机上用不到的软件,论坛里有介绍的,可以搜索试试。

这两个包大约叫什么名字呢?没有google到,谢谢
回复 支持 反对

使用道具 举报

发表于 2010-2-1 10:30:11 | 显示全部楼层
是deborphan么?
回复 支持 反对

使用道具 举报

发表于 2010-2-1 12:06:59 | 显示全部楼层
lz安装显卡驱动了吗?

我这边单是nvidia的驱动就占12M,而lz所有的模块加起来才11M。
回复 支持 反对

使用道具 举报

发表于 2010-2-1 12:11:28 | 显示全部楼层
Post by dacheng;2066594
要控制内核大小,主要有三点。一是按d00m3d兄的指点,对内核采用LZMA压缩,二是对自己需要的功能,如驱动等尽量编译为模块,第三,不需要的东西,尽量不支持,如业余无线电什么的。如果需要也尽量编译为模块。
/var,好像只可以aptitude clean了。如果很在意,Debian了有两个包可以删除本机上用不到的软件,论坛里有介绍的,可以搜索试试。


驱动还有放到用户空间里的吗?

我安装 Debian 的时候最后有个提示安装本机还是全部的驱动(target or genric),这个安装不是在内核中进行吗?
回复 支持 反对

使用道具 举报

发表于 2010-2-1 12:13:34 | 显示全部楼层
Post by fender010;2066628
lz安装显卡驱动了吗?

我这边单是nvidia的驱动就占12M,而lz所有的模块加起来才11M。


这确实是个问题,N卡官方驱动支持硬件高清解压,可不开源,个头又大

ATI 开源,可是兼容性屡屡出问题,还不支持硬件解压
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-1 16:04:53 | 显示全部楼层
deborphan用来删除孤儿软件,算是瘦身工具吧。也可以在google中搜索“debian 瘦身"
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表