转载:

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. 关于ES6扩展属性

    ES6 let和const let命令 只在代码块作用域内有效 不存在变量提升(不能在申明之前赋值) 暂时性死区(在区域内不受外部变量影响) 不允许重复申明(在相同代码块区域内) 块级作用域 let为 ...

  2. U盘分区信息清除

    diskpart select disk 1 clean 清除选中(优U)盘的所有信息;

  3. Nginx下Redmine2.6配置

    Apache下Redmine2.6配置,请参考:http://blog.linuxeye.com/405.html CentOS6.6下安装Redmine2.6+MySQL5.6+Nginx,教程如下 ...

  4. css斜线

    斜线 .demo{ display: inline-block; width: 400px; height: 100px; resize: both; overflow: auto; margin-t ...

  5. js中Number数字数值运算后值不对

    问题: 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两 ...

  6. Configure the Struts Tag Libraries

    In Struts framework, you always need to configure the Struts tag libraries in order to access it in ...

  7. js 控制 table style css

    var table = objj.getElementsByTagName('table'); alert(table[i].width); if(table==null) return; for(v ...

  8. QTbaWidget控件几个例程 【worldsing笔记】

    Qt Creator自带的 QTabWidget控件几个例程 在Qt Windos版本安装后,在Example目录可以找到与QTabWidget相关的工程Demo,如果按默认安装的话他们分别是:   ...

  9. 无责任Windows Azure SDK .NET开发入门篇二[使用Azure AD 进行身份验证]

    二.使用Azure AD进行身份验证 之所以将Azure AD 作为开始,是应为基本上我们所有应用都需要进行安全管理.Azure Active Directory (Azure AD) 通过以下方式简 ...

  10. C# 递归算法与冒泡

    C# 递归算法求 1,1,2,3,5,8,13···static void Main(string[] args){ int[] cSum = new int[10];for (int i = 0; ...