转载:

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

Debian中编译内核的更多相关文章

  1. 在ubuntu中编译内核是用make&nbsp;…

    执行过程如下: root@zyx-VirtualBox:~# cd /opt/EmbedSky/ root@zyx-VirtualBox:/opt/EmbedSky# cd linux-2.6.30. ...

  2. 在ubuntu中编译内核是用make menuconfig报错:package 'ncurses' has n

    执行过程如下: root@zyx-VirtualBox:~# cd /opt/EmbedSky/ root@zyx-VirtualBox:/opt/EmbedSky# cd linux-2.6.30. ...

  3. linux内核学习之二:编译内核

    在linux内核学习系列的第一课中讲述了搭建学习环境的过程(http://www.cnblogs.com/xiongyuanxiong/p/3523306.html),环境搭好后,马上就进入到下一环节 ...

  4. Debian编译内核

    转自 yuzibo博客 http://yuzibo.github.io/DebianBuildKernel.html 最终成功一次了 之前又一次编译了好多次.可惜没有一次成功的,说实话.借助Debia ...

  5. debian下配置dynamic printk以及重新编译内核

    在以前的一篇博文<编译debian内核>已经提过了重新编译内核的方法,但是整个过程花费时间较长,并且生成deb包. 这里我采用稍微简单一些的方法,因为我并没有对内核或者驱动代码做任何修改, ...

  6. Debian 7.6 新编译内核 3.15.6 开机加载黑屏

    需要手动加载 fbcon 这个模块,或者编译内核的时候,Framebuffer Console support 编译进内核(后者没测试过).加在模块只要修改/etc/default/grub文件或者/ ...

  7. 在Linux内核中添加系统调用,并编译内核

    1 环境准备 运行系统:vmware下安装的ubuntu10.10 32bit桌面版. 编译内核版本: linux-2.6.32.63 内核目录: /home/wanchouchou/linuxKer ...

  8. CentOS 6.4系统中编译和升级内核

    CentOS 6.4系统中编译和升级内核 [日期:2013-08-25] 来源:Linux社区  作者:vipshichg [字体:大 中 小] 可能因为以下几种原因,你可能需要对Linux kern ...

  9. Debian下的内核编译

    如果你装了一台linux的机器,自己没有重新编译内核,那这台机器的效率就大打折扣了,因为默认安装的机器会生成许多不需要的东西,在启动的时候也会比较慢,而你要用的有些东西可能不能工作,比如,现在都把IP ...

随机推荐

  1. 20151227感知机(perceptron)

    1 感知机 1.1 感知机定义 感知机是一个二分类的线性分类模型,其生成一个分离超平面将实例的特征向量,输出为+1,-1.导入基于误分类的损失函数,利用梯度下降法对损失函数极小化,从而求得此超平面,该 ...

  2. 关于Bean

    什么是Bean? 一个Bean 就是一个类.我们不必为制造任何的Bean而编写一些特殊的代码或者使用特殊的编程语言.事实上,我们唯一需要做的是略微地修改我们对我们方法命名的办法.方法名通知应用程序构建 ...

  3. html5 拖放到购物车

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  4. 第三百五十八天 how can I 坚持

    万事要有度,不要话唠,也不能不说,把握好分寸,今天貌似又说多了. 加了天班,理了个发,还有老爸明天来北京. 还有同学聚会没去,还有金龙让去吃鱼,没去. 还有.小米视频通话还行,能远程控制桌面, 还有, ...

  5. <转载>linux下内存泄露查找、BUG调试

    先收藏着,抽空好好看看:http://www.ibm.com/developerworks/cn/linux/l-pow-debug/ 简介 调试程序有很多方法,例如向屏幕上打印消息,使用调试器,或者 ...

  6. POJ 2888 Magic Bracelet(Burnside引理,矩阵优化)

    Magic Bracelet Time Limit: 2000MS   Memory Limit: 131072K Total Submissions: 3731   Accepted: 1227 D ...

  7. hdu 1576 A/B (扩展欧几里德简单运用)

    http://acm.hdu.edu.cn/showproblem.php?pid=1576 A/B Time Limit: 1000/1000 MS (Java/Others) Memory Lim ...

  8. DP练习(概率,树状,状压)

    http://vjudge.net/contest/view.action?cid=51211#overview 花了好长时间了,终于把这个专题做了绝大部分了 A:HDU 3853 最简单的概率DP求 ...

  9. HDU 4499 Cannon (暴力求解)

    题意:给定一个n*m个棋盘,放上一些棋子,问你最多能放几个炮(中国象棋中的炮). 析:其实很简单,因为棋盘才是5*5最大,那么直接暴力就行,可以看成一行,很水,时间很短,才62ms. 代码如下: #i ...

  10. 清除SQL Management Studio记住的用户名和密码

    SQL Server Management Studio 2008 delete the file C:\Users\%username%\AppData\Roaming\Microsoft\Micr ...