配置內核的命令是:
# make config 文本配置方式
# make menuconfig 菜單配置方式
# make xconfig 圖形界面配置方式
我們可以采用任何一個命令配置內核,一般推薦使用make menuconfig來配置內核。
一.代碼成熟度選項
Code maturity level options --->[*] Prompt for development and/or incomplete code/drivers[*] Select only drivers expected to compile cleanly
在內核中包含了一些不成熟的代碼和功能,如果我們想使用這些功能,想打開相關的配置選項,就必需打開這一選項。
二.通用設置選項
General setup --->() Local version - append to kernel release[*] Automatically append version information to the version string[*] Support for paging of anonymous memory (swap)[*] System V IPC[*] POSIX Message Queues[*] BSD Process Accounting[*] BSD Process Accounting version 3 file format[*] Sysctl support[ ] Auditing support[*] Support for hot-pluggable devices[*] Kernel Userspace Events[*] Kernel .config support[*] Enable access to .config through /proc/config.gz() Initramfs source file(s)[*] Configure standard kernel features (for small systems) ---> --- Configure standard kernel features (for small systems) [ ] Load all symbols for debugging/kksymoops [ ] Do an extra kallsyms pass [ ] Enable support for prinlk [ ] BUG()support [ ] Enable full-sinzed data structures for core [*] Enable futex support [*] Enable eventpoll support [*] Optimize for size [*] Use full shmem filesystem (0) Function alignment (0) Label alignment (0) Loop alignment (0) Jump alignment
Local version - append to kernel release:這裡填入的是64字符以內的字符串,你在這裡填上的字符口串可以用uname -a命令看到。
Support for paging of anonymous memory (swap):這是使用交換分區或者交換文件來做為虛擬內存的,當然要選上了。
System V IPC:表示系統5的Inter Process Communication,它用於處理器在程序之間同步和交換信息,如果不選這項,很多程序運行不起來的。
POSIX Message Queues:這是POSIX的消息隊列,它同樣是一種IPC。建議你最好將它選上。
BSD Process Accounting:這是充許用戶進程訪問內核將賬戶信息寫入文件中的。這通常被認為是個好主意,建議你最好將它選上。
Sysctl support:這個選項能不重新編譯內核修改內核的某些參數和變量,如果你也選擇了支持/proc,將能從/proc/sys存取可以影響內核的參數或變量。建議你最好將它選上。
Auditing support:審記支持,用於和內核的某些子模塊同時工作,例如SELinux。只有選擇此項及它的子項,才能調用有關審記的系統調用。
Support for hot-pluggable devices:是否支持熱插拔的選項,肯定要選上。不然USB、PCMCIA等這些設備都用不了。
Kernel Userspace Events:內核中分為系統區和用戶區,這裡系統區和用戶區進行通訊的一種方式,選上。
Kernel .config support:將.config配置信息保存在內核中,選上它及它的子項使得其它用戶能從/proc中得到內核的配置。
Configure standard kernel features (for small systems):這是為了編譯某些特殊的內核使用的,通常你可以不選擇這一選項,你也不用對它下面的子項操心了。
Load all symbols for debugging/kksymoops:是否裝載所有的調試符號表信息,如果你不需要對內核調試,不需要選擇此項。
Enable futex support:不選這個內核不一定能正確的運行使用glibc的程序,當然要選上。
Enable eventpoll support:不選這個內核將不支持事件輪循的系統調用,最好選上。
Optimize for size:這個選項使gcc使用-Os的參數而不是-O2的參數來優化編譯,以獲得更小尺寸的內核,建議選上。
Use full shmem filesystem:除非你在很少的內存且不使用交換內存時,才不要選擇這項。
後面的這四項都是在編譯時內存中的對齊方式,0表示編譯器的默認方式。使用內存對齊能提高程序的運行速度,但是會增加程序對內存的使用量。
三.可加載模塊
Loadable module support --->[*] Enable loadable module support[*] Module unloading[ ] Forced module unloading[*] Module versioning support (EXPERIMENTAL)[ ] Source checksum for all modules[*] Automatic kernel module loading
Enable loadable module support,很多人喜歡將全部功能、硬件支持一股腦的編進內核,而不是使用模塊的方式。這樣做非常不好(個人覺得)。其實我也做過嵌入式的開發,在針對特定硬件的平台下盡可能將內核編小,將始終是支持模塊加載的。例如我們開發的防火牆就是做為內核的模塊被加載的。使用模塊支持,你的系統能具有更好的可擴充性。還有一個原因就是自己編寫的功能模塊、設備驅動模塊(假設編寫的質量不高)以模塊方式工作引起Kernel Panic的機率要遠遠低於不支持模塊全部編進內核的方式。講了這麼多,終於可以理直氣壯的選上這一功能了
Module unloading,不選這個功能,加載的模塊就不能卸載。沒什麼需要多解釋的,建議最好選上。
Forced module unloading,這個選項能強行卸載模塊,即使內核認為這樣並不安全,也就是說你可以把正在使用中的模快卸載掉。如果你不是內核開發人員或者骨灰級的玩家,不要選擇這個選項。
Module versioning support (EXPERIMENTAL),這個功能可以讓你使用其它版本的內核模塊,由於我自己寫一些模塊,所以我會用到這個選項,因為內核更新太快了,我的頭文件更新根本趕不上內核的更新。還有,雖然我在Gentoo下開發,但實際真實環境用的卻是從kernel.org下載的內核。雖然我選擇了這個選項,不過建議你不要選擇這個選項。
Source checksum for all modules,這個功能是為了防止更改了內核模塊的代碼但忘記更改版本號而造成版本沖突。我估計現在沒有哪家公司在開發中還沒使用版本控制工具,所以不需要這項了。如果你不是自己寫內核模塊,那就更不需要這一選項了。
Automatic kernel module loading,這個選項能讓內核自動的加載部份模塊,建議你最好選上。舉個例子說明一下,如模塊eth1394依賴於模塊ieee1394。如果選擇了這個選項,可以直接加載模塊eth1394;如果沒有選擇這個選項,必需先加載模塊ieee1394,再加載模塊eth1394,否則將出錯。
四.總線支持配置
Bus support ---> PCCARD (PCMCIA/CardBus) support ---> [ ] Enable PCCARD debugging [ ] 16-bit PCMCIA support (NEW) [ ] Load CIS updates from userspace (EXPERIMENTAL)(NEW) [ ] PCMCIA control ioctl (obsolete) (NEW) --- PC-card bridges
PCCard (PCMCIA/CardBus) support,你的計算機是否支持PCMCIA卡
Enable PCCARD debugging,通常不需要選擇調試PCMCIA設備,除非你是設備驅動的開發人員。
16-bit PCMCIA support,16位的PCMCIA總線支持。
五.支持的可執行文件格式
Userspace binary formats -à[*] Kernel support for ELF binaries[*] Kernel support for a.out and ECOFF binaries[*] Kernel support for MISC binaries[*] RISC OS personality
Kernel support for ELF binaries,ELF是開放平台下最常用的二進制文件,它支持不同的硬件平台。
Kernel support for a.out and ECOFF binaries,這是早期UNIX系統的可執行文件格式,目前已經被ELF格式取代。
Kernel support for MISC binaries,此選項允許插入二進制的封裝層到內核中,當使用Java、.NET、Python、Lisp等語言編寫的程序時非常有用。
六,文件系統
File systems <*> Second extended fs support [*] Ext2 extended attributes [*] Ext2 POSIX Access Control Lists [*] Ext2 Security Labels <*> Ext3 journalling file system support [*] Ext3 extended attributes [*] Ext3 POSIX Access Control Lists [*] Ext3 Security Labels [ ] JBD (ext3) debugging support <*> Reiserfs support [ ] Enable reiserfs debug mode [ ] Stats in /proc/fs/reiserfs [*] ReiserFS extended attributes [*] ReiserFS POSIX Access Control Lists [*] ReiserFS Security Labels JFS filesystem support [*] JFS POSIX Access Control Lists [ ] JFS debugging [ ] JFS statistics XFS filesystem support [*] Realtime support (EXPERIMENTAL) [*] Quota support [*] Security Label support [*] POSIX ACL support < > Minix fs support < > ROM file system support [*] Quota support < > Old quota format support Quota format v2 support [*] Dnotify support < > Kernel automounter support < > Kernel automounter version 4 support (also supports v3) CD-ROM/DVD Filesystems ---> DOS/FAT/NT Filesystems ---> Pseudo filesystems ---> Miscellaneous filesystems ---> Network File Systems ---> Partition Types ---> Native Language Support --->
Second extended fs support,標准的Linux文件系統,建議將這種文件系統編譯進內核。
Ext2 extended attributes,Ext2文件系統的結點名稱、屬性的擴展支持。
Ext2 POSIX Access Control Lists,POSIX系統的訪問權限列表支持。也就是 Owner/Group/Others的Read/Write/Execute權限。請參考Unix標准文件系統權限。
Ext2 Security Labels,擴展的安全標簽,例如SElinux之類的安全系統會使用到這樣的擴展安全屬性。
Ext3 journalling file system support,如果你熟悉Redhat Linux,你一定會習慣Ext3文件系統。
Ext3 extended attributes,Ext3文件系統的結點名稱、屬性的擴展支持。
Ext3 POSIX Access Control Lists,POSIX系統的訪問權限列表支持。
Ext3 Security Labels,擴展的安全標簽支持。
JBD (ext3) debugging support,Ext3的調試。除非你是文件系統的開發者,否則不要選上這一項。
Reiserfs support,如果你熟悉Suse Linux,你一定會習慣Reiserfs文件系統
Stats in /proc/fs/reiserfs,在/proc/fs/reiserfs文件中顯示Reiserfs文件系統的狀態。一般來說不需要選擇這一項。
ReiserFS extended attributes,Reiserfs,文件系統的結點名稱、屬性的擴展支持。
ReiserFS POSIX Access Control Lists,PO
SIX系統的訪問權限列表支持。
ReiserFS Security Labels,擴展的安全標簽支持。
JFS filesystem support,JFS是IBM公司設計用於AIX系統上的文件系統。後來這一文件系統也能應用於Linux系統。
JFS POSIX Access Control Lists,POSIX系統的訪問權限列表支持。
JFS debugging,JFS的調試。除非你是文件系統的開發者,否則不要選上這一項。
JFS statistics,在/proc/fs/jfs文件中顯示Reiserfs文件系統的狀態。一般來說不需要選擇這一項。
XFS filesystem support,XFS是SGI公司為其圖形工作站設計的一種文件系統,後來這一文件系統也能應用於Linux系統。
Realtime support (EXPERIMENTAL),實時卷的支持,能大幅提高大文件的讀寫速度。不過並不太安全,建議暫時不要選擇這一選項。
Quota support,XFS文件系統的配額支持。
Security Label support,擴展的安全標簽支持。
POSIX ACL support,POSIX系統的訪問權限列表支持。
Minix fs support,Minix可能是最早的Linux系統所使用的文件系統。後來被Ext2文件系統所取代。
ROM file system support,內存文件系統的支持。除非你是嵌入式系統的開發者,明確知道你要干什麼,否則不要選這一項。
Quota support,配額支持。也就是說限制某個用戶或者某組用戶的磁盤占用空間。
Old quota format support,舊版本的配額支持。
Quota format v2 support,新版本(第二版)的配額支持。
Dnotify support,基於目錄的文件變化的通知機制。
Kernel automounter support,內核自動加載遠程文件系統的支持。
Kernel automounter version 4 support (also supports v3),新的(第四版)的內核自動加載遠程文件系統的支持,也支持第三版