实战linux内核精简

实战linux内核精简

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://debug-sai.blogbus.com/logs/47865842.html

本文参考了《Linux 2.6.19.x 内核编译配置选项简介》,谢谢原作者。
还有http://forum.ubuntu.org.cn/viewtopic.php?t=110461http://forum.ubuntu.org.cn/viewtopic.php?t=222228的作者,非常感谢你们。

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

1
sudo make defconfig
得到一个较精简的内核了,据说是linus的
然后以后的选项中,后面有EXPERIMENTAL的,如果不是特别提出我都去掉了。

 

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选项默认即可,不用改了。
编译完要创建init文件,sudo update-initramfs -c -k 2.6.28.sai,然后修改grub,重启即可

注意,在Vmware下以下选项必须选上,否则编译要出问题:
Device Drivers —>SCSI device support —> SCSI disk support
Device Drivers —>SCSI device support —>SCSI low-level drivers —> BusLogic SCSI support
Device Drivers —> Fusion MPT device support —> Fusion MPT (base ScsiHost) drivers和 Fusion MPT misc device (ioctl) driver(这个不确定)
Device Drivers —> USB support —> USB Mass Storage support
Device Drivers —> Networking support —>Ethernet (10 or 100Mbit) —> AMD PCnet32 PCI support
另 外,还有个非常需要注意的地方,就是不要在windows下解压源代码,然后拷贝到linux中,因为windows文件不区分大小写,解压时就会覆盖, 导致拷贝到linux下后文件不全,编译会出错,这个问题折磨了我很久很久,编译时老是郁闷怎么突然找不到文件了。。。。

from http://debug-sai.blogbus.com/logs/47865842.html

发表评论?

0 条评论。

发表评论