转载:
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直接使用)。
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.
另外其他/usr /var 目录可以瘦身吗
/var,好像只可以aptitude clean了。如果很在意,Debian了有两个包可以删除本机上用不到的软件,论坛里有介绍的,可以搜索试试。
作者: dacheng
.....
/var,好像只可以aptitude clean了。如果很在意,Debian了有两个包可以删除本机上用不到的软件,论坛里有介绍的,可以搜索试试。 |
这两个包大约叫什么名字呢?没有google到,谢谢
我这边单是nvidia的驱动就占12M,而lz所有的模块加起来才11M。
作者: dacheng
要控制内核大小,主要有三点。一是按d00m3d兄的指点,对内核采用LZMA压缩,二是对自己需要的功能,如驱动等尽量编译为模块,第三,不需要的东西,尽量不支持,如业余无线电什么的。如果需要也尽量编译为模块。
/var,好像只可以aptitude clean了。如果很在意,Debian了有两个包可以删除本机上用不到的软件,论坛里有介绍的,可以搜索试试。 |
驱动还有放到用户空间里的吗?
我安装 Debian 的时候最后有个提示安装本机还是全部的驱动(target or genric),这个安装不是在内核中进行吗?
作者: fender010
lz安装显卡驱动了吗?
我这边单是nvidia的驱动就占12M,而lz所有的模块加起来才11M。 |
这确实是个问题,N卡官方驱动支持硬件高清解压,可不开源,个头又大
ATI 开源,可是兼容性屡屡出问题,还不支持硬件解压
作者: archenemy
LZ 你怎么做到比原版小那么多的内核和模块,裁减掉了很多东西?还是压缩了?
另外其他/usr /var 目录可以瘦身吗 |
/usr/share/doc 或 /usr/share/locale 裡面,用不着的都可以幹掉
/usr/share/zoneinfo 之內不合用的也可刪之
Debian中编译内核的更多相关文章
-
在ubuntu中编译内核是用make&;nbsp;…
执行过程如下: root@zyx-VirtualBox:~# cd /opt/EmbedSky/ root@zyx-VirtualBox:/opt/EmbedSky# cd linux-2.6.30. ...
-
在ubuntu中编译内核是用make menuconfig报错:package &#39;ncurses&#39; has n
执行过程如下: root@zyx-VirtualBox:~# cd /opt/EmbedSky/ root@zyx-VirtualBox:/opt/EmbedSky# cd linux-2.6.30. ...
-
linux内核学习之二:编译内核
在linux内核学习系列的第一课中讲述了搭建学习环境的过程(http://www.cnblogs.com/xiongyuanxiong/p/3523306.html),环境搭好后,马上就进入到下一环节 ...
-
Debian编译内核
转自 yuzibo博客 http://yuzibo.github.io/DebianBuildKernel.html 最终成功一次了 之前又一次编译了好多次.可惜没有一次成功的,说实话.借助Debia ...
-
debian下配置dynamic printk以及重新编译内核
在以前的一篇博文<编译debian内核>已经提过了重新编译内核的方法,但是整个过程花费时间较长,并且生成deb包. 这里我采用稍微简单一些的方法,因为我并没有对内核或者驱动代码做任何修改, ...
-
Debian 7.6 新编译内核 3.15.6 开机加载黑屏
需要手动加载 fbcon 这个模块,或者编译内核的时候,Framebuffer Console support 编译进内核(后者没测试过).加在模块只要修改/etc/default/grub文件或者/ ...
-
在Linux内核中添加系统调用,并编译内核
1 环境准备 运行系统:vmware下安装的ubuntu10.10 32bit桌面版. 编译内核版本: linux-2.6.32.63 内核目录: /home/wanchouchou/linuxKer ...
-
CentOS 6.4系统中编译和升级内核
CentOS 6.4系统中编译和升级内核 [日期:2013-08-25] 来源:Linux社区 作者:vipshichg [字体:大 中 小] 可能因为以下几种原因,你可能需要对Linux kern ...
-
Debian下的内核编译
如果你装了一台linux的机器,自己没有重新编译内核,那这台机器的效率就大打折扣了,因为默认安装的机器会生成许多不需要的东西,在启动的时候也会比较慢,而你要用的有些东西可能不能工作,比如,现在都把IP ...
随机推荐
-
【转】Objective-C中的instancetype和id关键字
原文:http://blog.csdn.net/wzzvictory/article/details/16994913 一.什么是instancetype instancetype是clang 3.5 ...
-
修改 VSS 默认登录用户名三种方法
修改 VSS 默认登录用户名三种方法标签: VSS VSS2005c#2014-11-27 10:27 1561人阅读 评论(0) 收藏 举报 分类: VSS软件开发总会有 BUG 和更新的需求,之前 ...
-
DBubtil的使用
1.什么是O-R Mapping(对象-关系映射) 常用O-R Mapping映射工具 Hibernate(全自动框架) Ibatis(半自动框架/SQL) Commons DbUti ls(只是对J ...
-
在Ubuntu上录制视频和编辑(很全)
Linux多媒体三剑客:GIMP,Inkscape,Blender3D Blender基金会制作的开源微电影Sintel:http://www.sintel.org/about电影采用Creative ...
-
VMwarevSphere 服务器虚拟化之二十九 桌面虚拟化之安装View副本服务器
VMwarevSphere 服务器虚拟化之二十九 桌面虚拟化之安装View副本服务器 VMware View中高可用性可是一个必须要考虑的问题.在整个虚拟桌面环境中View Connection S ...
-
MySQL日志系统
body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10 ...
-
在2017年,如何将你的小米4刷上Windows 10 mobile?
众多攻略集大成者!资深软粉亲测有效! 参考教程: http://bbs.xiaomi.cn/t-11814358 http://bbs.xiaomi.cn/t-11736827 问:刷机前,我需要做什 ...
-
sublime text 3 配置python IDE
Python越来越受“程序猿”们的青睐.快速的开发模式,简洁的代码格式,海量的扩展,这无疑都为python的火热奠定了基础. “磨刀不误砍柴工”,一款功能强劲的IDE能帮助开发者有效的管理.编辑,运行 ...
-
Redis系列八:redis主从复制和哨兵
一.Redis主从复制 主从复制:主节点负责写数据,从节点负责读数据,主节点定期把数据同步到从节点保证数据的一致性 1. 主从复制的相关操作 a,配置主从复制方式一.新增redis6380.conf, ...
-
react-native 新手爬坑经历(Could not connect to development server.)
来,先说下报错出现场景,刚跑完项目加载完是好的,但是双击R后就开始耍小脾气了-红屏出现,如下图 首先检查包服务器是否运行正常.在项目文件夹下输入react-native start或者npm star ...