实战linux内核精简
本文參考了《Linux 2.6.19.x 內核編譯配置選項簡介》,謝謝原作者。
還有http://forum.ubuntu.org.cn/viewtopic.php?t=110461和http://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下后文件不全,編譯會出錯,這個問題折磨了我很久很久,編譯時老是郁悶怎么突然找不到文件了。。。。
?
轉自 http://debug-sai.blogbus.com/logs/47865842.html
?
?
?
?
ttylinux 別人精簡好的。。。2011.3.31.
總結
以上是生活随笔為你收集整理的实战linux内核精简的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BZOJ 3505: [Cqoi2014
- 下一篇: VUE中引入插件实现px转换rem