linux内核编译 menuconfig详解.docx
- 文档编号:23393431
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:18
- 大小:31.51KB
linux内核编译 menuconfig详解.docx
《linux内核编译 menuconfig详解.docx》由会员分享,可在线阅读,更多相关《linux内核编译 menuconfig详解.docx(18页珍藏版)》请在冰豆网上搜索。
linux内核编译menuconfig详解
内核版本2.6.32
[*]Promptfordevelopmentand/orincompletecode/drivers
显示尚在开发中或尚未完成的代码与驱动.你应该选择它,因为有许多设备可能必需选择这个选项才能进行配置,实际上它是安全的。
这个选项同样会让一些老的驱动的可用。
如果你选了Y,你将会得到更多的阿尔法版本的驱动和代码的配置菜单。
()Localversion-appendtokernelrelease
在内核版本后面加上自定义的版本字符串(小于64字符),可以用"uname-a"命令看到
[]Automaticallyappendversioninformationtotheversionstring
自动生成版本信息。
这个选项会自动探测你的内核并且生成相应的版本,使之不会和原先的重复。
这需要Perl的支持。
由于在编译的命令make-kpkg中我们会加入-–append-to-version选项来生成自定义版本,所以这里选N。
Kernelcompressionmode(Gzip)
内核压缩模式选baip2
gzip用于UNIX系统的文件压缩。
后缀为.gz的文件。
现今已经成为Internet上使用非常普遍的一种数据压缩格式,或者说一种文件格式。
HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。
大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。
bzip2是一个基于Burrows-Wheeler变换的无损压缩软件,压缩效果比传统的LZ77/LZ78压缩算法来得好。
它是一款免费软件。
bzip2能够进行高质量的数据压缩。
它利用先进的压缩技术,能够把普通的数据文件压缩10%至15%,压缩的速度和解压的效率都非常高!
支持现在大多数压缩格式,包括tar、gzip等等。
lzma是一个Deflate和LZ77算法改良和优化后的压缩算法,开发者是IgorPavlov,2001年被首次应用于7-Zip压缩工具中,是2001年以来得到发展的一个数据压缩算法。
它使用类似于LZ77的字典编码机制,在一般的情况
[*]Supportforpagingofanonymousmemory(swap)
将使你的内核支持虚拟内存。
这个虚拟内存在LINUX中就是SWAP分区。
除非你不想要SWAP分区,否则这里必选Y。
[*]SystemVIPC
SystemV进程间通信(IPC)支持,于处理器在程序之间同步和交换信息,如果不选这项,很多程序运行不起来,特别地,你想在LINUX下运行DOS仿真程序,你必须要选Y。
[*]POSIXMessageQueues
POSIX消息队列,这是POSIXIPC中的一部分。
建议你最好将它选上POSIX表示可移植操作系统接口
[*]BSDProcessAccounting
这是允许用户进程访问内核,将账户信息写入文件中。
这通常被认为是个好主意,建议你最好将它选上。
将进程的统计信息写入文件的用户级系统调用,主要包括进程的创建时间/创建者/内存占用等信息。
[]BSDProcessAccountingversion3fileformat
选Y,统计信息将会以新的格式(V3)写入,这格式包含进程ID和父进程。
注意这个格式和以前的v0/v1/v2格式不兼容,所以你需要升级相关工具来使用它。
[*]Exporttask/processstatisticsthroughnetlink(EXPERIMENTAL)
处于实验阶段的功能。
通过通用的网络输出工作/进程的相应数据,和BSD不同的是,这些数据在进程运行的时候就可以通过相关命令访问。
和BSD类似,数据将在进程结束时送入用户空间。
如果不清楚,选N。
[*] Enableper-taskdelayaccounting(EXPERIMENTAL)
在统计信息中包含进程等候系统资源(cpu,IO同步,内存交换等)所花费的时间
[*] Enableextendedaccountingovertaskstats(EXPERIMENTAL)
在统计信息中包含扩展进程所花费的时间
[*] Enableper-taskstorageI/Oaccounting(EXPERIMENTAL)
在统计信息中包含I/O存储进程所花费的时间
[*]Auditingsupport
审计支持,用于和内核的某些子模块同时工作,(例如SELinux)需要它,只有同时选择其子项才能对系统调用进行审计。
允许审计的下层能够被其他内核子系统使用,比如SE-Linux,它需要这个来进行登录时的声音和视频输出。
没有CONFIG_AUDITSYSCALL时(即下一个选项)无法进行系统调用。
[*] Enablesystem-callauditingsupport
支持对系统调用的审计。
允许系统独立地或者通过其他内核的子系统,调用审计支持,比如SE-Linux。
要使用这种审计的文件系统来查看特性,请确保INOTIFY已经被设置。
RCUSubsystem ---> 一个高性能的锁机制RCU子系统
RCU(Read-CopyUpdate),顾名思义为读取-复制更新。
对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调(callback)机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据。
这个时机就是所有引用该数据的CPU都退出对共享数据的操作。
RCUImplementation(Tree-basedhierarchicalRCU) --->
RCU实现机制
(X)Tree-basedhierarchicalRCU
基本数按等级划分
[]EnabletracingforRCU
激活跟踪
(32)Tree-basedhierarchicalRCUfanoutvalue
基本数按等级划分分列值
[]Disabletree-basedhierarchicalRCUauto-balancing
<>Kernel.configsupport
这个选项允许.config文件(即编译LINUX时的配置文件)保存在内核当中。
它提供正在运行中的或者还在硬盘中的内核的相关配置选项。
可以通过内核镜像文件kernelimagefile用命令scriptscripts/extract-ikconfig来提取出来,作为当前内核重编译或者另一个内核编译的参考。
如果你的内核在运行中,可以通过/proc/config.gz文件来读取。
下一个选项提供这项支持。
看起来好像是一个不错的功能,可以把编译时的.config文件保存在内核中,以供今后参考调用。
用来重编译和编译其他的内核的时候可以用上。
你是一个编译内核的狂人的话,这项要选上
[] Enableaccessto.configthrough/proc/config.gz(NEW)
上一项的子项,可以通过/proc/config.gz访问当前内核的.config。
新功能,上一项选的话这个就选上吧。
(18)Kernellogbuffersize(16=>64KB,17=>128KB)
内核日志缓存的大小,12=>4KB,13=>8KB,14=>16KB单处理器,15=>32KB多处理器,16=>64KBforx86NUMAQorIA-64,17=>128KBforS/390
[*]ControlGroupsupport --->
cgroup支持,如cpusets那样来使用cgroup子系统进程(不确定可以不选)
[] Exampledebugcgroupsubsystemcgroup
子系统调试例子
[*] Namespacecgroupsubsystemcgroup
子系统命名空间
[*] Freezercgroupsubsystem
[*] Cpusetsupport
只有含有大量CPU(大于16个)的SMP系统或NUMA(非一致内存访问)系统才需要它
[*] Includelegacy/proc//cpusetfile
[*] SimpleCPUaccountingcgroupsubsystem
简单cgroup子系统cpu所花费的时间
[] MemoryResourceControllerforControlGroups
cgroup内存资源控制器
[]enabledeprecatedsysfsfeatureswhichmayconfuseolduserspcetools
在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口
-*-Kernel->userspacerelaysupport(formerlyrelayfs)
内核系统区和用户区进行传递通讯的支持。
这个选项在特定的文件系统中提供数据传递接口支持,它可以提供从内核空间到用户空间的大批量的数据传递工具和设施。
如果不清楚,选N。
-*-Namespacessupport
命名空间支持,允许服务器为不同的用户信息提供不同的用户名空间服务
[*] UTSnamespace
通用终端系统的命名空间。
它允许容器,比如Vservers利用UTS命名空间来为不同的服务器提供不同的UTS。
如果不清楚,选N。
[*] IPCnamespace
IPC命名空间,不确定可以不选
[*]InitialRAMfilesystemandRAMdisk(initramfs/initrd)suppor
初始RAM的文件和RAM磁盘(initramfs/initrd)支持(如果要采用initrd启动则要选择,否则可以不选)
() Initramfssourcefile(s)
initrd已经被initramfs取代,如果你不明白这是什么意思,请保持空白
[*]Optimizeforsize
这个选项将在GCC命令后用“-Os”代替“-O2″参数,这样可以得到更小的内核。
没必要选。
一个编译好的内核才7-10多M,大家不会少这么点空间吧。
选上了可能会出一些问题。
最好不选。
有时会产生错误的二进制代码。
[]Configurestandardkernelfeatures(forsmallsystems) --->
配置标准的内核特性(为小型系统)。
这个选项可以让内核的基本选项和设置无效或者扭曲。
这是用于特定环境中的,它允许“非标准”内核。
你要是选它,你一定要明白自己在干什么。
这是为了编译某些特殊用途的内核使用的,例如引导盘系统。
-*- Loadallsymbolsfordebugging/ksymoops
装载所有的调试符号表信息,仅供调试时选择
[*] Includeallsymbolsinkallsyms
在kallsyms中包含内核知道的所有符号,内核将会增大300K
[*] Doanextrakallsymspass
除非你在kallsyms中发现了bug并需要报告这个bug才打开该选项
KernelPerformanceEventsAndCounters --->
-*-Kernelperformanceeventsandcounters
[*]Tracepointprofilingsources
[]Kernelperformancecounters(oldconfigoption)
[]Disableheaprandomization
禁用随机heap(heap堆是一个应用层的概念,即堆对CPU是不可见的,它的实现方式有多种,可以由OS实现,也可以由运行库实现,如果你愿意,你也可以在一个栈中来实现一个堆)
ChooseSLABallocator(SLUB(UnqueuedAllocator)) --->
选择内存分配管理器(强烈推荐使用SLUB)
()SLAB
各种环境通用的内存分配管理器
(X)SLUB(UnqueuedAllocator)
更加优秀的内存分配管理器
[*]Profilingsupport(EXPERIMENTAL)
剖面支持,用一个工具来扫描和提供计算机的剖面图。
支持系统评测(对于大多数用户来说并不是必须的)
<>OProfilesystemprofiling(EXPERIMENTAL)
OProfile评测和性能监控工具
[*]Kprobes
调试内核除非开发人员,否则不选
GCOV-basedkernelprofiling --->
[]Enablegcov-basedkernelprofiling
[]Slowworkdebuggingthroughdebugfs
[*]Enableloadablemodulesupport --->
打开可加载模块支持,如果打开它则必须通过"makemodules_install"把内核模块安装在/lib/modules/中这个选项可以让你的内核支持模块,模块是什么呢?
模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。
一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。
在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。
一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块,否则无法启动系统。
在启动时不用到的功能,编成模块是最有效的方式。
你可以查看MAN手册来了解:
modprobe,lsmod,modinfo,insmod和rmmod.
如果不清楚,选Y。
[] Forcedmoduleloading
允许强制加载模块
[*] Moduleunloading
允许卸载已经加载的模块
[*] Forcedmoduleunloading
允许强制卸载正在使用中的模块(比较危险)这个选项允许你强行卸除模块,即使内核认为这不安全。
内核将会立即移除模块,而不管是否有人在使用它(用rmmod-f命令)。
这主要是针对开发者和冲动的用户提供的功能。
如果不清楚,选N。
[] Moduleversioningsupport
有时候,你需要编译模块。
选这项会添加一些版本信息,来给编译的模块提供独立的特性,以使不同的内核在使用同一模块时区别于它原有的模块。
这有时可能会有点用。
如果不清楚,选N。
允许使用其他内核版本的模块(可能会出问题)
[] Sourcechecksumforallmodules
为所有的模块校验源码,如果你不是自己编写内核模块就不需要它这个功能是为了防止你在编译模块时不小心更改了内核模块的源代码但忘记更改版本号而造成版本冲突。
如果不清楚,选N。
-*-Enabletheblocklayer --->
块设备支持,使用硬盘/USB/SCSI设备者必选这选项使得块设备可以从内核移除。
如果不选,那么blockdev文件将不可用,一些文件系统比如ext3将不可用。
这个选项会禁止SCSI字符设备和USB储存设备,如果它们使用不同的块设备。
选Y,除非你知道你不需要挂载硬盘和其他类似的设备。
不过此项无可选项
[*] Supportforlarge(2TB+)blockdevicesandfiles
仅在使用大于2TB的块设备时需要
[*] BlocklayerSGsupportv4
通用scsi块设备第4版支持
[] Blocklayerdataintegritysupport
块设备数据完整性支持
IOSchedulers --->
IO调度器I/O是输入输出带宽控制,主要针对硬盘,是核心的必須的东西。
这里提供了三个IO调度器。
<*>AnticipatoryI/Oscheduler
使用于大多数环境假设一个块设备只有一个物理查找磁头(例如一个单独的SATA硬盘),将多个随机的小写入流合并成一个大写入流,用写入延时换取最大的写入吞吐量.适用于大多数环境,特别是写入较多的环境(比如文件服务器)抢先式I/O调度方式是默认的磁盘调度方式。
它对于大多数环境通常是比较好的选择。
但是它和DeadlineI/O调度器相比有点大和复杂,它有时在数据调入时会比较慢。
<*>DeadlineI/Oscheduler
使用轮询的调度器,简洁小巧,提供了最小的读取延迟和尚佳的吞吐量,特别适合于读取较多的环境(比如数据库)DeadlineI/O调度器简单而又紧密,在性能上和抢先式调度器不相上下,在一些数据调入时工作得更好。
至于在单进程I/O磁盘调度上,它的工作方式几乎和抢先式调度器相同,因此也是一个好的选择。
<*>CFQI/Oscheduler
使用QoS策略为所有任务分配等量的带宽,避免进程被饿死并实现了较低的延迟,可以认为是上述两种调度器的折中.适用于有大量进程的多用户系统CFQ调度器尝试为所有进程提供相同的带宽。
它将提供平等的工作环境,对于桌面系统很合适。
DefaultI/Oscheduler(CFQ) --->
默认IO调度器我这样理解上面三个IO调度器:
抢先式是传统的,它的原理是一有响应,就优先考虑调度。
如果你的硬盘此时在运行一项工作,它也会暂停下来先响应用户。
期限式则是:
所有的工作都有最终期限,在这之前必须完成。
当用户有响应时,它会根据自己的工作能否完成,来决定是否响应用户。
CFQ则是平均分配资源,不管你的响应多急,也不管它的工作量是多少,它都是平均分配,一视同仁的。
()Anticipatory
()Deadline
(X)CFQ
()No-op
[*]TicklessSystem(DynamicTicks) --->
非固定频率系统,这项技术能让新内核运行的更有效率,并且更省电。
[*]HighResolutionTimerSupport不选
支持高频率时间发生器,如果硬件不兼容,则这个选项只会增大内核(大多数个人PC并没有这个)
[*]Symmetricmulti-processingsupport不选
对称多处理器支持,如果你有多个CPU或者使用的是多核CPU就选上,此时"EnhancedRealTimeClockSupport"选项必须开启,"AdvancedPowerManagement"选项必须关闭。
如果你选N,内核将会在单个或者多个CPU的机器上运行,但是只会使用一个CPU。
如果你选Y,内核可以在很多(但不是所有)单CPU的机器上运行,在这样的机器,你选N会使内核运行得更快。
注意如果你选Y,然后在Processorfamily选项中选择“586″or“Pentium”,内核将不能运行在486构架的机器上。
同样的,多CPU的运行于PPro构架上的内核也无法在Pentium系列的板上运行。
[*]Supportsparseirqnumbering不选
支持稀有的中断编号
[*]EnableMPStable不选
mps多处理器规范
[]SupportforbigSMPsystemswithmorethan8CPUs
[*]Supportforextended(non-PC)x86platforms不选
支持非pc
[*]Single-depthWCHANoutput编译选项
[]Paravirtualizedguestsupport --->
虚拟化客户端支持
[] VMIGuestsupport(DEPRECATED)(NEW)
VMwareESXserver客户端
[] KVMparavirtualizedclock(NEW)
KVM时允许虚拟一个时钟
[] KVMGuestsupport(NEW)
KVM客户端
[] Lguestguestsupport(NEW)
Lguest(linux内核虚拟化的x86程序)客户端
[] Enableparavirtualizationcode(NEW)
增加虚拟机的运行效率
[]DisableBootmemcode
[]Memtest
内存测试
Processorfamily(Pentium-Pro) --->
处理器系列,请按照你实际使用的CPU选择这里是处理器的类型。
这里的信息主要目的是用来优化。
为了让内核能够在所有X86构架的CPU上运行(虽然不是最佳速度),在这你可以选386。
内核不会运行在比你选的构架还要老的机器上。
比如,你选了Pentium构架来优化内核,它将不能在486构架上运行。
如果你不清楚,选386。
()386
()486
()586/K5/5x86/6x86/6x86MX
()Pentium-Classic
()Pentium-MMX
(X)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
[*]Genericx86support不选
这一选项针对x86系列的CPU使用更多的常规优化。
如果你在上面一项选的是i386、i586之类的才选这个通用x86支持,如果你的CPU能够在上述"Pro
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux内核编译 menuconfig详解 linux 内核 编译 menuconfig 详解