转载:

http://blog.163.com/libo_5/blog/static/156968520101016102051580/

http://hi.baidu.com/wg_wang/item/f9375c2f00ca75c0ee10f1db

debian内核编译

1、到www.kernel.org/pub/liunux/kernel所需要编译的内核源代码

2、安装必要的包,其中kernel-package是debian用以编译内核的工具;fakeroot是一个在系统中创建假root的工具;为dpkg在编译内核中所需
udev
是管理/dev和hotplug的守护进程;build-essential是创建deb包所需的信息列表;yaird是用来创建内核初始引导镜像的工
具,注意笔者编译的时刻,lenny(testing)版本的debian下是没有这个包的,需要在etch(stable)或
sid(unstable)下才有。

apt-get install kernel-package libncurses5-dev fakeroot
apt-get install build-essential udev
apt-get install libhtml-template-perl libparse-recdescent-perl
apt-get install yaird

3、把源代码放到kernel目录下并解压并进入该文件夹,如cd linux-2.6.24.3。

4、配置内核选项,选项内容巨多,笔者把reiserfs文件系统编译成内建的了,还增加了smp和超线程支持,并去掉无线,蓝牙,1394等不会用到的模块等等。
make clean && make mrproper
make menuconfig

5、创建内核的deb包,这个过程花费一定的时间,结果会在kernel目录下得到一个deb包,如linux-2.6.24.3_2.6.24.3_i386.deb。
make-kpkg clean
fakeroot make deb-pkg

6、安装内核的deb包
dpkg -i *.deb

7、创建Ramdisk
mkinitrd.yaird -o /boot/initrd.img-版本号

8、配置grub引导选项,如果不是grub引导的,请使用其他命令。
update-grub

9、如果不想要卸载就得内核的话,跳过(建议不要卸载,否则出了问题的话就惨了)。版本号可以在/boot下面看到。
dpkg --purge --force-remove-essential 内核软件包名称,包括完整版本号

10、重启,启动时选择新的版本号的那个选项就可以了。


最 近反复编译内核十余次,其间得到了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===>Prompt 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直接使用)。

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.org/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.

昵称: d00m3d 时间: 2009-04-06 17:51:00
LZ 你怎么做到比原版小那么多的内核和模块,裁减掉了很多东西?还是压缩了?

另外其他/usr /var 目录可以瘦身吗

昵称: archenemy 时间: 2009-04-07 06:14:00
要控制内核大小,主要有三点。一是按d00m3d兄的指点,对内核采用LZMA压缩,二是对自己需要的功能,如驱动等尽量编译为模块,第三,不需要的东西,尽量不支持,如业余无线电什么的。如果需要也尽量编译为模块。
/var,好像只可以aptitude clean了。如果很在意,Debian了有两个包可以删除本机上用不到的软件,论坛里有介绍的,可以搜索试试。

昵称: dacheng 时间: 2009-04-07 14:08:00
引用:
作者: dacheng
.....
/var,好像只可以aptitude clean了。如果很在意,Debian了有两个包可以删除本机上用不到的软件,论坛里有介绍的,可以搜索试试。

这两个包大约叫什么名字呢?没有google到,谢谢

昵称: tomcat.xin 时间: 2009-04-07 14:34:00
是deborphan么?

昵称: kfihihc 时间: 2009-04-07 15:30:00
lz安装显卡驱动了吗?

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

昵称: fender010 时间: 2009-04-07 17:06:00
引用:
作者: dacheng
要控制内核大小,主要有三点。一是按d00m3d兄的指点,对内核采用LZMA压缩,二是对自己需要的功能,如驱动等尽量编译为模块,第三,不需要的东西,尽量不支持,如业余无线电什么的。如果需要也尽量编译为模块。
/var,好像只可以aptitude clean了。如果很在意,Debian了有两个包可以删除本机上用不到的软件,论坛里有介绍的,可以搜索试试。

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

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

昵称: archenemy 时间: 2009-04-07 17:11:00
引用:
作者: fender010
lz安装显卡驱动了吗?

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

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

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

昵称: archenemy 时间: 2009-04-07 17:13:00
deborphan用来删除孤儿软件,算是瘦身工具吧。也可以在google中搜索“debian 瘦身"

昵称: dacheng 时间: 2009-04-07 21:04:00
声明:我确实没有安装ATI的驱动,是xorg自动识别出来的,实际使用中,感觉还可以就懒得再弄了。

昵称: dacheng 时间: 2009-04-07 21:09:00
引用:
作者: archenemy
LZ 你怎么做到比原版小那么多的内核和模块,裁减掉了很多东西?还是压缩了?

另外其他/usr /var 目录可以瘦身吗

/usr/share/doc 或 /usr/share/locale 裡面,用不着的都可以幹掉

/usr/share/zoneinfo 之內不合用的也可刪之

昵称: d00m3d 时间: 2009-04-08 00:21:00

最新文章

  1. printf的特殊用法
  2. 《Entity Framework 6 Recipes》中文翻译系列 (8) -----第二章 实体数据建模基础之继承关系映射TPT
  3. ----------jqery和js如何判断checkbox是否选中 --------两个单选按钮如何选一个,且用jquery获取被选的值
  4. python装饰器方法
  5. 利用Jersey构建REST之入门实例
  6. NC V6 安装目录各文件夹作用描述
  7. Window.ActiveXObject的用法 以及如何判断浏览器的类型
  8. 逻辑回归损失函数(cost function)
  9. tar 解压缩
  10. 406. Queue Reconstruction by Height
  11. NFinal 视图—用户控件
  12. 第35篇 IIS执行原理
  13. Spring学习(2)---IOC
  14. H5学习之旅-H5与Php交互(12)
  15. 饮冰三年-人工智能-Python-26 Django 学生管理系统
  16. Redis 设计与实现 (七)--事务
  17. Codeforces Round #529 (Div. 3) D. Circular Dance
  18. Oracle 学习笔记(二)
  19. 使用Spring-data-jpa(2)(三十一)
  20. Crash 文件调试

热门文章

  1. Java WEB —— Java提升
  2. 邮件发送服务AWS SES,Mailgun以及SendCloud(转)
  3. python开发vim插件
  4. 新 esb-cs-tool.jar 参数说明
  5. Codeforces 118 D. Caesar&#39;s Legions (dp)
  6. web.xml filter 顺序
  7. Apache服务器配置默认首页文件名和网站路径
  8. MySQL 日期时间
  9. StringUtils 字符串工具类
  10. 广州项目实施步骤I_练习安装 CentOS x64 6.4