Chinaunix首页 | 论坛 | 博客
  • 博客访问: 220180
  • 博文数量: 33
  • 博客积分: 256
  • 博客等级:
  • 技术积分: 300
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-14 18:39
个人简介

前方的路,充满了艰辛。-

文章分类
文章存档

2014年(1)

2013年(27)

2012年(5)

分类: LINUX

2013-03-22 16:10:46

原文地址:内核裁剪、编译 作者:静飞lv

本文参考了《Linux 2.6.19.x 内核编译配置选项简介》,谢谢原作者。
还有的作者,非常感谢你们。

2.6.28内核虚拟机里测试通过,开机进桌面的速度提高了大约一倍,编译出来的体积因为我要做内核开发,所以加入了内核调试信息等选项,最后是3mb左右。

1

make menuconfig 配置内核

cd /usr/src/linux-2.6.N

make menuconfig

注意:用源码编译的时候会在当前目录下产生很大的输出文件大约为2-3个G,编译前要看看当前位置空间是否够用,当然源码放在任何地方都行的 编译安装成功后 这个文件就可以全部删除掉。若不想更换源码文件的位置,可以指定编译输出文件的位置如:

make O=/home/name/build/kernel 
   make O=/home/name/build/kernel menuconfig

   2

General setup选项
Prompt for development and/or incomplete code/drivers选上
Local version 加上自己的名字,如.sai
Support for paging of anonymous memory (swap) 使用交换分区或交换文件来做为虚拟内存,一定要选上
System V IPC表示系统的进程间通信Inter Process Communication,它用于处理器在程序之间同步和交换信息,如果不选这项,很多程序运行不起来,也是必选的
Auditing support去掉,用不着审计
Control Group support 去掉
Group Scheduling CPU组调度,桌面用户可以不选
Namespaces全去掉
Initial RAM和Optimize for size选上。
Activatie markers激活标志,默认选上的,不知道是什么,我没改。
Kprobes提供了内核编程时一种事务反射的机制,不做内核编程的就去掉,我是选上了。


3

Loadable module support选项
默认的就可以,我要做内核开发,所以选上了Forced module unloading,以后可能有点用

4

Block layer选项
全部去掉,最后一个IO Schedulers是IO调度器
Anticipatory I/O scheduler
假设一个块设备只有一个物理查找磁头(例如一个单独的SATA硬盘),将多个随机的小写入流合并成一个大写入流,用写入延时换取最大的写入吞吐量.适用于大多数环境,特别是写入较多的环境(比如文件服务器)
Deadline I/O scheduler
使用轮询的调度器,简洁小巧,提供了最小的读取延迟和尚佳的吞吐量,特别适合于读取较多的环境(比如数据库)
CFQ I/O scheduler
使用QoS策略为所有任务分配等量的带宽,避免进程被饿死并实现了较低的延迟,可以认为是上述两种调度器的折中.适用于有大量进程的多用户系统
Default I/O scheduler默认IO调度器
我只留了CFQ I/O scheduler


5
Processor type and features选项
High Resolution Timer Suppor支持高频率时间发生器,大多数个人PC并没有这个必要,我去掉了
Symmetric multi-processing support多核cpu就选上
Enable MPS table是64位cpu的acpi支持,去掉
Single-depth WCHAN output不知道是什么,默认选上我就没动
Processor family处理器系列,请按照你实际使用的CPU选择,大部分情况选586
Generic x86 support通用x86支持,如果你的CPU能够在上述"Processor family"中找到就别选,安全起见,我还是选了。
HPET Timer Support替代8254芯片的新一代定时器,i686及以上级别的主板都支持,可以选上。
Maximum number of CPUs支持的最大CPU数,每增加一个内核将增加8K体积,我填了2
SMT (Hyperthreading) scheduler support支持Intel的超线程技术,最好选上
Multi-core scheduler support针对多核CPU进行调度策略优化,多核就选上吧
Enable X86 board specific fixups for reboot修正某些旧x86主板的重起bug,这种主板基本绝种,放心去掉
/dev/cpu/microcode - Intel IA32 CPU microcode support可以放心去掉。
/dev/cpu/*/msr - Model-specific register support在多cpu系统中让特权CPU访问x86的MSR寄存器,内核开发可能有用,不然你就去掉吧,反正我留下了。
/dev/cpu/*/cpuid - CPU information support能从/dev/cpu/x/cpuid获得CPU的唯一标识符(CPUID),内核开发可能有用,不然你就去掉吧,反正我留下了。
High Memory Support最高内存支持,一般来说没几个人的内存大于4G就选它吧。
64 bit Memory and IO resources使用64位的内存和IO资源去掉
Allocate 3rd-level pagetables from highmem3层页表去掉,除非你的内存很大很大。
Math emulation数学协处理器仿真,486DX以上的cpu就不要选它了,我没选。
Timer frequency内核时钟频率,桌面推荐"1000 HZ",服务器推荐"100 HZ"或"250 HZ"
x86 PAT support使用PAT(Performance Acceleration Technology)性能加速技术属性来对页面级缓存控制进行设置,可选可不选。
EFI runtime service support除非你的系统支持EFI(一种可代替传统BIOS的技术)否则不选,我没选。
Enable seccomp to safely compute untrusted bytecode只有嵌入式系统可以不选,普通pc那就选上吧。
kexec system call提供kexec系统调用,可以不必重启而切换到另一个内核,如果需要就选择,对大多数用户来说并不需要,去掉。
Build a relocatable kernel可重定位内核,没必要,可选可不选

6

Power management options选项
Power Management Debug Support 仅供调试使用,去掉
其他保持默认

7

Bus options选项
保持默认即可。

8
Executable file formats选项
Kernel support for ELF binaries和Kernel support for MISC binaries 选上

9
Networking support选项
Amateur  Radio support去掉。
wireless如不要无线也去掉,我就去掉了。
Networking options中如下:
IP: multicasting 群组广播,似乎与网格计算有关,仅在使用MBONE的时候才需要,去掉。
IP: advanced router 高级路由,如果想做一个路由器就选,不然去掉。
IP: kernel level autoconfiguration 在内核启动时自动配置ip地址/路由表等,需要从网络启动的无盘工作站才需要这个东西,可选可不选,我去掉了。
IP: TCP syncookie support 抵抗SYN flood攻击的好东西,要启用它必须同时启用/proc文件系统和"Sysctl support",然后在系统启动并挂载了/proc之后执行"echo 1 >/proc/sys/net/ipv4/tcp_syncookies"命令,我再虚拟机中用不着就去掉了。
802.1d Ethernet Bridging 选上。
剩下的默认都可以不改,视需要添加。

10

Device Drivers选项
Connector - unified userspace <-> kernelspace linker 统一的用户空间和内核空间连接器,工作在netlink socket协议的顶层.不确定可以不选。
Misc devices 杂项设备去掉。
ATA/ATAPI/MFM/RLL support 通常是IDE硬盘和ATAPI光驱.纯SCSI系统且不使用这些接口可以不选。
Macintosh device drivers去掉。
Network device support中去掉Ethernet(10000 Mbit)和Networlk console logging support。
Partition Types和Network File Systems我全去掉了,用不着。
input device support中
Event interface 去掉
Joysticks 游戏杆驱动去掉
Touchscreens 触摸屏驱动去掉
Miscellaneous devices 其他杂项驱动,一般选个PC喇叭即可,我全去掉了

Character devices中
Non-standard serial port support 非标准串口支持.这样的设备早就绝种了,去掉
Serial drivers 我全部去掉了,你要用串口就添加。
/dev/nvram support 直接存取主板上CMOS的接口,去掉。

HPET - High Precision Event Timer 高精度事件定时器 ,如果需要就选中,然后将下面的Allow mmap of HPET也选中,不需要就去掉吧
I2C support I2C是Philips极力推动的微控制应用中使用的低速串行总线协议,可用于监控电压/风扇转速/温度等.SMBus(系统管理总线)是I2C的子集.除硬件传感器外"Video For Linux"也需要该模块的支持。。。。反正我去掉了。
下面的多媒体设备,显卡设备,声卡选项没改,麻烦。
HID里的调试选项去掉。
剩下的不用改了,够精简了。

11
Firmware选项,全部去掉

12
File systems选项
默认的选上了ext3,视你的文件系统添加。
Dnotify去掉,老式的。
Inotify留下,新式的。
Quota support磁盘配额支持,限制某个用户或者某组用户的磁盘占用空间,Ext2/Ext3/Reiserfs都支持它,视你的需要选择,我没选
Kernel automounter version 4 support这个默认,不用改。
DOS/FAT/NT Filesystems中
Default iocharset for FAT 默认字符集,中文需求改成cp936
NTFS file system support选上。
NTFS write support 选上。
Network Fille Systems和Partition Types全去掉。
Native Language Support 选上simplified chinese。


13
Kernel hacking选项
搞开发的后面有basic checks的选项最好都选上。
另外Built-in kernel Debugger support(打上kdb补丁)和Complie the kernel with debug info驱动开发者必备,然后参考我的KDB一文将必要选项加上。

14
Security options选项
若有selinux,坚决去掉。其实为了追求效率我是全部都去掉了。。。。

15

Cryptographic options选项。默认选中了md5,sha,aes,des,可以不用改了。

16
Virtualzation选项和Library routines选项默认即可,不用改了。

17 最后是安装,

一键命令 make all modules_install install

其中 make all  包括  make  bzImage 和 make modules 两个命令

18 选择开机启动使用该内核

修改/etc/grub.conf 中 default值 如:我用的是2.6.30的内核 ,default=0

default=0
timeout=0
#splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Fedora (2.6.30)
        root (hd0,0)
        kernel /vmlinuz-2.6.30 ro root=UUID=e2f9313e-ec34-4a17-bc6d-89d34f44671e selinux=0 audit=0 nomodset console=ttyS0,115200
        initrd /initrd-2.6.30.img
title Fedora (2.6.27.5-117.fc10.i686)
        root (hd0,0)
        kernel /vmlinuz-2.6.27.5-117.fc10.i686 ro root=UUID=e2f9313e-ec34-4a17-bc6d-89d34f44671e selinux=0 audit=0 nomodset console=ttyS0,115200
        initrd /initrd-2.6.27.5-117.fc10.i686.img

注意: 不同系统使用内核是有要求的,高版本的系统使用低版本的内核时,在编译安装是都不会出现错误,但是启动时进不去系统。一般情况下编译内核要高于系统默认的内核版本。

阅读(3118) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~