实战linux内核精简
本文參考了《Linux 2.6.19.x 內(nèi)核編譯配置選項(xiàng)簡(jiǎn)介》,謝謝原作者。
還有http://forum.ubuntu.org.cn/viewtopic.php?t=110461和http://forum.ubuntu.org.cn/viewtopic.php?t=222228的作者,非常感謝你們。
2.6.28內(nèi)核虛擬機(jī)里測(cè)試通過(guò),開(kāi)機(jī)進(jìn)桌面的速度提高了大約一倍,編譯出來(lái)的體積因?yàn)槲乙鰞?nèi)核開(kāi)發(fā),所以加入了內(nèi)核調(diào)試信息等選項(xiàng),最后是3mb左右。
1
sudo make defconfig
得到一個(gè)較精簡(jiǎn)的內(nèi)核了,據(jù)說(shuō)是linus的
然后以后的選項(xiàng)中,后面有EXPERIMENTAL的,如果不是特別提出我都去掉了。
?
2
General setup選項(xiàng)
Prompt for development and/or incomplete code/drivers選上
Local version 加上自己的名字,如.sai
Support for paging of anonymous memory (swap) 使用交換分區(qū)或交換文件來(lái)做為虛擬內(nèi)存,一定要選上
System V IPC表示系統(tǒng)的進(jìn)程間通信Inter Process Communication,它用于處理器在程序之間同步和交換信息,如果不選這項(xiàng),很多程序運(yùn)行不起來(lái),也是必選的
Auditing support去掉,用不著審計(jì)
Control Group support 去掉
Group Scheduling CPU組調(diào)度,桌面用戶(hù)可以不選
Namespaces全去掉
Initial RAM和Optimize for size選上。
Activatie markers激活標(biāo)志,默認(rèn)選上的,不知道是什么,我沒(méi)改。
Kprobes提供了內(nèi)核編程時(shí)一種事務(wù)反射的機(jī)制,不做內(nèi)核編程的就去掉,我是選上了。
3
Loadable module support選項(xiàng)
默認(rèn)的就可以,我要做內(nèi)核開(kāi)發(fā),所以選上了Forced module unloading,以后可能有點(diǎn)用
4
Block layer選項(xiàng)
全部去掉,最后一個(gè)IO Schedulers是IO調(diào)度器
Anticipatory I/O scheduler
假設(shè)一個(gè)塊設(shè)備只有一個(gè)物理查找磁頭(例如一個(gè)單獨(dú)的SATA硬盤(pán)),將多個(gè)隨機(jī)的小寫(xiě)入流合并成一個(gè)大寫(xiě)入流,用寫(xiě)入延時(shí)換取最大的寫(xiě)入吞吐量.適用于大多數(shù)環(huán)境,特別是寫(xiě)入較多的環(huán)境(比如文件服務(wù)器)
Deadline I/O scheduler
使用輪詢(xún)的調(diào)度器,簡(jiǎn)潔小巧,提供了最小的讀取延遲和尚佳的吞吐量,特別適合于讀取較多的環(huán)境(比如數(shù)據(jù)庫(kù))
CFQ I/O scheduler
使用QoS策略為所有任務(wù)分配等量的帶寬,避免進(jìn)程被餓死并實(shí)現(xiàn)了較低的延遲,可以認(rèn)為是上述兩種調(diào)度器的折中.適用于有大量進(jìn)程的多用戶(hù)系統(tǒng)
Default I/O scheduler默認(rèn)IO調(diào)度器
我只留了CFQ I/O scheduler
5
Processor type and features選項(xiàng)
High Resolution Timer Suppor支持高頻率時(shí)間發(fā)生器,大多數(shù)個(gè)人PC并沒(méi)有這個(gè)必要,我去掉了
Symmetric multi-processing support多核cpu就選上
Enable MPS table是64位cpu的acpi支持,去掉
Single-depth WCHAN output不知道是什么,默認(rèn)選上我就沒(méi)動(dòng)
Processor family處理器系列,請(qǐng)按照你實(shí)際使用的CPU選擇,大部分情況選586
Generic x86 support通用x86支持,如果你的CPU能夠在上述"Processor family"中找到就別選,安全起見(jiàn),我還是選了。
HPET Timer Support替代8254芯片的新一代定時(shí)器,i686及以上級(jí)別的主板都支持,可以選上。
Maximum number of CPUs支持的最大CPU數(shù),每增加一個(gè)內(nèi)核將增加8K體積,我填了2
SMT (Hyperthreading) scheduler support支持Intel的超線(xiàn)程技術(shù),最好選上
Multi-core scheduler support針對(duì)多核CPU進(jìn)行調(diào)度策略?xún)?yōu)化,多核就選上吧
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系統(tǒng)中讓特權(quán)CPU訪(fǎng)問(wèn)x86的MSR寄存器,內(nèi)核開(kāi)發(fā)可能有用,不然你就去掉吧,反正我留下了。
/dev/cpu/*/cpuid - CPU information support能從/dev/cpu/x/cpuid獲得CPU的唯一標(biāo)識(shí)符(CPUID),內(nèi)核開(kāi)發(fā)可能有用,不然你就去掉吧,反正我留下了。
High Memory Support最高內(nèi)存支持,一般來(lái)說(shuō)沒(méi)幾個(gè)人的內(nèi)存大于4G就選它吧。
64 bit Memory and IO resources使用64位的內(nèi)存和IO資源去掉
Allocate 3rd-level pagetables from highmem3層頁(yè)表去掉,除非你的內(nèi)存很大很大。
Math emulation數(shù)學(xué)協(xié)處理器仿真,486DX以上的cpu就不要選它了,我沒(méi)選。
Timer frequency內(nèi)核時(shí)鐘頻率,桌面推薦"1000 HZ",服務(wù)器推薦"100 HZ"或"250 HZ"
x86 PAT support使用PAT(Performance Acceleration Technology)性能加速技術(shù)屬性來(lái)對(duì)頁(yè)面級(jí)緩存控制進(jìn)行設(shè)置,可選可不選。
EFI runtime service support除非你的系統(tǒng)支持EFI(一種可代替?zhèn)鹘y(tǒng)BIOS的技術(shù))否則不選,我沒(méi)選。
Enable seccomp to safely compute untrusted bytecode只有嵌入式系統(tǒng)可以不選,普通pc那就選上吧。
kexec system call提供kexec系統(tǒng)調(diào)用,可以不必重啟而切換到另一個(gè)內(nèi)核,如果需要就選擇,對(duì)大多數(shù)用戶(hù)來(lái)說(shuō)并不需要,去掉。
Build a relocatable kernel可重定位內(nèi)核,沒(méi)必要,可選可不選
6
Power management options選項(xiàng)
Power Management Debug Support 僅供調(diào)試使用,去掉
其他保持默認(rèn)
7
Bus options選項(xiàng)
保持默認(rèn)即可。
8
Executable file formats選項(xiàng)
Kernel support for ELF binaries和Kernel support for MISC binaries 選上
9
Networking support選項(xiàng)
Amateur? Radio support去掉。
wireless如不要無(wú)線(xiàn)也去掉,我就去掉了。
Networking options中如下:
IP: multicasting 群組廣播,似乎與網(wǎng)格計(jì)算有關(guān),僅在使用MBONE的時(shí)候才需要,去掉。
IP: advanced router 高級(jí)路由,如果想做一個(gè)路由器就選,不然去掉。
IP: kernel level autoconfiguration 在內(nèi)核啟動(dòng)時(shí)自動(dòng)配置ip地址/路由表等,需要從網(wǎng)絡(luò)啟動(dòng)的無(wú)盤(pán)工作站才需要這個(gè)東西,可選可不選,我去掉了。
IP: TCP syncookie support 抵抗SYN flood攻擊的好東西,要啟用它必須同時(shí)啟用/proc文件系統(tǒng)和"Sysctl support",然后在系統(tǒng)啟動(dòng)并掛載了/proc之后執(zhí)行"echo 1 >/proc/sys/net/ipv4/tcp_syncookies"命令,我再虛擬機(jī)中用不著就去掉了。
802.1d Ethernet Bridging 選上。
剩下的默認(rèn)都可以不改,視需要添加。
10
Device Drivers選項(xiàng)
Connector - unified userspace <-> kernelspace linker 統(tǒng)一的用戶(hù)空間和內(nèi)核空間連接器,工作在netlink socket協(xié)議的頂層.不確定可以不選。
Misc devices 雜項(xiàng)設(shè)備去掉。
ATA/ATAPI/MFM/RLL support 通常是IDE硬盤(pán)和ATAPI光驅(qū).純SCSI系統(tǒng)且不使用這些接口可以不選。
Macintosh device drivers去掉。
Network device support中去掉Ethernet(10000 Mbit)和Networlk console logging support。
Partition Types和Network File Systems我全去掉了,用不著。
input device support中
Event interface 去掉
Joysticks 游戲桿驅(qū)動(dòng)去掉
Touchscreens 觸摸屏驅(qū)動(dòng)去掉
Miscellaneous devices 其他雜項(xiàng)驅(qū)動(dòng),一般選個(gè)PC喇叭即可,我全去掉了
Character devices中
Non-standard serial port support 非標(biāo)準(zhǔn)串口支持.這樣的設(shè)備早就絕種了,去掉
Serial drivers 我全部去掉了,你要用串口就添加。
/dev/nvram support 直接存取主板上CMOS的接口,去掉。
HPET - High Precision Event Timer 高精度事件定時(shí)器 ,如果需要就選中,然后將下面的Allow mmap of HPET也選中,不需要就去掉吧
I2C support I2C是Philips極力推動(dòng)的微控制應(yīng)用中使用的低速串行總線(xiàn)協(xié)議,可用于監(jiān)控電壓/風(fēng)扇轉(zhuǎn)速/溫度等.SMBus(系統(tǒng)管理總線(xiàn))是I2C的子集.除硬件傳感器外"Video For Linux"也需要該模塊的支持。。。。反正我去掉了。
下面的多媒體設(shè)備,顯卡設(shè)備,聲卡選項(xiàng)沒(méi)改,麻煩。
HID里的調(diào)試選項(xiàng)去掉。
剩下的不用改了,夠精簡(jiǎn)了。
11
Firmware選項(xiàng),全部去掉
12
File systems選項(xiàng)
默認(rèn)的選上了ext3,視你的文件系統(tǒng)添加。
Dnotify去掉,老式的。
Inotify留下,新式的。
Quota support磁盤(pán)配額支持,限制某個(gè)用戶(hù)或者某組用戶(hù)的磁盤(pán)占用空間,Ext2/Ext3/Reiserfs都支持它,視你的需要選擇,我沒(méi)選
Kernel automounter version 4 support這個(gè)默認(rèn),不用改。
DOS/FAT/NT Filesystems中
Default iocharset for FAT 默認(rèn)字符集,中文需求改成cp936
NTFS file system support選上。
NTFS write support 選上。
Network Fille Systems和Partition Types全去掉。
Native Language Support 選上simplified chinese。
13
Kernel hacking選項(xiàng)
搞開(kāi)發(fā)的后面有basic checks的選項(xiàng)最好都選上。
另外Built-in kernel Debugger support(打上kdb補(bǔ)丁)和Complie the kernel with debug info驅(qū)動(dòng)開(kāi)發(fā)者必備,然后參考我的KDB一文將必要選項(xiàng)加上。
14
Security options選項(xiàng)
若有selinux,堅(jiān)決去掉。其實(shí)為了追求效率我是全部都去掉了。。。。
15
Cryptographic options選項(xiàng)。默認(rèn)選中了md5,sha,aes,des,可以不用改了。
?
16
Virtualzation選項(xiàng)和Library routines選項(xiàng)默認(rèn)即可,不用改了。
編譯完要?jiǎng)?chuàng)建init文件,sudo update-initramfs -c -k 2.6.28.sai,然后修改grub,重啟即可
注意,在Vmware下以下選項(xiàng)必須選上,否則編譯要出問(wèn)題:
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(這個(gè)不確定)
Device Drivers ---> USB support ---> USB Mass Storage support
Device Drivers ---> Networking support --->Ethernet (10 or 100Mbit) ---> AMD PCnet32 PCI support
另外,還有個(gè)非常需要注意的地方,就是不要在windows下解壓源代碼,然后拷貝到linux中,因?yàn)閣indows文件不區(qū)分大小寫(xiě),解壓時(shí)就會(huì)覆蓋,導(dǎo)致拷貝到linux下后文件不全,編譯會(huì)出錯(cuò),這個(gè)問(wèn)題折磨了我很久很久,編譯時(shí)老是郁悶怎么突然找不到文件了。。。。
?
轉(zhuǎn)自 http://debug-sai.blogbus.com/logs/47865842.html
?
?
?
?
ttylinux 別人精簡(jiǎn)好的。。。2011.3.31.
總結(jié)
以上是生活随笔為你收集整理的实战linux内核精简的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: BZOJ 3505: [Cqoi2014
- 下一篇: linux 其他常用命令