linux配置选项详解
内核的配置选项有很多,一般情况下大部分选项都可以使用默认值,因此并不需要了解它们所代表的意义;但是某些应用场合需要将内核剪裁的足够小,这就需要我们知道各个选项的意义了。 即使不考虑内核剪裁的因素,当我们打算深入了解某一个子系统时,也需要从该子系统的配置选项入手(可以从该子系统代码目录下的各个Kconfig文件入手),掌握各个代码的关系,避重就轻的进行代码分析。 下面就常用的配置选项就行简单介绍一下(linux 3.0.34): 一、DMA memory allocation support CONFIG_ZONE_DMA=y支持DMA内存分配低于16MB的地址空间,如果不分配的话,这部分内存也不会被使用。 从网上查到的信息,这个前16MB是原来ISA设备遗留的问题,ISA设备的DMA只能访问前16M的内存。估计之前这16MB是为了兼容ISA设备而预留的,现在已经几乎找不到ISA设备了,所以这块内存又拿回来使用。 参考: 二、General setup ---> (常规设置) 1. [*] Prompt for development and/or incomplete code/drivers CONFIG_EXPERIMENTAL=y显示尚在开发中或尚未完成的代码与驱动。除非你是测试人员或者开发者,否则请勿选择 2. Cross-compiler tool prefix CONFIG_CROSS_COMPILE=""交叉编译工具前缀。 3. Local version - append to kernel release CONFIG_LOCALVERSION=""在内核版本后面附加上你指定的版本信息,这个信息在uname -a命令里面可以看到。 4.Automatically append version information to the version string CONFIG_LOCALVERSION_AUTO=y自动在版本字符串后面添加版本信息,编译时需要有perl以及git仓库支持 5.Kernel compression mode (Gzip) --->内核压缩模式。注意,这几种压缩方式只能选择一种使用。 (X) GzipHAVE_KERNEL_GZIP=y用于UNIX系统的文件压缩格式 参考: ( ) Bzip2HAVE_KERNEL_BZIP2=y bzip2是一个基于Burrows-Wheeler变换的无损压缩软件,压缩效果比传统的LZ77/LZ78压缩算法来得好。bzip2比传统的gzip或者ZIP的压缩效率更高,但是它的压缩速度较慢。参考: ( ) LZMAHAVE_KERNEL_LZMA=y是一个Deflate和LZ77算法改良和优化后的压缩算法。它使用类似于LZ77的字典编码机制,在一般的情况下压缩率比bzip2为高,用于压缩的可变字典最大小可达4GB.参考: ( ) XZHAVE_KERNEL_XZ=y是一个使用 LZMA压缩算法的无损数据压缩文件格式。和gzip与bzip2一样,同样支持多文件压缩,但是约定不能将多于一个的目标文件压缩进同一个档案文件。 相反,xz通常作为一种归档文件自身的压缩格式,例如使用tar或cpioUnix程序创建的归档。参考: ( ) LZOHAVE_KERNEL_LZO=y是致力于解压速度的一种数据压缩算法,LZO是Lempel-Ziv-Oberhumer的缩写参考: 6.((none)) Default hostname CONFIG_LOCALVERSION_AUTO=yCONFIG_DEFAULT_HOSTNAME="(none)"指定一个默认的主机名。指定了这个以后,可以省去使用sethostname命令设置主机名称。在制作最小系统时比较有用。 7.[*] Support for paging of anonymous memory (swap) CONFIG_SWAP=y是否支持交换分区 8.[*] System V IPC CONFIG_SYSVIPC=y支持System V IPC.这个主要是为了兼容使用了System V IPC的UNIX程序而设的,如果不考虑兼容性,则可以忽略这个参数。参考: 9.[*] POSIX Message Queues CONFIG_POSIX_MQUEUE=y是否支持POSIX Message Queues,这个是为了兼容POSIX标准而设的。这个只有在CONFIG_EXPERIMENTAL=y时显示。 10.[*] BSD Process Accounting ONFIG_BSD_PROCESS_ACCT=y将进程统计信息写入文件中,使用accton命令开启这个功能。 11.[*] BSD Process Accounting version 3 file format CONFIG_BSD_PROCESS_ACCT_V3=y进程统计文件使用V3格式。注:V3格式是一种二进制的格式,如果想明码保存,则不应该选择此项。参考: 12.[*] open by fhandle syscalls CONFIG_FHANDLE=y打开文件可以通过句柄子系统调用 13.[*] Export task/process statistics through netlink (EXPERIMENTAL) 通过netlink接口向用户空间导出任务/进程的统计信息,netlink是一种在内核与用户应用之间进行双向数据传输的非常好的方式,用户应用使用标准的socket API就可以使用netlink提供的强大功能。 14.[*] Enable per-task delay accounting (EXPERIMENTAL) CONFIG_TASK_DELAY_ACCT=y统计数据包含每个任务/进程的延时 15.[*] Enable extended accounting over taskstats (EXPERIMENTAL) CONFIG_TASK_XACCT=y统计数据包含扩展任务读取数据和发送数据使用的时间 16.[*] Enable per-task storage I/O accounting (EXPERIMENTAL) CONFIG_TASK_IO_ACCOUNTING=y统计数据包括I/O设备产生的字节数 17.-*- Auditing support CONFIG_AUDIT=y 支持审计功能,某些内核模块需要它(SELinux,Security-Enhanced Linux) 18.[*] Enable system-call auditing support CONFIG_AUDITSYSCALL=y开启系统调用的审计功能 19.IRQ subsystem ---> 中断子系统 [*] Support sparse irq numbering CONFIG_SPARSE_IRQ=y支持稀有的中断号 20.RCU Subsystem ---> 非对称读写锁系统 是一种新的kernel锁机制,适用于读多写少环境。对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调(callback)机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据。这个时机就是所有引用该数据的CPU都退出对共享数据的操作。 (1)RCU Implementation (Tree-based hierarchical RCU) ---> RCU实现机制 (X) Tree-based hierarchical RCU:CONFIG_TREE_RCU=y基于树的等级划分 (2)[ ] Enable tracing for RCU:CONFIG_RCU_TRACE=y打开RCU追踪 (3) (32) Tree-based hierarchical RCU fanout value CONFIG_RCU_FANOUT=32RCU树的分支数 (4)[ ] Disable tree-based hierarchical RCU auto-balancing CONFIG_RCU_FANOUT_EXACT=y关闭RCU自动均衡功能 (5)[*] Accelerate last non-dyntick-idle CPU's grace periods CONFIG_RCU_FAST_NO_HZ=y提高非休眠CPU的使用时间 21.< > Kernel .config support CONFIG_IKCONFIG=y|m把编译内核时使用的。config文件保存在编译好的内核中。 22.(17) Kernel log buffer size (16 => 64KB, 17 => 128KB) CONFIG_LOG_BUF_SHIFT=17内核日志缓存的大小。这个值是以2的平方取的,取值范围12-21. 23.-*- Control Group support ---> 24.[*] Namespaces support ---> 25.[*] Automatic process group scheduling 26.[ ] Enable deprecated sysfs features to support old userspace tools 27.-*- Kernel->user space relay support (formerly relayfs) 28.[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support