linux内核配置make menuconfig菜单详解.docx
《linux内核配置make menuconfig菜单详解.docx》由会员分享,可在线阅读,更多相关《linux内核配置make menuconfig菜单详解.docx(50页珍藏版)》请在冰点文库上搜索。
linux内核配置makemenuconfig菜单详解
linux内核配置makemenuconfig菜单详解
我们在linux内核裁剪过程中,进入内核所在目录,键入makemenuconfig就会看到一堆的配置菜单,它们具体代表什么含义呢?
我们该如何取舍呢?
这里把近期收集到的一些信息做一个总结。
1、Generalsetup
代码成熟度选项,它又有子项:
1.1、promptfordevelopmentand/orincompletecode/drivers
该选项是对那些还在测试阶段的代码,驱动模块等的支持。
一般应该选这个选项,除非你只是想使用LINUX中已经完全稳定的东西。
但这样有时对系统性能影响挺大。
1.2、Cross-compilertoolprefix
交叉编译工具前缀,例如:
Cross-compilertoolprefix值为:
(arm-linux-)
1.3、Localversion-appendtokernelrelease
内核显示的版本信息,填入64字符以内的字符串,你在这里填上的字符口串可以用uname-a命令看到。
1.4、 Automaticallyappendversioninformationtotheversionstring
自动在版本字符串后面添加版本信息,编译时需要有perl以及git仓库支持
1.5、Kernelcompressionmode(Gzip)--->
有四个选项,这个选项是说内核镜像要用的压缩模式,回车一下,可以看到gzip,bzip2,lzma,lxo,一般可以按默认的gzip,如果要用bzip2,lzma,lxo要先装上支持
1.6、Supportforpagingofanonymousmemory(swap)
使用交换分区或交换文件来做为虚拟内存,一定要选上。
1.7、SystemVIPC
表示系统的进程间通信InterProcessCommunication,它用于处理器在程序之间同步和交换信息,如果不选这项,很多程序运行不起来,必选。
1.8、POSIXMessageQueues
POSIX标准的消息队列,它同样是一种IPC。
建议你最好将它选上
1.9、BSDProcessAccounting
用户进程访问内核时将进程信息写入文件中。
通常主要包括进程的创建时间/创建者/内存占用等信息。
建议最好选上。
1.10、BSDProcessAccountingversion3fileformat
使用新的第三版文件格式,可以包含每个进程的PID和其父进程的PID,但是不兼容老版本的文件格式。
1.11、Exporttask/processstatisticsthroughnetlink(EXPERIMENTAL)
通过netlink接口向用户空间导出任务/进程的统计信息,与BSDProcessAccounting的不同之处在于这些统计信息在整个任务/进程生存期都是可用的
Enableper-taskdelayaccounting(EXPERIMENTAL)
在统计信息中包含进程等候系统资源(cpu,IO同步,内存交换等)所花费的时间
Enableextendedaccountingovertaskstats(EXPERIMENTAL)
在统计信息中包含扩展进程所花费的时间
1.12、Auditingsupport
审记支持,用于和内核的某些子模块同时工作,例如SecurityEnhancedLinux。
只有选择此项及它的子项,才能调用有关审记的系统调用。
1.13、Enablesystem-callauditingsupport
支持对系统调用的审计
1.14、IRQsubsystem --->
中断子系统
Supportsparseirqnumbering
<===支持稀有的中断编号,关闭
1.15、RCUSubsystem --->
非对称读写锁系统是一种高性能的kernel锁机制,适用于读多写少环境
RCUImplementation(Tree-basedhierarchicalRCU) --->
RCU实现机制Tree(X)Tree-basedhierarchicalRCU基本数按等级划分
EnabletracingforRCU
激活跟踪
(32)Tree-basedhierarchicalRCUfanoutvalue
基本数按等级划分分列值
Disabletree-basedhierarchicalRCUauto-balancing
1.16、<>Kernel.configsupport
这个选项允许.config文件(即编译LINUX时的配置文件)保存在内核当中
1.17、(17)Kernellogbuffersize(16=>64KB,17=>128KB)
1.18、[]ControlGroupsupport --->
cgroups支持,文档资料,cgroups主要作用是给进程分组,并可以动态调控进程组的CPU占用率。
比如A进程分到apple组,给予20%CPU占用率,E进程分easy组,给予50%CPU占用率,最高100%。
我目前没有此类应用场景,用到时会选择将其编译进去。
CPUbandwidthprovisioningforFAIR_GROUP_SCHED
此选项允许用户定义的CPU带宽速率(限制)在公平的组调度运行的任务。
组没有限制设置被认为是无约束和运行没有限制。
GroupschedulingforSCHED_RR/FIFO
此功能可以让您显式地分配真实的CPU带宽任务组。
1.19、-*-Namespacessupport --->
命名空间支持,允许服务器为不同的用户信息提供不同的用户名空间服务
[*] UTSnamespace
通用终端系统的命名空间。
它允许容器,比如Vservers利用UTS命名空间来为不同的服务器提供不同的UTS。
如果不清楚,选N。
[*] IPCnamespace
IPC命名空间,不确定可以不选
[*] Usernamespace(EXPERIMENTAL)
User命名空间,不确定可以不选
[*] PIDNamespaces
PID命名空间,不确定可以不选
[*] Networknamespace
1.20、Automaticprocessgroupscheduling 自动进程组调度
1.21、[]enabledeprecatedsysfsfeaturestosupportolduserspacetools
1.22、-*-Kernel->userspacerelaysupport(formerlyrelayfs)
在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口,我目前没有此类应用场景
1.23、 [*]InitialRAMfilesystemandRAMdisk(initramfs/initrd)support
用于在真正内核装载前,做一些操作(俗称两阶段启动),比如加载module,mount一些非root分区,提供灾难恢复shell环境等,资料,我是期望直接从kernelimage直接启动,所以没选它
?
1.24、Initramfssourcefile(s)
initrd已经被initramfs取代,如果你不明白这是什么意思,请保持空白
1.25、Optimizeforsize
这个选项将在GCC命令后用“-Os”代替“-O2″参数,这样可以得到更小的内核。
没必要选。
选上了有时会产生错误的二进制代码。
1.26、Enablefull-sizeddatastructuresforcore:
在内核中使用全尺寸的数据结构.禁用它将使得某些内核的数据结构减小以节约内存,但是将会降低性能。
1.27、Enablefutexsupport:
快速用户空间互斥体可以使线程串行化以避免竞态条件,也提高了响应速度.禁用它将导致内核不能正确的运行基于glibc的程序。
1.28、Enableeventpollsupport:
支持事件轮循的系统调用。
1.29、Usefullshmemfilesystem:
除非你在很少的内存且不使用交换内存时,才不要选择这项。
后面的这四项都是在编译时内存中的对齐方式,0表示
编译器的默认方式。
使用内存对齐能提高程序的运行速度,但是会增加程序对内存的使用量。
内核也是一组程序呀。
EnableVMeventcountersfor/proc/vmstat:
允许在/proc/vmstat中包含虚拟内存事件记数器。
[*]Disableheaprandomization
禁用随机heap(heap堆是一个应用层的概念,即堆对CPU是不可见的,它的实现方式有多种,可以由OS实现,也可以由运行库实现,如果你愿意,你也可以在一个栈中来实现一个堆)
1.30、ChooseSLABallocator(SLAB) --->
选择内存分配管理器(强烈推荐使用SLUB)
1.31、[]Configurestandardkernelfeatures(forsmallsystems) --->
这个选项可以让内核的基本选项和设置无效或者扭曲。
这是用于特定环境中的,它允许“非标准”内核。
你要是选它,你一定要明白自己在干什么。
这是为了编译某些特殊用途的内核使用的,例如引导盘系统。
配置标准的内核特性(为小型系统)
Enable16-bitUIDsystemcalls:
允许对UID系统调用进行过时的16-bit包装。
Sysctlsyscallsupport 几乎使用不到这一选项,不选它可以轻微使内核变小
Includeallsymbolsinkallsyms:
在kallsyms中包含内核知道的所有符号,内核将会增大300K。
Enablesupportforprintk:
允许内核向终端打印字符信息,在需要诊断内核为什么不能运行时选择。
BUG()support:
显示故障和失败条件(BUG和WARN),禁用它将可能导致隐含的错误被忽略。
EnableELFcoredumps:
内存转储支持,可以帮助调试ELF格式的程序。
1.32、[*]Profilingsupport
不选剖面支持,用一个工具来扫描和提供计算机的剖面图。
支持系统评测(对于大多数用户来说并不是必须的)
1.33、OProfilesystemprofiling
OProfile评测和性能监控工具
1.35、[] OProfilemultiplexingsupport(EXPERIMENTAL)
1.34、Kprobes
调试内核除非开发人员,否则不选
1.35、Optimizetracepointcallsites
1.36、GCOV-basedkernelprofiling
[]Enablegcov-basedkernelprofiling不选
2、Enableloadablemodulesupport
2.1Forcedmoduleloading
允许强制加载模块
2.2Moduleunloading
允许卸载已经加载的模块
2.3Forcedmoduleunloading
允许强制卸载正在使用中的模块(比较危险)这个选项允许你强行卸除模块,即使内核认为这不安全。
内核将会立即移除模块,而不管是否有人在使用它(用rmmod-f命令)。
这主要是针对开发者和冲动的用户提供的功能。
如果不清楚,选N。
2.4Moduleversioningsupport
有时候,你需要编译模块。
选这项会添加一些版本信息,来给编译的模块提供独立的特性,以使不同的内核在使用同一模块时区别于它原有的模块。
这有时可能会有点用。
如果不清楚,选N。
允许使用其他内核版本的模块(可能会出问题)
2.5Sourcechecksumforallmodules
为所有的模块校验源码,如果你不是自己编写内核模块就不需要它这个功能是为了防止你在编译模块时不小心更改了内核模块的源代码但忘记更改版本号而造成版本冲突。
如果不清楚,选N。
3、Enabletheblocklayer
块设备支持,使用硬盘/USB/SCSI设备者必选这选项使得块设备可以从内核移除。
如果不选,那么blockdev文件将不可用,一些文件系统比如ext3将不可用。
这个选项会禁止SCSI字符设备和USB储存设备,如果它们使用不同的块设备。
选Y,除非你知道你不需要挂载硬盘和其他类似的设备。
不过此项无可选项
3.1Supportforlarge(2TB+)blockdevicesandfiles
仅在使用大于2TB的块设备时需要
3.2BlocklayerSGsupportv4
通用scsi块设备第4版支持
3.3Blocklayerdataintegritysupport
块设备数据完整性支持
?
3.4Blocklayerbiothrottlingsupport
可用于限制设备的IO速度
3.5PartitionTypes
Advancedpartitionselection
如果你想要在linux上使用一个在其他的介质上运行着操作系统的硬盘时,选择Y,如果你不确定时可以选N
3.6IOSchedulers
IO调度器I/O是输入输出带宽控制,主要针对硬盘,是核心的必须的东西。
这里提供了三个IO调度器。
DeadlineI/Oscheduler
使用轮询的调度器,简洁小巧,提供了最小的读取延迟和尚佳的吞吐量,特别适合于读取较多的环境(比如数据库)DeadlineI/O调度器简单而又紧密,在性能上和抢先式调度器不相上下,在一些数据调入时工作得更好。
至于在单进程I/O磁盘调度上,它的工作方式几乎和抢先式调度器相同,因此也是一个好的选择。
CFQI/Oscheduler
使用QoS策略为所有任务分配等量的带宽,避免进程被饿死并实现了较低的延迟,可以认为是上述两种调度器的折中.适用于有大量进程的多用户系统CFQ调度器尝试为所有进程提供相同的带宽。
它将提供平等的工作环境,对于桌面系统很合适。
DefaultI/Oscheduler(CFQ)
默认IO调度器我这样理解上面三个IO调度器:
抢先式是传统的,它的原理是一有响应,就优先考虑调度。
如果你的硬盘此时在运行一项工作,它也会暂停下来先响应用户。
期限式则是:
所有的工作都有最终期限,在这之前必须完成。
当用户有响应时,它会根据自己的工作能否完成,来决定是否响应用户。
CFQ则是平均分配资源,不管你的响应多急,也不管它的工作量是多少,它都是平均分配,一视同仁的。
(*)Deadline
( )CFQ
( )No-op
4、Processortypeandfeatures(处理器类型及特点)
?
4.1DMAmemoryallocationsupport
该选项允许小于32位地址的设备使用前16MB的地址空间,如果不缺定的话,选Y
4.2Symmetricmulti-processingsupport
对称多处理器支持,如果你有多个CPU或者使用的是多核CPU就选上.此时"EnhancedRealTimeClockSupport"选项必须开启,"AdvancedPowerManagement"选项必须关闭如果你选N,内核将会在单个或者多个CPU的机器上运行,但是只会使用一个CPU。
如果你选Y,内核可以在很多(但不是所有)单CPU的机器上运行,在这样的机器,你选N会使内核运行得更快。
注意如果你选Y,然后在Processorfamily选项中选择“586〃or“Pentium”,内核将不能运行在486构架的机器上。
同样的,多CPU的运行于PPro构架上的内核也无法在Pentium系列的板上运行。
4.3EnableMPStable
MPS多处理器规范,不选
4.4SupportforbigSMPsystemswithmorethan8CPUs
默认情况下为不选
4.5Supportforextended(non-PC)x86platforms
如果选的话,你将可以选择支持如下32位X86的平台。
AMDElan,NUMAQ(IBM/Sequent),RDCR-321xSoC,SGI320/540(VisualWorkstation),STA2X11-based(e.g.Northville),Summit/EXA(IBMx440),UnisysES7000IA32series
MoorestownMIDdevices如果你有这样的系统,或者你想要构建一个这样的通用的分布式,选择Y,否则选择N
?
4.6intelMIDplatformsupport
MedfieldMIDplatform
4.7RDCR-321xSoC
嵌入式相关,不选
4.8Supportnon-standard32-bitSMParchitectures
非标准的32位SMP结构支持,不选
4.9Eurobraille/Irispoweroffmodule
来自urobraille的iris机器不支持APM和ACPI来适时关闭自己,此模块在内核中起到这一作用。
这是用于urobraille的iris机子,不确定的话,不选。
4.10Single-depthWCHANoutput
跟proc相关的最好不要关,选Y
?
4.11paravirt-opsdebugging
4.12Memtest
这一选项使内核增加一个“memtest”(内核测试)的参数,这将允许设置memtest。
如果你不知道如何回答这个问题,选择N
4.13Processorfamily(Pentium-Pro)处理器系列,请按照你实际使用的CPU选择这里是处理器的类型。
这里的信息主要目的是用来优化。
为了让内核能够在所有X86构架的CPU上运行(虽然不是最佳速度),在这你可以选386。
内核不会运行在比你选的构架还要老的机器上。
比如,你选了Pentium构架来优化内核,它将不能在486构架上运行。
如果你不清楚,选386。
()386()486()586/K5/5x86/6x86/6x86MX()Pentium-Classic()Pentium-MMX(系统默认选项)Pentium-Pro()Pentium-II/Celeron(pre-Coppermine)()Pentium-III/Celeron(Coppermine)/Pentium-IIIXeon()PentiumM()Pentium-4/Celeron(P4-based)/Pentium-4M/olderXeon()K6/K6-II/K6-III()Athlon/Duron/K7()Opteron/Athlon64/Hammer/K8()Crusoe()Efficeon()Winchip-C6()Winchip-2/Winchip-2A/Winchip-3()GeodeGX1()GeodeGX/LX()CyrixIII/VIA-C3()VIAC3-2(Nehemiah)()VIAC7()Core2/newerXeon()IntelAtom
?
4.14Genericx86support 这一选项针对x86系列的CPU使用更多的常规优化。
如果你在上面一项选的是i386、i586之类的才选这个通用x86支持,如果你的CPU能够在上述"Processorfamily"中找到就别选除了对上面你选择的X86CPU进行优化,它还对更多类型X86CPU的进行优化。
这将会使内核在其他的X86CPU上运行得更好。
这个选项提供了对X86系列CPU最大的兼容性,用来支持一些少见的x86构架的CPU。
如果你的CPU能够在上面的列表中找到,就里就不用选了。
4.15PentiumPromemoryorderingerrataworkaround
旧的PentiumPro多处理器系统有勘误能力,可能会导致在少数的情况下,违反x86的排序标准内存操作。
启用此选项将尝试解决一些(但不是全部)此类问题,但将以spinlock和内存为代价。
4.16HPETTimerSupport(HPET时钟支持)
允许内核使用HPET。
HPET是替代8254芯片的新一代定时器,i686及以上级别的主板都支持,可以安全的选上。
但是,HEPT只会在支持它的平台和BIOS上运行。
如果不支持,8254将会激活。
选N,将继续使用8254时钟。
4.17EnableDMIscanning
选择Y除非你已经证明当进入DMI时不影响你的配置。
PNPBIOS代码需要这一项的支持。
4.18(8)MaximumnumberofCPUs
支持的最大CPU数,每增加一个内核将增加8K体积
4.19SMT(Hyperth