linux内核编译 menuconfig详解

来源:互联网 发布:看完就毁软件 编辑:程序博客网 时间:2024/05/21 22:54

内核版本:2.6.32

根据版本不同可能配置文件也稍微不同。

[*]Prompt for development and/or incomplete code/drivers 
显示尚在开发中或尚未完成的代码与驱动.你应该选择它,因为有许多设备可能必需选择这个选项才能进行配置,实际上它是安全的。这个选项同样会让一些老的驱动的可用。如果你选了Y,你将会得到更多的阿尔法版本的驱动和代码的配置菜单。  
()Local version - append to kernel release 
在内核版本后面加上自定义的版本字符串(小于64字符),可以用"uname -a"命令看到  
[ ]Automatically append version information to the version string 自动生成版本信息。这个选项会自动探测你的内核并且生成相应的版本,使之不会和原先的重复。这需要Perl的支持。由于在编译的命令make-kpkg 中我们会加入- – append-to-version 选项来生成自定义版本,所以这里选N。  
Kernel compression mode (Gzip) 内核压缩模式选baip2 
gzip用于UNIX系统的文件压缩。后缀为.gz的文件。现今已经成为Internet 上使用非常普遍的一种数据压缩格式,或者说一种文件格式。HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。  
bzip2是一个基于Burrows-Wheeler 变换的无损压缩软件,压缩效果比传统的LZ77/LZ78压缩算法来得好。它是一款免费软件。bzip2能够进行高质量的数据压缩。它利用先进的压缩技术,能够把普通的数据文件压缩10%至15%,压缩的速度和解压的效率都非常高!支持现在大多数压缩格式,包括tar、gzip 等等。  
lzma是一个Deflate和LZ77算法改良和优化后的压缩算法,开发者是Igor Pavlov,2001年被首次应用于7-Zip压缩工具中,是 2001年以来得到发展的一个数据压缩算法。它使用类似于 LZ77 的字典编码机制,在一般的情况  
[*] Support for paging of anonymous memory (swap) 
将使你的内核支持虚拟内存。这个虚拟内存在LINUX中就是SWAP分区。除非你不想要SWAP分区,否则这里必选Y。  
[*] System V IPC  
System V进程间通信(IPC)支持,于处理器在程序之间同步和交换信息,如果不选这项,很多程序运行不起来,特别地,你想在LINUX下运行 DOS仿真程序,你必须要选Y。  
[*] POSIX Message Queues 
POSIX消息队列,这是POSIX IPC中的一部分。建议你最好将它选上POSIX 表示可移植操作系统接口  
[*] BSD Process Accounting 
这是允许用户进程访问内核,将账户信息写入文件中。这通常被认为是个好主意,建议你最好将它选上。将进程的统计信息写入文件的用户级系统调用,主要包括进程的创建时间/创建者/内存占用等信息。

用该数据的CPU都退出对共享数据的操作。  RCU Implementation (Tree-based hierarchical RCU)  ---> RCU 实现机制 
(X) Tree-based hierarchical RCU 基本数按等级划分  
[ ] Enable tracing for RCU 激活跟踪  
(32) Tree-based hierarchical RCU fanout value  基本数按等级划分分列值  
[ ] Disable tree-based hierarchical RCU auto-balancing   

 < > Kernel .config support 
这个选项允许.config文件(即编译LINUX时的配置文件)保存在内核当中。它提供正在运行中的或者还在硬盘中的内核的相关配置选项。可以通过内核镜像文件 kernel image file 用命令 script scripts/extract-ikconfig 来提取出来,作为当前内核重编译或者另一个内核编译的参考。如果你的内核在运行中,可以通过/proc/config.gz文件来读取。下一个选项提供这项支持。 
看起来好像是一个不错的功能,可以把编译时的 .config文件保存在内核中,以供今后参考调用。用来重编译和编译其他的内核的时候可以用上。你是一个编译内核的狂人的话,这项要选上 
[ ]   Enable access to .config through /proc/config.gz (NEW) 
上一项的子项,可 以通过/proc/config.gz 访问当前内核的.config 。新功能,上一项选的话这个就选上吧。  
(18) Kernel log buffer size (16 => 64KB, 17 => 128KB)      
内核日志缓存的大小,12 => 4 KB,13 => 8 KB,14 => 16 KB单处理器,15 => 32 KB多处理器,16 => 64 KB for x86 NUMAQ or IA-64,17 => 128 KB for S/390  
[*] Control Group support  --->      
cgroup支持,如cpusets那样来使用cgroup子 系统进程(不确定可以不选) [ ]   Example debug cgroup subsystemcgroup 子系统调试例子  
[*]   Namespace cgroup subsystem cgroup 子系统命名空间  
[*]   Freezer cgroup subsystem  [*]   Cpuset support 
只有含有大量CPU(大于16个)的SMP系统或NUMA(非一致内存访问)系统才需要它 [*]     Include legacy /proc//cpuset file  [*]   Simple CPU accounting cgroup subsystem 简单cgroup子系统cpu所花费的时间 
[ ]     Memory Resource Controller for Control Groups cgroup内存资源控制器  
[ ] enable deprecated sysfs features which may confuse old userspce tools 在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口 -*- Kernel->user space relay support (formerly relayfs) 
内核系统区和用户区进行传递通讯的支持。这个选项在特定的文 件系统中提供数据传递接口支持,它可以提供从内核空间到用户空间的大批量的数据传递工具和设施。如果不清楚,选N。 
-*- Namespaces support 
命名空间支持,允许服务器为不同的用户信息提供不 同的用户名空间服务  [*]   UTS namespace 
通用终端系统的命名空间。它允许容器,比如Vservers利用UTS命名空间来为不同的服务器提供不同 的UTS。如果不清楚,选N。 [*]   IPC namespace  
IPC命名空间,不确定可以不选 
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) suppor 
初始RAM的文件和RAM磁盘( initramfs /initrd)支持(如果要采用initrd启动则要选择,否则可以不选) 
()    Initramfs source file(s) 
initrd已经被initramfs取代,如果你不明白这是什么 意思,请保持空白  [*] Optimize for size  
这个选项将在GCC命令后用 “-Os” 代替 “-O2″参数,这样可以得到更小的内核。没必要选。一个编译好的内核才7-10多M,大家不会少这么点空间吧。选上了可能会出一些问题。最好不选。有时会产生错误的二进制代码。

[*] Kprobes 
调试内核除非开发人员,否则不选 GCOV-based kernel profiling  ---> 
[ ] Enable gcov-based kernel profiling  [ ] Slow work debugging through debugfs  
[*] Enable loadable module support  ---> 
打开可加载模块支持,如果打开它则必须通过"make modules_install"把内核模块安装在/lib/modules/中这个选项可以让你的内核支持模块,模块是什么呢?模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块,否则pport v4 通用scsi块设备第4版支持  
[ ]   Block layer data integrity support 块设备数据完整性支持  IO Schedulers  ---> 
IO调度器I/O是输入输出带宽控制,主要针对硬盘,是核心的必須的东西。这里提供了三个IO调度器。 
<*> Anticipatory I/O scheduler  
使用于大多数环境假设一个块设备只有一个物理查找磁头(例如一个单独的SATA硬盘),将多个随机的小写入流合并成一个大写入流,用写入延时换取最大的写入吞吐量.适用于大多数环境,特别是写入较多的环境(比如文件服务器)抢先式 I/O 调度方式是默认的磁盘调度方式。它对于大多数环境通常是比较好的选择。但是它和Deadline I/O 调度器相比有点大和复杂,它有时在数据调入时会比较慢。  <*> Deadline I/O scheduler 
使用轮询的调度器,简洁小巧,提供了最小的读取延迟和尚佳的吞吐量,特别适合于读取较多的环境(比如数据库)Deadline I/O调度器简单而又紧密,在性能上和抢先式调度器不相上下,在一些数据调入时工作得更好。至于在单进程I/O磁盘调度上,它的工作方式几乎和抢先式调度器相同,因此也是一个好的选择。

你有多个CPU或者使用的是多核CPU就选上,此时"Enhanced RealTime Clock Support"选项必须开启,"Advanced Power Management"选项必须关闭。如果你选N,内核将会在单个或者多个CPU的机器上运行,但是只会使用一个CPU。如果你选Y,内核可以在很多(但不是所有)单CPU的机器上运行,在这样的机器,你选N会使内核运行得更快。注意如果你选Y,然后在Processor family选项中选择“586″ or “Pentium” ,内核将不能运行在486构架的机器上。同样的,多CPU的运行于PPro构架上的内核也无法在 Pentium 系列的板上运行。 [*] Support sparse irq numbering不选 支持稀有的中断编号 
[*] Enable MPS table不选 mps多处理器规范  
[ ] Support for big SMP systems with more than 8 CPUs      
[*] Support for extended (non-PC) x86 platforms 不选 支持非pc  
[*] Single-depth WCHAN output 编译选项  
[ ] Paravirtualized guest support  --->  虚拟化客户端支持 
[ ]   VMI Guest support (DEPRECATED) (NEW) VMware ESX server客户端  
[ ]   KVM paravirtualized clock (NEW)

nchip-2A/Winchip-3  ( ) GeodeGX1  ( ) Geode GX/LX  
( ) CyrixIII/VIA-C3  ( ) VIA C3-2 (Nehemiah)  ( ) VIA C7   
( ) Core 2/newer Xeon  ( ) Intel Atom  
[*] Generic x86 support不选 
这一选项针对x86系列的CPU使用更多的常规优化。如果你在上面一项选的是i386、i586之类的才选这个通用x86支持,如果你的CPU能够在上述"Processor family"中找到就别选。

el Preemption (Desktop))  ---│> 内核抢占模式一些优先级很高的程序可以先让一些低优先级的程序执行,即使这些程序是在核心态下执行。从而减少内核潜伏期,提高系统的响应。当然在一些特殊 的点的内核是不可抢先的,比如内核中的调度程序自身在执行时就是不可被抢先的。这个特性可以提高桌面系统、实时系统的性能。 
( ) No Forced Preemption (Server)  
适合服务器环境的禁止内核抢占这是传统的LINUX抢先式模型,针对于高吞吐量设计。它同样在很多时候会提供很好的响应,但是也可能会有较长的延迟。如果你是建立服务器或者用于科学运算,选这项,或者你想要最大化内核的原始运算能力,而不理会调度上的延迟。  (X) Voluntary Kernel Preemption (Desktop) 
适合普通桌面环境的自愿内核抢占这个选项通过向内核添加更多的“清晰抢先点”来减少内核延迟。这些新的抢先点以降低吞吐量的代价,来降低内核的最大延迟,提供更快的应用程序响应。这通过允许低优先级的进程自动抢先来响应事件,即使进程在内核中进行系统调用。这使得应用程序运行得更“流畅”,即使系统已经是高负荷运转。如果你是为桌面系统编译内核,选这项。  
( ) Preemptible Kernel (Low-Latency Desktop) 
适合运行实时程序的主动内核抢占这个选项通过使所有内核代码(非致命部分)编译为“可抢先”来降低内核延迟。这通过允许低优先级进程进行强制抢先来响应事件,即使这些进程正在进行系统调用或者未达到正常的“抢先点”。这使得应用程序运行得更加“流畅”即使系统已 经是高负荷运转。代价是吞吐量降低,内核运行开销增大。选这项如果你是为桌面或者嵌入式系统编译内核,需要非常低的延迟。如果你要最快的响应,选第三项。我认为万物是平衡的,低延迟意味着系统运行不稳定,因为过多来响应用户的要求,所以我选第二个。 

crocode patch loading support  [*]   AMD microcode patch loading support  
<*> /dev/cpu/*/msr - Model-specific register support 
是否打开CPU特殊功能寄存器的功能。这个选项桌面用户一般用不到,它主要用在Intel的嵌入式CPU中的,这个寄存器的作用也依赖与不同的CPU类型 而有所不同,一般可以用来改变一些CPU原有物理结构的用途,但不同的CPU用途差别也很大。在多cpu系统中让特权CPU访问x86的MSR寄存器  
<*> /dev/cpu/*/cpuid - CPU information support 
是否打开记录CPU相关信息功能。这会在/dev/cpu中建立一系列的设备文件,用以让过程去访问指定的CPU。能从/dev/cpu/x/cpuid获得CPU的唯一标识符(CPUID)< > /sys/kernel/debug/x86/cpu/* - CPU Debug support  
High Memory Support (4GB)  ---> 
LINUX能够在X86系统中使用64GB的物理内存。但是,32位地址的X86处理器只能支持到4GB大小的内存。这意味着,如果你有大于4GB的物理内存,并非都能被内核“永久映射”。这些非永久映射内存就称为“高阶内存”。如果你编译的内核永远都不会运行在高于1G内存的机器上,选OFF(默认选项,适合大多数人)。这将会产生一个“3GB/1GB”的内存空间划分,3GB 虚拟内存被内核映射以便每个处理器能够“看到”3GB的虚拟内存空间,这样仍of RAM on AMI/Phoenix BIOSen  
[ ] Math emulation 不选 
数学协处理器仿真,486DX以上的cpu就不要选它了  
[*] MTRR (Memory Type Range Register) support 
内存类型区域寄存器。在 Intel P6 系列处理器(Pentium Pro, Pentium II 和更新的)上,MTRR将会用来规定和控制处理器访问某段内存区域的策略。如果你在PCI或者AGP总线上有VGA卡,这将非常有用。可以提升图像的传送速度2.5倍以上。选Y,会生成文件/proc/mtrr,它可以用来操纵 你的处理器的MTRR。典型地,X server 会用到。这段代码有着通用的接口,其他CPU的寄存器同样能够使用该功能。Cyrix 6×86, 6×86MX和 M II处理器有ARR ,它和 MTRR有着类似的功能。AMD K6-2/ K6-3有两个MTRR, Centaur C6有8个MCR允许复合写入。所有这些处理器都支持这段代码,你可以选Y如果你有以上处理器。选Y同样可以修正SMP BIOS的问题,它仅为第一个CPU提供MTRR,而不为其他的提供。这会导致各种各样的问题,所以选Y是明智的。你可以安全地选Y,即使你的机器没有MTRR。这会给内核增加9KB。打开它可以提升PCI/AGP总线上的显卡2倍以上的速度,并且可以修正某些BIOS错误 
[ ]   MTRR cleanup support 
MTRR清理(2.6.27内核新增功能,不确定可以不选)  [*] EFI runtime service support不选 
EFI启动支持这里允许内核在EFI平台上使用储存于EFI固件中的系统设置启动。这也允许内核在运行时使用EFI的相关服务。这个选项只在有EFI固件的系统上有用,它会使内核增加8KB。另外,你必须使用最新的ELILO 登录器才能使内核采用EFI的固件设置来启动(GRUB和LILO完全不知道EFI是什么东西)。即使你没有EFI,却选了这个选项,内核同样可以启动。大家应该用的是GRUB,所以选上这个也没什么用。除非你的系统支持EFI(一种可代替传统BIOS的技术)否则不选  
[*] Enable seccomp to safely compute untrusted bytecode 选 只有嵌入式系统可以不选  
[ ] Enable -fstack-protector buffer overflow detection (EXPERIMEN│  
Timer frequency (1000 HZ)  --->内核时钟频率 桌面1000 服务器100或250 
允许设置时钟频率。这是用户定义的时钟中断频率 100HZ-1000 HZ ,不过 100 HZ 对服务器和NUMA系统更合适,它们不需要很快速的响应用户的要求,因为时钟中断会导致总线争用和缓冲打回。注意在SMP环境中,时钟中断由变量 NR_CPUS * Hz定义在每个CPU产生。其实和前面的抢先式进程差不多,就是多少频率来响应用户要求。我选了250HZ的。要快点的可以选1000HZ的。但是还是那句话,一切是平衡的。机器过 快响应你,它自己的活就不知道做得好不好了。 ( ) 100 HZ 100 HZ是传统的对服务器、SMP 和 NUMA的系统选项。这些系统有比较多的处理器,可以在中断较集中的时候分担中断  ( ) 250 HZ 
250 HZ对服务器是一个好的折衷的选项,它同样在SMP 和 NUMA 系统上体现出良好的反应速度。  
( ) 300 HZ  (X) 1000 HZ 
1000 HZ对于桌面和其他需要快速事件反应的系统是非常棒的。  [*] kexec system call不选 
kexec 系统调用。kexec是一个用来关闭你当前内核,然后开启另一个内核的系统调用。它和重启很像,但是它不访问系统固件。由于和重启很像,你可以启动任何内核,不仅仅 是LINUX。kexec这个名字是从 exec 系统调用来的。它只是一个进程,可以确定硬件是否正确关闭,Linus本人都没话说,估计是受害不浅。我们当然不能上当,选N!提供kexec系统调用,可以不必重启而切换到另一个内核,如果需要就选择,对大多数用户来说并不需要  
[ ] kexec jump (EXPERIMENTAL)不选 
kexec跳转,如果你需要用kexec来启动内核就选择吧  
[*] Build a relocatable kernel不选 
建立一个移动的内核,除非特殊要求否则只是增大内核大小而已  
(0x1000000) Alignment value to which kernel should be aligned 内核编译、运行时的物理地址匹配,不要更改该值除非你知道你在干嘛  
-*- Support for hot-pluggable CPUs

对SMP休眠和热插拔CPU提供支持  
[ ] Compat VDSO support不选 
如果Glibc版本大于等于2.3.3就不选,否则就选上,目前的版本基本上都大于2.3.3 如果你运行的是最新的glibc(GNU C函数库)版本( 2.3.3 或更新),选N,这样可以移除高阶的VDSO 映射,使用随机的 VDSO。  
[ ] Built-in kernel command line

0 0
原创粉丝点击