LINUX内核配置MAKE MENUCONFIG菜单详解
我们在linux内核裁剪过程中,进入内核所在目录,键入 make menuconfig 就会看到一堆的配置菜单,它们具体代表什么含义呢?我们该如何取舍呢?这里把近期收集到的一些信息做一个总结。
1、General setup
代码成熟度选项,它又有子项:
1.1、prompt for development and/or incomplete code/drivers
该选项是对那些还在测试阶段的代码,驱动模块等的支持。一般应该选这个选项,除非你只是想使用 LINUX 中已经完全稳定的东西。但这样有时对系统性能影响挺大。
1.2、Cross-compiler tool prefix
交叉编译工具前缀,例如:Cross-compiler tool prefix值为: (arm-linux-)
1.3、Local version - append to kernel release 内核显示的版本信息,填入 64字符以内的字符串,你在这里填上的字符口串可以用uname -a命令看到。
1.4、 Automatically append version information to the version string 自动在版本字符串后面添加版本信息,编译时需要有perl以及git仓库支持
1.5、Kernel compression mode (Gzip) --->
有四个选项,这个选项是说内核镜像要用的压缩模式,回车一下,可以看到gzip,bzip2,lzma,lxo,一般可以按默认的gzip,如果要用bzip2,lzma,lxo要先装上支持
1.6、Support for paging of anonymous memory (swap) 使用交换分区或交换文件来做为虚拟内存,一定要选上。
1.7、System V IPC
表示系统的进程间通信Inter Process Communication,它用于处理器在程序之间同步和交换信息,如果不选这项,很多程序运行不起来,必选。
1.8、POSIX Message Queues
POSIX标准的消息队列,它同样是一种IPC。建议你最好将它选上
1.9、BSD Process Accounting
用户进程访问内核时将进程信息写入文件中。通常主要包括进程的创建时间/创建者/内存占用等信息。建议最好选上。
1.10、BSD Process Accounting version 3 file format
使用新的第三版文件格式,可以包含每个进程的PID和其父进程的PID,但是不兼容老版本的
文件格式。
1.11、Export task/process statistics through netlink (EXPERIMENTAL)
通过netlink接口向用户空间导出任务/进程的统计信息,与BSD Process Accounting的不同之处在于这些统计信息在整个任务/进程生存期都是可用的 Enable per-task delay accounting (EXPERIMENTAL)
在统计信息中包含进程等候系统资源(cpu,IO同步,内存交换等)所花费的时间 Enable extended accounting over taskstats (EXPERIMENTAL) 在统计信息中包含扩展进程所花费的时间
1.12、Auditing support
审记支持,用于和内核的某些子模块同时工作,例如Security Enhanced Linux。只有选择此项及它的子项,才能调用有关审记的系统调用。
1.13、Enable system-call auditing support 支持对系统调用的审计
1.14、IRQ subsystem ---> 中断子系统
Support sparse irq numbering <=== 支持稀有的中断编号,关闭
1.15、RCU Subsystem --->
非对称读写锁系统 是一种高性能的kernel 锁机制,适用于读多写少环境 RCU Implementation (Tree-based hierarchical RCU) --->
RCU 实现机制 Tree(X) Tree-based hierarchical RCU 基本数按等级划分 Enable tracing for RCU 激活跟踪
(32) Tree-based hierarchical RCU fanout value 基本数按等级划分分列值
Disable tree-based hierarchical RCU auto-balancing
1.16、< > Kernel .config support
这个选项允许.config文件(即编译LINUX时的配置文件)保存在内核当中
1.17、(17) Kernel log buffer size (16 => 64KB, 17 => 128KB)
1.18、[ ] Control Group support --->
cgroups 支持, 文档资料 ,cgroups 主要作用是给进程分组,并可以动态调控进程组的CPU 占用率。比如A 进程分到apple 组,给予20%CPU 占用率,E 进程分easy 组,给予50%CPU 占用率,最高100% 。我目前没有此类应用场景,用到时会选择将其编译进去。 CPU bandwidth provisioning for FAIR_GROUP_SCHED
此选项允许用户定义的CPU带宽速率(限制)在公平的组调度运行的任务。组没有限制设置被认为是无约束和运行没有限制。
Group scheduling for SCHED_RR/FIFO
此功能可以让您显式地分配真实的CPU带宽任务组。
1.19、-*- Namespaces support --->
命名空间支持,允许服务器为不同的用户信息提供不 同的用户名空间服务 [*] UTS namespace
通用终端系统的命名空间。它允许容器,比如Vservers利用UTS命名空间来为不同的服务器提供不同的UTS。如果不清楚,选N。 [*] IPC namespace
IPC命名空间,不确定可以不选
[*] User namespace (EXPERIMENTAL) User命名空间,不确定可以不选 [*] PID Namespaces
PID命名空间,不确定可以不选 [*] Network namespace
1.20、Automatic process group scheduling 自动进程组调度
1.21、[ ] enable deprecated sysfs features to support old userspace tools
1.22、-*- Kernel->user space relay support (formerly relayfs)
在某些文件系统上( 比如debugfs ) 提供从内核空间向用户空间传递大量数据的接口,我目前没有此类应用场景
1.23、 [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support 用于在真正内核装载前,做一些操作(俗称两阶段启动),比如加载module ,mount 一些非root 分区,提供灾难恢复shell 环境等, 资料 ,我是期望直接从kernel image 直接启动,所以没选它
?1.24、Initramfs source file(s)
initrd已经被initramfs取代,如果你不明白这是什么意思,请保持空白
1.25、Optimize for size
这个选项将在GCC 命令后用 “-Os ” 代替 “-O2 ″参数,这样可以得到更小的内核。没必要选。选上了有时会产生错误的二进制代码。
1.26、Enable full-sized data structures for core:在内核中使用全尺寸的数据结构.禁用它将使得某些内核的数据结构减小以节约内存,但是将会降低性能。
1.27、Enable futex support:快速用户空间互斥体可以使线程串行化以避免竞态条件,也提高了响应速度.禁用它将导致内核不能正确的运行基于glibc的程序。
1.28、Enable eventpoll support:支持事件轮循的系统调用。