如何让linux支持中文irda驱动

准备用STM32做IRDA的研究,怎么做合适 - STM32/STM8技术论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
准备用STM32做IRDA的研究,怎么做合适
09:47:32  
毕业设计要求用STM32做IRDA通信的研究,需要用手掌机发送信号,STM32接收,然后控制发光二极管,应该怎么做比较合适
22:04:30  
这个不是很难 实际上就是STM32的串口应用 加上红外线的模块控制
09:07:53  
PCB在线计价下单
板子大小:
板子数量:
PCB 在线计价
这个不是很难 实际上就是STM32的串口应用 加上红外线的模块控制
嗯,就是我现在不知道里面应该有哪些模块
09:14:31  
嗯,就是我现在不知道里面应该有哪些模块
可以看看淘宝 搜索一下串口控制的红外线模块
09:31:15  
可以看看淘宝 搜索一下串口控制的红外线模块
好的,谢谢,我先去看看吧
17:41:25  
可以参考下英蓓特STM32V100开发板
工程师职场
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司   Linux 是目前最具活力的操作系统之一,其对各类计算机架构的兼容和支持,强健的网络功能,独特的自由软件的特征,近几年发展势头极为迅猛,它的各种商业、非商业的版本,广泛应用于企业资源管理、嵌入式系统开发、网络运作等各个领域,基于Linux的各种应用开发成为目前的主流技术之一。
IrDA 标准简介
  红外通信是以红外线作为载体来传送数据信息的,要使各种设备能够通过红外口随意连接,需有一个统一的软硬件规范。成立于1993年的红外线数据协会IrDA(InfraredDataAssociation)最初制定的IrDA1.0,简称为SIR(SerialI
nfraRed),是基于HP2SIR开发出来的一种异步、半双工的红外通信方式,它依托系统中的异步通信收发器(),通过对串行数据脉冲的波形压缩和对所接收的光信号电脉冲的波形扩展这一过程(3ˆ16EnDec)实现红外数据传输,但最高通信速率只有11512kbˆs。IrDA1.1(也称FIR,FastInfrared,1996年底推出)由于不依托UART,最高通信速率可达4Mbˆs,它采用了全新的4×10-6,即通过分析脉冲的来辨别所传输的数据信息。目前许多嵌入式处理器中的红外口兼容了SIR和FIR二种标准,即根据使用时通信速率的选定,自动套用不同的标准。
  IrDA标准包括3个基本的规范和协议:红外物理层规范(IrPHY)、红外数据链路访问协议(IrLAP)和红外链接管理协议IrLMP。物理层规范制定了红外通信硬件设计上的目标和要求,IrLAP和IrLMP为二个软件层,负责对链接进行设置、管理和维护。IrLAP是为IrDA设备提供基本链接层连接的协议,在HDLC和SDLC基础上扩充了一些独特的红外通讯特性,提供连接制定、数据转移、流控制等功能,并具有红外线媒质独特属性的附加特点。IrLMP取决于连接的关系和由IrLAP提供的处理特性,它允许多个Ir设备连接,并可运行超过一个以上的IrLAP,解决在搜寻IrLAP中的地址冲突,处理在多个设备中的重复地址并产生新的地址,给出连接操作的信息(IAS)。
  3 Linux网络设备的驱动
  由于IrDA不是单纯的串口物理通信规范,而是一种网络传输控制标准。Linux必须按 网络设备驱动 方法来组织红外数据的网络传输。Linux网络驱动程序的体系结构如图1所示。
  体系结构划分为四层,自上而下分别为协议接口层,网络设备接口层,提供实际功能的设备驱动功能层,以及网络设备和网络媒介层。网络驱动程序的设计,最主要的工作就是完成设备驱动功能层,使其满足应用中所需的功能。Linux对所有网络设备都抽象为一个接口,这个接口提供了对所有网络设备的操作集合。由数据结构structdeve来表示网络设备在内核中的运行情况,即网络设备接口,它既包括纯软件网络设备接口,也包括硬件网络设备接口,由以devbase为头指针的设备链表来集体管理所有网络设备,该设备链表中的每个元素代表一个网络设备接口。数据结构device(在内核中也就是net_device)中有很多供系统访问和协议层调用的设备方法,包括供设备初始化和进行系统注册用的init函数,打开和关闭网络设备的open和stop函数,处理数据包发送的函数hard_start_xmit,以及中断处理函数等。
  3.1 初始化
  网络设备的初始化主要是由device数据结构中的init函数指针所指的初始化函数来完成的,当内核启动或加载网络驱动模块的时候,就会调用初始化过程。首先检测网络物理设备是否存在,这是通过检测物理设备的硬件特征来完成(系统中的红外串行接口),然后再对设备进行资源配置,随后构造设备的device数据结构,用检测到的数值对device中的变量初始化。最后向Linux内核中注册该设备并申请内存空间。
  3.2 数据包的发送和接收
  数据包的发送和接收是实现Linux网络驱动程序中两个最关键的过程。图1中明确反映了网络数据包的传输过程:首先在网络设备驱动加载时,通过device域中的init函数指针调用网络设备的初始化函数对设备进行初始化,如果操作成功就可以通过device域中的open函数指针调用网络设备的打开函数打开设备,再通过device域中的建立硬件包头函数指针hard_header来建立硬件包头信息。最后通过协议接口层函数dev_queue_xmit来调用device域中的hard_start_xmit函数指针来完成数据包的发送。该函数将把存放在套接字缓冲区中的数据发送到物理设备,该缓冲区是由数据结构sk_buff来表示的。
&&&&&往下看有更多相关资料
本网站试开通微、小企业商家广告业务;维修点推荐项目。收费实惠有效果!欢迎在QQ或邮箱联系!
试试再找找您想看的资料
资料搜索:
查看相关资料 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
copyright & &广电电器(中国梧州) -all right reserved& 若您有什么意见或建议请mail: & &
地址: 电话:(86)774-2826670& & &&)我的图书馆
Linux-3.10-x86_64 内核配置选项简介作者:[]
本文作者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
无担保:本文作者不保证作品内容准确无误,亦不承担任何由于使用此文档所导致的损失。自由使用:任何人都可以自由的阅读/链接/打印此文档,无需任何附加条件。名誉权:任何人都可以自由的转载/引用/再创作此文档,但必须保留作者署名并注明出处。
本文作者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于作者水平有限,因此不能保证作品内容准确无误。如果你发现了作品中的错误,请您来信指出,哪怕是错别字也好,任何提高作品质量的建议我都将虚心接纳。
Email(QQ):在QQ邮箱
Gentoo LinuxGentoo内核()特有的选项
Gentoo Linux supportCONFIG_GENTOO_LINUX选"Y"后,将会自动选中那些在Gentoo环境中必须开启的内核选项,以避免用户遗漏某些必要的选项,减轻一些用户配置内核的难度.建议选"Y".Linux dynamic and persistent device naming (userspace devfs) supportCONFIG_GENTOO_LINUX_UDEV目前此项的作用仅是开启CONFIG_TMPFS和CONFIG_DEVTMPFS及其所依赖的选项.CONFIG_TMPFS是为了在"/dev/shm","/run","/sys/fs/cgroup"三个目录中挂载tmpfs文件系统,CONFIG_DEVTMPFS是为了在"/dev"目录挂载devtmpfs文件系统.建议选"Y".Support for init systems, system and service managers"init"系统(系统与服务管理器)."init"是内核启动的第一个用户空间程序(PID=1),也是所有用户态进程的"大总管"([提示]所有内核态进程的大总管是PID=2的[kthreadd]).OpenRC, runit and other script based systems and managersCONFIG_GENTOO_LINUX_INIT_SCRIPT是Gentoo传统的"init"系统,使用基于的传统启动脚本技术.选"Y"后,所有OpenRC所必需的内核选项(目前仅有CONFIG_BINFMT_SCRIPT)都会被自动选中.不确定的选"Y".systemdCONFIG_GENTOO_LINUX_INIT_SYSTEMD尽管并非完美无缺,但是确实是目前风头最劲的"init"系统,大有在Linux世界一统江湖的霸气和潜力.仅在你打算时选"Y".选"Y"后,内核中所有被依赖的选项都将被自动选中,包括建议的(而非必须的)选项,总计约20项.
64-bit kernelCONFIG_64BIT编译64位内核.本文仅讲述x86_64(AMD64)平台的内核编译,所以这个是必选项.
General setup常规设置
Cross-compiler tool prefixCONFIG_CROSS_COMPILE交叉编译工具前缀(比如"arm-linux-"相当于使用"make CROSS_COMPILE=arm-linux-"进行编译).除非你想配置后默认自动进行交叉编译,否则不要使用此选项.Local version - append to kernel releaseCONFIG_LOCALVERSION在内核版本后面加上自定义的版本字符串(最大64字符),可以用"uname -a"命令看到Automatically append version information to the version stringCONFIG_LOCALVERSION_AUTO自动在版本字符串(CONFIG_LOCALVERSION)后面添加版本信息(类似"-gxxxxxxxx"格式),需要有perl以及git仓库支持Kernel compression mode内核镜像的压缩格式,可选Gzip/Bzip2/LZMA/XZ/LZO格式之一,推荐使用XZ格式.你的系统中需要有相应的压缩工具.Default hostnameCONFIG_DEFAULT_HOSTNAME设置默认主机名,默认值是"(none)".用户可以随后使用系统调用sethostname()来修改主机名.Support for paging of anonymous memory (swap)CONFIG_SWAP使用交换分区或者交换文件来做为虚拟内存System V IPCCONFIG_SYSVIPCSystem V 支持,用于进程间同步和交换数据,许多程序需要这个功能.选"Y",除非你确实知道自己在做什么POSIX Message QueuesCONFIG_POSIX_MQUEUE是POSIX IPC的一部分,如果你想编译和运行那些使用"mq_*"系统调用的程序(比如为Solaris开发的程序),就必须开启此选项.POSIX消息队列可以作为"mqueue"文件系统挂载以方便用户对队列进行操作.不确定的选"Y".open by fhandle syscallsCONFIG_FHANDLE用户程序可以使用句柄(而非文件名)来追踪文件(使用open_by_handle_at(2)/name_to_handle_at(2)系统调用),即使某文件被重命名,用户程序依然可定位那个文件.此特性有助于实现用户空间文件服务器(userspace file server).不确定的选"N",但使用systemd的建议选"Y".Auditing supportCONFIG_AUDIT内核审计(跟踪每个进程的活动情况)支持,某些安全相关的内核子系统(例如SELinux)需要它Enable system-call auditing supportCONFIG_AUDITSYSCALL对系统调用进行审计.既可独立使用,也可被其他内核子系统(例如SELinux)使用.Make audit loginuid immutableCONFIG_AUDIT_LOGINUID_IMMUTABLE审计时使用固定的loginuid.在使用之类的系统上应该开启(login服务由init进程负责重启),在使用或之类的系统上应该关闭(login服务由系统管理员手动重启).就是一个基于SysVinit的系统.IRQ subsystemIRQ(中断请求)子系统Expose hardware/virtual IRQ mapping via debugfsCONFIG_IRQ_DOMAIN_DEBUG通过debugfs中的irq_domain_mapping文件向用户显示硬件IRQ号/Linux IRQ号之间的对应关系.仅用于开发调试.Support sparse irq numberingCONFIG_SPARSE_IRQ稀疏IRQ号支持.它允许在小型设备上(例如嵌入式设备)定义一个很高的CONFIG_NR_CPUS值,但仍然不希望占用太多内核""(一段可以被操作或被管理的内存区域)的场合.稀疏IRQ也更适合NUMA平台,因为它以一种对NUMA更友好的方式分发中断描述符.不确定的选"N".Timers subsystemTimer tick handling内核时钟滴答处理程序,更多信息可以参考内核源码树下的""文件Periodic timer ticks (constant rate, no dynticks)CONFIG_HZ_PERIODIC无论CPU是否需要,都强制按照固定频率不断触发时钟中断.这是最耗电的方式,不推荐使用Idle dynticks system (tickless idle)CONFIG_NO_HZ_IDLECPU在空闲状态时不产生不必要的时钟中断,以使处理器能够在较低能耗状态下运行以节约电力,适合于大多数场合Full dynticks system (tickless)CONFIG_NO_HZ_FULL:即使CPU在忙碌状态也尽可能关闭所有时钟中断,适用于CPU在同一时间仅运行一个任务,或者用户空间程序极少与内核交互的场合.即使开启此选项,也需要额外设置"nohz_full=?"内核命令行参数才能真正生效.Full dynticks system on all CPUs by defaultCONFIG_NO_HZ_FULL_ALL即使没有设置"nohz_full"引导参数,也默认对所有CPU(boot CPU 除外)开启完全无滴答特性.Old Idle dynticks configCONFIG_NO_HZ等价于CONFIG_NO_HZ_IDLE,临时用来兼容老版本内核选项,未来会被删除.High Resolution Timer SupportCONFIG_HIGH_RES_TIMERS(hrtimer)是从2.6.16开始引入,用于取代传统timer wheel()的时钟子系统.可以降低与内核其他模块的耦合性,还可以提供比1毫秒更高的精度(因为它可以读取HPET/TSC等新型硬件时钟源),可以更好的支持音视频等对时间精度要求较高的应用.建议选"Y".[提示]这里说的"定时器"是指"软件定时器",而不是主板或CPU上集成的(ACPI PM Timer/HPET Timer/TSC Timer).CPU/Task time and stats accountingCPU/进程的时间及状态统计Cputime accountingCPU时间统计方式Simple tick based cputime accountingCONFIG_TICK_CPU_ACCOUNTING简单的基于滴答的统计,适用于大多数场合Deterministic task and CPU time accountingCONFIG_VIRT_CPU_ACCOUNTING_NATIVE通过读取CPU计数器进行统计,可以提供更精确的统计,但是对性能有一些不利影响.Full dynticks CPU time accountingCONFIG_VIRT_CPU_ACCOUNTING_GEN利用上下文跟踪子系统,通过观察每一个内核与用户空间的边界进行统计.该选项对性能有显著的不良影响,目前仅用于完全无滴答子系统(CONFIG_NO_HZ_FULL)的调试Fine granularity task level IRQ time accountingCONFIG_IRQ_TIME_ACCOUNTING通过读取TSC时间戳进行统计,这是统计进程IRQ时间的更细粒度的统计方式,但对性能有些不良影响(特别是在RDTSC指令速度较慢的CPU上).BSD Process AccountingCONFIG_BSD_PROCESS_ACCT用户空间程序可以要求内核将进程的统计信息写入一个指定的文件,主要包括进程的创建时间/创建者/内存占用等信息.BSD Process Accounting version 3 file formatCONFIG_BSD_PROCESS_ACCT_V3使用新的v3版文件格式,可以包含每个进程的PID和其父进程的PID,但是不兼容老版本的文件格式.比如
这样的工具可以识别v3格式Export task/process statistics through netlinkCONFIG_TASKSTATS通过接口向用户空间导出进程的统计信息,与 BSD Process Accounting 的不同之处在于这些统计信息在整个进程生存期都是可用的.Enable per-task delay accountingCONFIG_TASK_DELAY_ACCT在统计信息中包含进程等候系统资源(cpu,IO同步,内存交换等)所花费的时间Enable extended accounting over taskstatsCONFIG_TASK_XACCT在统计信息中包含进程的更多扩展信息.Enable per-task storage I/O accountingCONFIG_TASK_IO_ACCOUNTING在统计信息中包含进程在存储设备上的I/O字节数.RCU Subsystem.在读多写少的情况下,这是一个高性能的锁机制,对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它(速度非常快),但写者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据,速度非常慢.RCU只适用于读多写少的情况:如网络路由表的查询更新,设备状态表的维护,数据结构的延迟释放以及多径I/O设备的维护等.RCU ImplementationRCU的实现方式Tree-based hierarchical RCUCONFIG_TREE_RCU基于树型分层结构的实现.最适用于多CPU的非实时系统.Preemptible tree-based hierarchical RCUCONFIG_TREE_PREEMPT_RCU抢占式基于树型分层结构的实现.最适用于那些要求快速响应的多CPU实时系统.UP-only small-memory-footprint RCUCONFIG_TINY_RCU最简单的实现,能够大幅降低RCU系统的内存占用.最适用于单CPU的非实时系统.Preemptible UP-only small-memory-footprint RCUCONFIG_TINY_PREEMPT_RCU抢占式简单实现,能够大幅降低RCU系统的内存占用.最适用于那些要求快速响应的单CPU实时系统.Consider userspace as in RCU extended quiescent stateCONFIG_RCU_USER_QS在内核和用户边界设置钩子函数,将运行在用户态的CPU从全局RCU状态机制中移除,这样就不会在RCU系统中维护此CPU的时钟滴答.除非你想要帮助开发CONFIG_NO_HZ_FULL模块,否则不要打开此选项,而且它还会对性能有不利影响.Force context trackingCONFIG_CONTEXT_TRACKING_FORCE默认在内核和用户边界进行探测(上下文跟踪),以便测试依赖于此特性的各种功能(比如用户空间的 RCU extended quiescent state),这个特性目前仅用于调试目的,未来也许会用于为CONFIG_NO_HZ_FULL模块提供支持Tree-based hierarchical RCU fanout valueCONFIG_RCU_FANOUT这个选项控制着树形RCU层次结构的端点数(fanout),以允许RCU子系统在拥有海量CPU的系统上高效工作.这个值必须至少等于CONFIG_NR_CPUS的1/4次方(4次根号).生产系统上应该使用默认值(64).仅在你想调试RCU子系统时才需要减小此值.Tree-based hierarchical RCU leaf-level fanout valueCONFIG_RCU_FANOUT_LEAF这个选项控制着树形RCU层次结构的叶子层的端点数(leaf-level fanout).对于期望拥有更高能耗比(更节能)的系统,请保持其默认值(16).对于拥有成千上万个CPU的系统来说,应该考虑将其设为最大值(CONFIG_RCU_FANOUT).Disable tree-based hierarchical RCU auto-balancingCONFIG_RCU_FANOUT_EXACT强制按照CONFIG_RCU_FANOUT_LEAF的值,而不是使用自动平衡树结构来实现RCU子系统.目前仅用于调试目的.未来也许会用于增强NUMA系统的性能.Accelerate last non-dyntick-idle CPU's grace periodsCONFIG_RCU_FAST_NO_HZ即使CPU还在忙碌,也允许进入dynticks-idle状态,并且阻止RCU每4个滴答就唤醒一次该CPU,这样能够更有效的使用电力,同时也拉长了RCU grace period的时间,造成性能降低.如果能耗比对你而言非常重要(你想节省每一分电力),并且你不在乎系统性能的降低(CPU唤醒时间增加),可以开启此选项.台式机和服务器建议关闭此选项.Enable RCU priority boostingCONFIG_RCU_BOOST允许提升RCU子系统的实时优先级(包括读操作与写操作),以避免RCU操作被阻塞太长时间.如果系统的CPU负载经常很重,或者你需要快速的实时响应系统,那么就选"Y",否则应该选"N".Real-time priority to boost RCU readers toCONFIG_RCU_BOOST_PRIO允许提升被长时间抢占(阻塞)的RCU读操作的实时优先级到什么程度.取值范围是[1,99].默认值"1"适用于实时应用程序中不包含CPU密集型(CPU-bound)线程的常规场合(例如大多数桌面系统).但是如果你的实时应用程序拥有一个或多个CPU密集型线程,那么可能需要增加这个值,具体可以参考内核帮助的说明.仅在你确实理解了的情况下再改变默认值.Milliseconds to delay boosting after RCU grace-period startCONFIG_RCU_BOOST_DELAY在提升RCU读操作的优先级之前,允许有多长时间潜伏期(阻塞),取值范围是[0,3000],单位是毫秒,默认值是"500".不确定的请使用默认值.Offload RCU callback processing from boot-selected CPUsCONFIG_RCU_NOCB_CPU如果你想帮助调试内核可以开启,否则请关闭.Build-forced no-CBs CPUs在开启CONFIG_RCU_NOCB_CPU选项的情况下,指定哪些CPU是No-CB CPU,相当于预先设置"rcu_nocbs="内核引导参数.Kernel .config supportCONFIG_IKCONFIG把内核的配置信息编译进内核中,以后可以通过scripts/extract-ikconfig脚本从内核镜像中提取这些信息Enable access to .config through /proc/config.gzCONFIG_IKCONFIG_PROC允许通过 /proc/config.gz 文件访问内核的配置信息Kernel log buffer sizeCONFIG_LOG_BUF_SHIFT设置内核日志缓冲区的大小: 12(最小值)=4KB,...,16=64KB,17=128KB,18=256KB,...,21(最大值)=2048KBAutomatically enable NUMA aware memory/task placementCONFIG_NUMA_BALANCING_DEFAULT_ENABLED在系统上自动启用进程/内存均衡,也就是自动开启CONFIG_NUMA_BALANCING特性.Memory placement aware NUMA schedulerCONFIG_NUMA_BALANCING允许自动根据NUMA系统的节点分布状况进行进程/内存均衡(方法很原始,就是简单的内存移动).这个选项对UMA系统无效.[提示]UMA系统的例子:(1)只有一颗物理CPU(即使是多核)的电脑,(2)不支持"虚拟NUMA",或"虚拟NUMA"被禁用的虚拟机(即使所在的物理机是NUMA系统)Control Group supportCONFIG_CGROUPS是一种进程管理机制,可以针对一组进程进行系统资源的分配和管理,可用于Cpusets,CFS(完全公平调度器),内存管理等子系统.此外,systemd也依赖于它.更多细节可以参考内核的""文件Example debug cgroup subsystemCONFIG_CGROUP_DEBUG导出cgroups框架的调试信息,仅用于调试目的.Freezer cgroup subsystemCONFIG_CGROUP_FREEZER允许冻结/解冻cgroup内所有进程Device controller for cgroupsCONFIG_CGROUP_DEVICE允许为cgroup建立设备白名单,这样cgroup内的进程将仅允许对白名单中的设备进行mknod/open操作Cpuset supportCONFIG_CPUSETS支持:允许将CPU和内存进行分组,并指定某些进程只能运行于特定的分组.这里有一篇Include legacy /proc/&pid&/cpuset fileCONFIG_PROC_PID_CPUSET提供过时的 /proc/&pid&/cpuset 文件接口Simple CPU accounting cgroup subsystemCONFIG_CGROUP_CPUACCT提供一个简单的资源控制器(Resource Controller,用于实现一组任务间的资源共享),以监控cgroup内所有进程的总CPU使用量.Resource countersCONFIG_RESOURCE_COUNTERS为cgroup提供独立于controller资源计数器Memory Resource Controller for Control GroupsCONFIG_MEMCG为cgroup添加内存资源控制器,包含匿名内存和页面缓存().开启此选项后,将会增加关联到每个内存页fixed memory大小,具体在64位系统上是40bytes/PAGE_SIZE.仅在你确实明白什么是
并且确实需要的情况下才开启此选项.此功能可以通过命令行选项"cgroup_disable=memory"进行关闭.Memory Resource Controller Swap ExtensionCONFIG_MEMCG_SWAP给
添加对swap的管理功能.这样就可以针对每个cgroup限定其使用的mem+swap总量.如果关闭此选项, memory resource controller 将仅能限制mem的使用量,而无法对swap进行控制(进程有可能耗尽swap).开启此功能会对性能有不利影响,并且为了追踪swap的使用也会消耗更多的内存(如果swap的页面大小是4KB,那么每1GB的swap需要额外消耗512KB内存),所以在内存较小的系统上不建议开启.Memory Resource Controller Swap Extension enabled by defaultCONFIG_MEMCG_SWAP_ENABLED如果开启此选项,那么将默认开启CONFIG_MEMCG_SWAP特性,否则将默认关闭.即使默认开启也可以通过内核引导参数"swapaccount=0"禁止此特性.Memory Resource Controller Kernel Memory accountingCONFIG_MEMCG_KMEM为 Memory Resource Controller 添加对内核对象所占用内存的管理功能.和标准的 Memory Resource Controller 对内存的控制不一样之处在于:这些内核对象所占用的内存是基于每个内存页的,并且可以被swap到硬盘.使用这个功能可以确保cgroup中的进程不会单独耗尽所有内核资源.HugeTLB Resource Controller for Control GroupsCONFIG_CGROUP_HUGETLB为cgroup添加对页的资源控制功能.开启此选项之后,你就可以针对每个cgroup限定其对的使用.Enable perf_event per-cpu per-container group (cgroup) monitoringCONFIG_CGROUP_PERF将per-cpu模式进行扩展,使其可以监控属于特定cgroup并运行于特定CPU上的线程Group CPU schedulerCONFIG_CGROUP_SCHED让CPU调度程序可以在不同的cgroup之间分配CPU的带宽Group scheduling for SCHED_OTHERCONFIG_FAIR_GROUP_SCHED公平CPU调度策略,也就是在多个cgroup之间平均分配CPU带宽.""CONFIG_SCHED_AUTOGROUP(自动分组调度功能)依赖于它.CPU bandwidth provisioning for FAIR_GROUP_SCHEDCONFIG_CFS_BANDWIDTH允许用户为运行在CONFIG_FAIR_GROUP_SCHED中的进程定义CPU带宽限制.对于没有定义CPU带宽限制的cgroup而言,可以无限制的使用CPU带宽.详情参见
文件.Group scheduling for SCHED_RR/FIFOCONFIG_RT_GROUP_SCHED允许用户为cgroup分配实时CPU带宽,还可以对非特权用户的实时进程组进行调度.详情参见
文档.Block IO controllerCONFIG_BLK_CGROUP通用的块IO控制器接口,可以用于实现各种不同的控制策略.目前,IOSCHED_CFQ用它来在不同的cgroup之间分配磁盘IO带宽(需要额外开启CONFIG_CFQ_GROUP_IOSCHED),也会用它来针对特定块设备限制IO速率上限(需要额外开启CONFIG_BLK_DEV_THROTTLING).更多信息可以参考""文件.Enable Block IO controller debuggingCONFIG_DEBUG_BLK_CGROUP仅用于调试 Block IO controller 目的.Checkpoint/restore supportCONFIG_CHECKPOINT_RESTORE在内核中添加"检查点/恢复"支持.也就是添加一些辅助的代码用于设置进程的 text, data, heap 段,并且在 /proc 文件系统中添加一些额外的条目.主要用于调试目的.不确定的选"N".Namespaces supportCONFIG_NAMESPACES支持.用于支持基于容器的轻量级虚拟化技术(比如).UTS namespaceCONFIG_UTS_NS uname() 系统调用的命名空间支持IPC namespaceCONFIG_IPC_NS进程间通信对象ID的命名空间支持User namespaceCONFIG_USER_NS允许容器(也就是)使用user命名空间.如果开启此项,建议同时开启CONFIG_MEMCG和CONFIG_MEMCG_KMEM选项,以允许用户空间使用"memory cgroup"限制非特权用户的内存使用量.不确定的选"N".PID NamespacesCONFIG_PID_NS进程PID命名空间支持Network namespaceCONFIG_NET_NS网络协议栈的命名空间支持Require conversions between uid/gids and their internal representationCONFIG_UIDGID_STRICT_TYPE_CHECKS强制将uid/gid转换为内部表示形式,以让那些未对uid/gid进行转换的内核子系统代码也能正常编译.不确定的选"N".Automatic process group schedulingCONFIG_SCHED_AUTOGROUP每个TTY动态地创建任务分组(cgroup),这样就可以降低高负载情况下的桌面延迟.也就是传说中的桌面"",桌面用户建议开启.但服务器建议关闭.Enable deprecated sysfs features to support old userspace toolsCONFIG_SYSFS_DEPRECATED为了兼容旧版本的应用程序而保留过时的sysfs特性.仅当在使用2008年以前的发行版时才需要开启,2009年之后的发行版中必须关闭.Enable deprecated sysfs features by defaultCONFIG_SYSFS_DEPRECATED_V2默认开启上述特性Kernel-&user space relay support (formerly relayfs)CONFIG_RELAY在某些文件系统(比如debugfs)中提供支持(从内核空间向用户空间传递大批量数据).主要用于调试内核.Initial RAM filesystem and RAM disk (initramfs/initrd) supportCONFIG_BLK_DEV_INITRD初始内存文件系统(,2.6以上内核的新机制,使用cpio格式,占据的内存随数据的增减自动增减)与初始内存盘(,2.4以前内核遗留的老机制,使用loop设备,占据一块固定的内存,需要额外开启CONFIG_BLK_DEV_RAM选项才生效)支持,一般通过lilo/grub的initrd指令加载.更多细节可以参考""文件,关于(),可以参考IBM上的两篇文章:和.Initramfs source file(s)CONFIG_INITRAMFS_SOURCE如果你想(比如嵌入式环境或者想使用 EFI stub kernel),而不是通过lilo/grub这样的引导管理器加载,可以使用此选项,否则请保持空白.这个选项指明用来制作initramfs镜像的原料,可以是一个.cpio文件或一个空格分隔的目录与文件列表.细节可以参考""文档.User ID to map to 0 (user root)INITRAMFS_ROOT_UID此选项仅在CONFIG_INITRAMFS_SOURCE中包含目录时才有效,将此值设为非零(例如"37"),那么所有UID=37的文件在打包到initramfs镜像内时,其UID都将被设为"0".Group ID to map to 0 (group root)INITRAMFS_ROOT_GID此选项仅在CONFIG_INITRAMFS_SOURCE中包含目录时才有效,将此值设为非零(例如"37"),那么所有GID=37的文件在打包到initramfs镜像内时,其GID都将被设为"0".Support initial ramdisks compressed using gzipCONFIG_RD_GZIP支持经过gzip压缩的ramdisk或cpio镜像Support initial ramdisks compressed using bzip2CONFIG_RD_BZIP2支持经过bzip2压缩的ramdisk或cpio镜像Support initial ramdisks compressed using LZMACONFIG_RD_LZMA支持经过LZMA压缩的ramdisk或cpio镜像Support initial ramdisks compressed using XZCONFIG_RD_XZ支持经过XZ压缩的ramdisk或cpio镜像Support initial ramdisks compressed using LZOCONFIG_RD_LZO支持经过LZO压缩的ramdisk或cpio镜像Built-in initramfs compression mode选择initramfs镜像的压缩格式."gzip"是兼容性最好的格式,但是压缩率却最低."XZ"是目前渐渐流行的格式,压缩率高,解压速度也不慢.Optimize for sizeCONFIG_CC_OPTIMIZE_FOR_SIZE编译时优化内核尺寸(使用GCC的"-Os"而不是"-O2"参数编译),这会得到更小的内核,但是运行速度可能会更慢.主要用于嵌入式环境.Configure standard kernel features (expert users)CONFIG_EXPERT配置标准的内核特性(仅供专家使用).这个选项允许你改变内核的"标准"特性(比如用于需要"非标准"内核的特定环境中),仅在你确实明白自己在干什么的时候才开启.Enable 16-bit UID system callsCONFIG_UID16允许对UID系统调用进行过时的16-bit包装,建议关闭Sysctl syscall supportCONFIG_SYSCTL_SYSCALL二进制sysctl接口支持.由于现在流行直接通过/proc/sys以ASCII明码方式修改内核参数(需要开启CONFIG_PROC_SYSCTL选项),所以已经不需要再通过二进制接口去控制内核参数,建议关闭它以减小内核尺寸.Load all symbols for debugging/ksymoopsCONFIG_KALLSYMS装载所有的调试符号表信息,会增大内核体积,仅供调试时选择Include all symbols in kallsymsCONFIG_KALLSYMS_ALL在中包含内核知道的所有符号,内核将会增大300K,仅在你确实需要的时候再开启Enable support for printkCONFIG_PRINTK允许内核向终端打印字符信息.如果关闭,内核在初始化过程中将不会输出字符信息,这会导致很难诊断系统故障.仅在你确实不想看到任何内核信息时选"N".否则请选"Y".BUG() supportCONFIG_BUG显示故障和失败条件(BUG和WARN),禁用它将可能导致隐含的错误被忽略.建议仅在嵌入式设备或者无法显示故障信息的系统上关闭Enable ELF core dumpsCONFIG_ELF_CORE内存转储支持,可以帮助调试ELF格式的程序,用于调试和开发用户态程序Enable PC-Speaker supportCONFIG_PCSPKR_PLATFORM主板上的支持.只能发出或长或短的"滴"或"嘟嘟"声,一般用于系统报警.不要和能够播放音乐的扬声器混淆.如果你的主板上没有就关闭,有的话(开机自检完成后一般能听到"滴"的一声)还是建议开启.Enable full-sized data structures for coreCONFIG_BASE_FULL在内核中使用全尺寸的数据结构.禁用它将使得某些内核的数据结构减小以节约内存,但是将会降低性能Enable futex supportCONFIG_FUTEX可以使线程串行化以避免竞态条件,也提高了响应速度.禁用它将导致内核不能正确的运行基于glibc的程序Enable eventpoll supportCONFIG_EPOLL系列系统调用(epoll_*)支持,这是当前在Linux下开发大规模并发网络程序(比如Nginx)的热门人选,设计目的是取代既有POSIX select(2)与poll(2)系统接口,建议开启.Enable signalfd() system callCONFIG_SIGNALFD系统调用支持,建议开启.传统的处理信号的方式是注册信号处理函数,由于信号是异步发生的,要解决数据的并发访问和可重入问题.signalfd可以将信号抽象为一个文件描述符,当有信号发生时可以对其read,这样可以将信号的监听放到select/poll/epoll监听队列中.Enable timerfd() system callCONFIG_TIMERFD系统调用支持,建议开启.timerfd可以实现定时器功能,将定时器抽象为文件描述符,当定时器到期时可以对其read,这样也可以放到select/poll/epoll监听队列中.更多信息可以参考Enable eventfd() system callCONFIG_EVENTFD系统调用支持,建议开启.eventfd实现了线程之间事件通知的方式,eventfd的缓冲区大小是sizeof(uint64_t),向其write可以递增这个计数器,read操作可以读取,并进行清零.eventfd也可以放到select/poll/epoll监听队列中.当计数器不是0时,有可读事件发生,可以进行读取.Use full shmem filesystemCONFIG_SHMEM完全使用shmem来代替ramfs.shmem是基于共享内存的文件系统(可以使用swap),在启用CONFIG_TMPFS后可以挂载为tmpfs供用户空间使用,它比简单的ramfs先进许多.仅在微型嵌入式环境中且没有swap的情况下才可能会需要使用原始的ramfs.Enable AIO supportCONFIG_AIO开启POSIX异步IO支持.它常常被高性能的多线程程序使用,建议开启Enable PCI quirk workaroundsCONFIG_PCI_QUIRKS开启针对多种PCI芯片组的错误规避功能,仅在确定你的PCI芯片组确实没有没有任何bug时才关闭此功能.至于究竟哪些芯片组有bug,你可以直接打开""文件查看.不确定的选"Y".Embedded systemCONFIG_EMBEDDED如果你是为嵌入式系统编译内核,可以开启此选项,这样一些高级选项就会显示出来.单独选中此项本身对内核并无任何改变.Kernel Performance Events And CountersCONFIG_PERF_EVENTS性能相关的事件和计数器支持(既有硬件的支持也有软件的支持).大多数现代CPU都会通过性能计数寄存器对特定类型的硬件事件(指令执行,缓存未命中,分支预测失败)进行计数,同时又丝毫不会减慢内核和应用程序的运行速度.这些寄存器还会在某些事件计数到达特定的阈值时触发中断,从而可以对代码进行性能分析. Linux Performance Event 子系统对上述特性进行了抽象,提供了针对每个进程和每个CPU的计数器,并可以被 tools/perf/ 目录中的"perf"工具使用.Debug: use vmalloc to back perf mmap() buffersCONFIG_DEBUG_PERF_USE_VMALLOC主要用于调试vmalloc代码.Enable VM event counters for /proc/vmstatCONFIG_VM_EVENT_COUNTERS""中包含了从内核导出的虚拟内存的各种统计信息.开启此项后可以显示较详细的信息(包含各种事件计数器),关闭此项则仅仅显示很简略的信息.主要用于调试和统计.Enable SLUB debugging supportCONFIG_SLUB_DEBUGSLUB调试支持,禁用后可显著降低内核大小,同时/sys/kernel/slab也将不复存在.Disable heap randomizationCONFIG_COMPAT_BRK禁用堆随机化(heap randomization)功能.堆随机化可以让针对堆溢出的攻击变得困难,但是不兼容那些古董级的二进制程序(2000年以前).如果你不需要使用这些古董程序,那么选"N".Choose SLAB allocator选择内存分配管理器SLABCONFIG_SLAB久经考验的slab内存分配器,在大多数情况下都具有良好的适应性.SLUB (Unqueued Allocator)CONFIG_SLUB与SLAB兼容,但通过取消大量的队列和相关开销,简化了slab的结构.特别是在多核时拥有比slab更好的性能和更好的系统可伸缩性.SLOB (Simple Allocator)CONFIG_SLOBSLOB针对小型系统设计,做了非常激进的简化,以适用于内存非常有限(小于64M)的嵌入式环境.Profiling supportCONFIG_PROFILING添加扩展的性能分析支持,可以被之类的工具使用.仅用于调试目的.OProfile system profilingCONFIG_OPROFILE支持,仅用于调试目的.OProfile multiplexing supportCONFIG_OPROFILE_EVENT_MULTIPLEX支持KprobesCONFIG_KPROBES是一个轻量级的内核调试工具,能在内核运行的几乎任意时间点进行暂停/读取/修改等操作的调试工具.仅供调试使用.Optimize very unlikely/likely branchesCONFIG_JUMP_LABEL针对内核中某些"几乎总是为真"或者"几乎总是为假"的条件分支判断使用进行优化(在分支预测失败时会浪费很多时间在回退上,但是这种情况极少发生).很多内核子系统都支持进行这种优化.建议开启.Transparent user-space probesCONFIG_UPROBES与Kprobes类似,但主要用于用户空间的调试.Enable GCOV-based kernel profilingCONFIG_GCOV_KERNEL基于(工具)的支持,仅用于调试Profile entire KernelCONFIG_GCOV_PROFILE_ALL支持对整个内核进行分析.内核体积将会显著增大,并且运行速度显著减慢.
Enable loadable module support可加载模块支持
Enable loadable module supportCONFIG_MODULES打开可加载模块支持,可以通过"make modules_install"把内核模块安装在/lib/modules/中.然后可以使用 modprobe, lsmod, modinfo, insmod, rmmod 等工具进行各种模块操作.Forced module loadingCONFIG_MODULE_FORCE_LOAD允许使用"modprobe --force"在不校验版本信息的情况下强制加载模块,这绝对是个坏主意!建议关闭.Module unloadingCONFIG_MODULE_UNLOAD允许卸载已经加载的模块Forced module unloadingCONFIG_MODULE_FORCE_UNLOAD允许强制卸载正在使用中的模块(rmmod -f),即使可能会造成系统崩溃.这又是一个坏主意!建议关闭.Module versioning supportCONFIG_MODVERSIONS允许使用为其他内核版本编译的模块,可会造成系统崩溃.这同样是个坏主意!建议关闭.Source checksum for all modulesCONFIG_MODULE_SRCVERSION_ALL为模块添加"srcversion"字段,以帮助模块维护者准确的知道编译此模块所需要的源文件,从而可以校验源文件的变动.仅内核模块开发者需要它.Module signature verificationCONFIG_MODULE_SIG在时检查,详情参见""文件.[!!警告!!]开启此选项后,必须确保模块签名后没有被strip(包括rpmbuild之类的打包工具).Require modules to be validly signedCONFIG_MODULE_SIG_FORCE仅加载已签名并且密钥正确的模块,拒绝加载未签名或者签名密钥不正确的模块Automatically sign all modulesCONFIG_MODULE_SIG_ALL在执行"make modules_install"安装模块的时候,自动进行签名.否则你必须手动使用 scripts/sign-file 工具进行签名.Which hash algorithm should modules be signed with?选择对模块签名时使用的散列函数.建议使用强度最高的"SHA-512"算法.注意:所依赖的散列算法必须被静态编译进内核.对于"SHA-512"来说,就是CONFIG_CRYPTO_SHA512和CONFIG_CRYPTO_SHA512_SSSE3(如果你的CPU支持SSSE3指令集的话).
Enable the block layer块设备支持
Enable the block layerCONFIG_BLOCK块设备支持,使用SSD/硬盘/U盘/SCSI/SAS设备者必选.除非你是某些特殊的嵌入式系统,否则没有理由不使用块设备.Block layer SG support v4CONFIG_BLK_DEV_BSG为块设备启用第四版)支持.v4相比v3能够支持更复杂的SCSI指令(可变长度的命令描述块,双向数据传输,通用请求/应答协议),而且UDEV也要用它来获取设备的序列号.对于使用systemd的系统来说,必须选"Y".对于不使用systemd的系统,如果你需要通过/dev/bsg/*访问块设备,建议开启此选项,否则(通过/dev/{sd*,st*,sr*})可以关闭.Block layer SG support v4 helper libCONFIG_BLK_DEV_BSGLIB你不需要手动开启此选项,如果有其他模块需要使用,会被自动开启.Block layer data integrity supportCONFIG_BLK_DEV_INTEGRITY某些块设备可以通过存储/读取额外的信息来保障,这个选项为文件系统提供了相应的钩子函数来使用这个特性.如果你的设备支持
或者 T13/ATA External Path Protection 特性,那么可以开启此选项,否则建议关闭.Block layer bio throttling supportCONFIG_BLK_DEV_THROTTLING 支持,也就是允许限制每个cgroup对特定设备的IO速率.细节可以参考"".Advanced partition selectionCONFIG_PARTITION_ADVANCED如果你想支持各种不同的磁盘分区格式(特别是与UEFI配合使用的格式),务必选中此项.Acorn partition supportCONFIG_ACORN_PARTITIONAcorn 操作系统使用的分区格式,请根据实际情况选择子项,这里省略Alpha OSF partition supportCONFIG_OSF_PARTITIONAlpha 平台上使用的分区格式Amiga partition table supportCONFIG_AMIGA_PARTITIONAmigaOS 使用的分区格式Atari partition table supportCONFIG_ATARI_PARTITIONAtari OS 使用的分区格式Macintosh partition map supportCONFIG_MAC_PARTITION苹果的Macintosh平台使用的分区格式PC BIOS (MSDOS partition tables) supportCONFIG_MSDOS_PARTITION渐成历史垃圾,但目前依然最常见的DOS分区格式.除非你确信不使用此格式,否则必选.其下的子项根据实际情况选择.Windows Logical Disk Manager (Dynamic Disk) supportCONFIG_LDM_PARTITION使用 Windows Logical Disk Manager 创建的分区格式.参见""SGI partition supportCONFIG_SGI_PARTITIONSGI 平台上使用的分区格式Ultrix partition table supportCONFIG_ULTRIX_PARTITIONDEC/Compaq Ultrix 平台上使用的分区格式Sun partition tables supportCONFIG_SUN_PARTITIONSunOS 平台上使用的分区格式Karma Partition supportCONFIG_KARMA_PARTITIONRio Karma MP3 player 使用的分区格式EFI GUID Partition supportCONFIG_EFI_PARTITION代表未来趋势,眼下正大红大紫的EFI ()分区格式.建议开启.如果你在UEFI平台上安装则必须开启.SYSV68 partition table supportCONFIG_SYSV68_PARTITIONMotorola Delta 机器上使用的分区格式IO Schedulers()Deadline I/O schedulerCONFIG_IOSCHED_DEADLINE调度器.简洁小巧(只有400+行代码),提供了最小的读取延迟.如果你希望尽快读取磁盘,而不介意写入延迟,那它是最佳选择.通常对于数据库工作负载有最佳的表现.CFQ I/O schedulerCONFIG_IOSCHED_CFQ()调度器.努力在各内核线程间公平分配IO资源,适用于系统中存在着大量内核线程同时进行IO请求的情况.但对于只有少数内核线程进行密集IO请求的情况,则会出现明显的性能下降.CFQ Group Scheduling supportCONFIG_CFQ_GROUP_IOSCHED允许将CFQ和cgroup组合使用,也就是将每个cgroup看成一个整体,在各cgroup之间进行IO资源的分配.参见""文件.还可以参考一下《Linux内核精髓》中的""一章.BFQ I/O schedulerCONFIG_IOSCHED_BFQ调度器.这是一个基于CFQ调度器的改进版本,更适合于对交互性要求比较高的场合,比如桌面系统和实时系统.如果静态编译进内核,还支持和cgroup配合,实现分层调度(hierarchical scheduling).BFQ hierarchical scheduling supportCONFIG_CGROUP_BFQIO通过cgroup文件系统接口,允许将BFQ分层使用(类似CONFIG_CFQ_GROUP_IOSCHED),这个子系统的名字是"bfqio".Default I/O scheduler.如果上述调度器都是模块,那么将使用最简单的内置NOOP调度器.调度器只是一个简单的FIFO队列,不对IO请求做任何重新排序处理(但还是会做一定程度的归并),适合于SSD/U盘/内存/SAN(Storage Area Networks)/虚拟机中的硬盘/iSCSI/硬RAID等无需寻道的存储设备,重点是可以节约CPU资源,但不适用于普通硬盘这样的需要依靠磁头来定位的设备.另外,有人说拥有/技术(能够自动重新排序)的硬盘也适合用NOOP调度器,这个说法其实并不那么合理,但笔者在此不敢断言,希望读者在严谨的测试之后再做定夺.
Processor type and features中央处理器(CPU)类型及特性
DMA memory allocation supportCONFIG_ZONE_DMA允许为寻址宽度不足32位的设备(也就是ISA和总线设备)在的前16MB范围内(也就是传统上x86_32架构的区域)分配内存.不确定的选"Y".[提示]LPC总线通常和主板上的南桥物理相连,通常连接了一系列的传统设备:BIOS,PS/2键盘,PS/2鼠标,软盘,并口设备,串口设备,某些集成声卡,TPM(可信平台模块),等等.[题外话]Symmetric multi-processing supportCONFIG_SMP支持,如果你有多个CPU或者使用的是多核CPU就选上.Support x2apicCONFIG_X86_X2APIC支持.具有这个特性的CPU可以使用32位的APIC ID(可以支持海量的CPU),并且可以使用MSR而不是mmio去访问 local APIC (更加高效).可以通过"grep x2apic /proc/cpuinfo"命令检查你的CPU是否支持这个特性.注意:有时候还需要在BIOS中也开启此特性才真正生效.[提示]在虚拟机中,还需要VMM的支持(例如qemu-kvm).Enable MPS tableCONFIG_X86_MPPARSE如果是不支持acpi特性的古董级SMP系统就选上.但现今的64位系统早都已经支持acpi了,所以可以安全的关闭.Support for extended (non-PC) x86 platformsCONFIG_X86_EXTENDED_PLATFORM支持非标准的PC平台: Numascale NumaChip, ScaleMP vSMP, SGI Ultraviolet. 绝大多数人都遇不见这些平台.Numascale NumaChipCONFIG_X86_NUMACHIP 平台支持ScaleMP vSMPCONFIG_X86_VSMP 平台支持SGI UltravioletCONFIG_X86_UV 平台支持Intel Low Power Subsystem SupportCONFIG_X86_INTEL_LPSS为 Intel
中的 Intel Low Power Subsystem 技术提供支持.这个芯片组主要是为采用LGA1150的处理器提供支持.Single-depth WCHAN outputCONFIG_SCHED_OMIT_FRAME_POINTER使用简化的 /proc/&PID&/wchan 值,禁用此选项会使用更加精确的wchan值(可以在"ps -l"结果的WCHAN域看到),但会轻微增加调度器消耗.Linux guest supportCONFIG_HYPERVISOR_GUEST如果这个内核将在里面运行就开启,否则就关闭.Enable paravirtualization codeCONFIG_PARAVIRT半虚拟化(paravirtualization)支持.paravirt-ops debuggingCONFIG_PARAVIRT_DEBUG仅供调试.是内核通用的半虚拟化接口.Paravirtualization layer for spinlocksCONFIG_PARAVIRT_SPINLOCKS半虚拟化的自旋锁支持.开启之后运行在虚拟机里的内核速度会加快,但是运行在物理CPU上的宿主内核运行效率会降低(最多可能会降低5%).请根据实际情况选择.Xen guest supportCONFIG_XEN半虚拟化技术支持Enable Xen debug and tuning parameters in debugfsCONFIG_XEN_DEBUG_FS为Xen在debugfs中输出各种统计信息和调整选项.对性能有严重影响.仅供调试.KVM Guest support (including kvmclock)CONFIG_KVM_GUEST客户机支持(包括).Paravirtual steal time accountingCONFIG_PARAVIRT_TIME_ACCOUNTING允许进行更细粒度的 task steal time 统计.会造成性能的略微降低.仅在你确实需要的时候才开启.MemtestCONFIG_MEMTEST为内核添加功能,也就是添加"memtest"内核引导参数以支持对内存进行"体检".仅在你确实知道这是什么东西并且确实需要的时候再开启.否则请关闭.Processor family处理器系列,请按照你实际使用的CPU选择."Generic-x86-64"表示通用于所有x86-64平台,不针对特定类型的CPU进行优化.Supported processor vendorsCONFIG_PROCESSOR_SELECT支持的CPU厂商,按实际情况选择.Enable DMI scanningCONFIG_DMI允许扫描()/()以,从而对已知的bug bios进行规避.具体涉及到哪些机器可参见"drivers/acpi/blacklist.c"文件.除非确定你的机器没有bug,否则请开启此项.GART IOMMU supportCONFIG_GART_IOMMU
支持. 图形地址重映射表()可以将物理地址不连续的系统内存映射成看上去连续的图形内存交给GPU使用,是一种挖CPU内存补GPU内存机制,这种机制也可以被认为是一种"伪IOMMU"(缺乏地址空间隔离和访问控制).开启此选项以后,在内存大于3G的系统上,传统的32位总线(PCI/AGP)的设备将可以使用完全的方式直接访问原本超出32位寻址范围之外的系统内存区域.具体方法是:通过编程让设备在受GART控制的显存区域工作,然后使用GART将这个地址映射为真实的物理地址(4GB以上)来实现的.USB/声卡/IDE/SATA之类的设备常常需要它.开启此选项之后,除非同时开启了CONFIG_IOMMU_DEBUG选项或者使用了"iommu=force"内核引导参数,否则此特性仅在条件满足的情况下(内存足够大且确有支持GART的设备)激活.建议内存大于3G的系统上选"Y".IBM Calgary IOMMU supportCONFIG_CALGARY_IOMMUIBM xSeries/pSeries 系列服务器的
支持.Should Calgary be enabled by default?CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT开启此选项表示默认启用Calgary特性,关闭此选项表示默认禁用Calgary特性(可以使用"iommu=calgary"内核引导参数开启).Enable Maximum number of SMP Processors and NUMA NodesCONFIG_MAXSMP让内核支持x86_64平台所能支持的最大SMP处理器数量和最大NUMA节点数量.主要用于调试目的.Maximum number of CPUsCONFIG_NR_CPUS支持的最大CPU数量,每个CPU要占8KB的内核镜像,最小有效值是"2",最大有效值是"512".注意:对于多核CPU而言,每个核算一个.SMT (Hyperthreading) scheduler supportCONFIG_SCHED_SMTIntel超线程技术()支持.Multi-core scheduler supportCONFIG_SCHED_MC针对多核CPU进行调度策略优化Preemption Model内核抢占模式No Forced Preemption (Server)CONFIG_PREEMPT_NONE禁止内核抢占,这是Linux的传统模式,可以得到最大的吞吐量,适合服务器和科学计算环境Voluntary Kernel Preemption (Desktop)CONFIG_PREEMPT_VOLUNTARY自愿内核抢占,通过在内核中设置明确的抢占点以允许明确的内核抢占,可以提高响应速度,但是对吞吐量有不利影响.适合普通桌面环境的Preemptible Kernel (Low-Latency Desktop)CONFIG_PREEMPT主动内核抢占,允许抢占所有内核代码,对吞吐量有更大影响,适合需要运行实时程序的场合或者追求最快响应速度的桌面环境.Reroute for broken boot IRQsCONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS这是一个对某些(在某些情况下会发送多余的"")的修复功能.开启此选项之后,仅对有此bug的芯片组生效.要检查哪些芯片组有此bug可以查看""文件中的"quirk_reroute_to_boot_interrupts_intel"函数.Machine Check / overheating reportingCONFIG_X86_MCE()支持.让CPU检测到硬件故障(过热/数据错误)时通知内核,以便内核采取相应的措施(如显示一条提示信息或关机等).更多信息可以"man "看看.可以通过"grep mce /proc/cpuinfo"检查CPU是否支持此特性,若支持建议选中,否则请关闭.当然,如果你对自己的硬件质量很放心,又是桌面系统的话,不选也无所谓.Intel MCE featuresCONFIG_X86_MCE_INTELIntel CPU 支持AMD MCE featuresCONFIG_X86_MCE_AMDAMD CPU 支持Machine check injector supportCONFIG_X86_MCE_INJECTMCE注入支持,仅用于调试Dell laptop supportCONFIG_I8KDell Inspiron 8000 笔记本的
驱动().该驱动可以读取CPU温度和风扇转速,进而帮助控制风扇转速.该驱动仅针对 Dell Inspiron 8000 笔记本进行过测试,所以不保证一定能适用于其他型号的Dell笔记本.CPU microcode loading supportCONFIG_MICROCODECPU的支持,建议选中.CPU的微代码更新就像是给CPU打补丁.比如在Gentoo下,可以使用"emerge microcode-ctl"安装服务,再把这个服务加入boot运行级即可在每次开机时自动更新CPU微代码.其他Linux系统可以参考.Intel microcode loading supportCONFIG_MICROCODE_INTEL支持AMD microcode loading supportCONFIG_MICROCODE_AMDAMD CPU 微代码支持Early load microcodeCONFIG_MICROCODE_INTEL_EARLY支持从initrd镜像首部加载微代码,以便尽可能早的更新CPU微代码.即使在initrd首部并未嵌入微代码也不会造成问题,所以"Y"是安全的.不过你真的需要吗?笔者认为你一般并不需要:)/dev/cpu/*/msr - Model-specific register supportCONFIG_X86_MSR/dev/cpu/*/msr 设备支持.也就是允许用户空间的特权进程(使用rdmsr与wrmsr指令)访问x86的MSR寄存器().MSR的作用主要用于调试,程序执行跟踪,性能及状态监控,以及触发特定的CPU特性(依CPU的不同而不同).工具可以转储出MSR的内容.不确定的可以选"N"./dev/cpu/*/cpuid - CPU information supportCONFIG_X86_CPUID/dev/cpu/*/cpuid 设备支持.可以通过命令获得详细的().不确定的可以选"N".Enable 1GB pages for kernel pagetablesCONFIG_DIRECT_GBPAGES允许使用大小为1GB的并进行直线映射(linear mapping),需要高端CPU的支持(可以用"grep pdpe1gb /proc/cpuinfo"命令检查).这可以减小()的压力,从而提升系统的性能,这对于拥有海量内存并且运行某些特定应用(PosgreSQL,MySQL,Java,Memcached,KVM,Xen...)的系统来说比较有意义.如果你的CPU支持,可以选"Y".Numa Memory Allocation and Scheduler SupportCONFIG_NUMA开启
支持.虽然说集成了内存控制器的CPU都属于NUMA架构.但事实上,对于大多数只有一颗物理CPU的个人电脑而言,即使支持NUMA架构,也没必要开启此特性.可以参考.此外,对于不支持"虚拟NUMA",或"虚拟NUMA"被禁用的虚拟机(即使所在的物理机是NUMA系统),也应该关闭此项.Old style AMD Opteron NUMA detectionCONFIG_AMD_NUMA因为AMD使用一种旧式的方法读取NUMA配置信息(新式方法是CONFIG_X86_64_ACPI_NUMA),所以如果你使用的是AMD多核CPU,建议开启.不过,即使开启此选项,内核也会优先尝试CONFIG_X86_64_ACPI_NUMA方法,仅在失败后才会使用此方法,所以即使你不能确定CPU的类型也可以安全的选中此项.ACPI NUMA detectionCONFIG_X86_64_ACPI_NUMA使用基于 ACPI SRAT(System Resource Affinity Table) 技术的NUMA节点探测方法.这也是检测NUMA节点信息的首选方法,建议选中.NUMA emulationCONFIG_NUMA_EMU仅供开发调试使用Maximum NUMA Nodes (as a power of 2)CONFIG_NODES_SHIFT允许的最大NUMA节点数.需要注意其计算方法:最大允许节点数=2CONFIG_NODES_SHIFT.也就是说这里设置的值会被当做2的指数使用.取值范围是[1,10],也就最多允许1024个节点.Memory model."Sparse Memory"主要用来支持内存热插拔,相比其他两个旧有的内存模式,代码复杂性也比较低,而且还拥有一些性能上的优势,对某些架构而言是唯一的可选项.其他两个旧有的内存模式是:""和"".Sparse Memory virtual memmapCONFIG_SPARSEMEM_VMEMMAP对于64位CPU而言,开启此选项可以简化pfn_to_page/page_to_pfn的操作,从而提高内核的运行效率.但是在32位平台则建议关闭.更多细节可以参考.Enable to assign a node which has only movable memoryCONFIG_MOVABLE_NODE允许对一个完整的NUMA节点(CPU和对应的内存)进行热插拔.一般的服务器和个人电脑不需要这么高级的特性.Allow for memory hot-addCONFIG_MEMORY_HOTPLUG支持向运行中的系统添加内存.也就是内存热插支持.Allow for memory hot removeCONFIG_MEMORY_HOTREMOVE支持从运行中的系统移除内存.也就是内存热拔支持.Allow for balloon memory compaction/migrationCONFIG_BALLOON_COMPACTION允许
压缩/迁移.内存的是指虚拟机在运行时动态地调整它所占用的宿主机内存资源,该技术在节约内存和灵活分配内存方面有明显的优势,目前所有主流虚拟化方案都支持这项技术(前提是客户机操作系统中必须安装有相应的balloon驱动).由于内存的动态增加和减少会导致内存过度碎片化,特别是对于2M尺寸的连续大内存页来说更加严重,从而严重降低内存性能.允许balloon内存压缩和迁移可以很好的解决在客户机中使用大内存页时内存过度碎片化问题.如果你打算在虚拟机中使用大内存页(huge page),那么建议开启,否则建议关闭.Allow for memory compactionCONFIG_COMPACTION允许对进行.主要是为了解决大内存页的碎片问题.建议在使用大内存页的情况下开启此项,否则建议关闭.Page migrationCONFIG_MIGRATION允许在保持虚拟内存页地址不变的情况下移动其所对应的物理内存页的位置.这主要是为了解决两个问题:(1)在NUMA系统上,将物理内存转移到相应的节点上,以加快CPU与内存之间的访问速度.(2)在分配大内存页的时候,可以避免碎片问题.Enable bounce buffersCONFIG_BOUNCE为那些不能直接访问所有内存范围的驱动程序开启支持.当CONFIG_ZONE_DMA被开启后,这个选项会被默认开启(当然,你也可以在这里手动关闭).这主要是为了那些不具备功能的PCI/ISA设备而设,但它对性能有些不利影响.在支持IOMMU的设备上,应该关闭它而是用IOMMU来代替.Enable KSM for page mergingCONFIG_KSM()支持:周期性的扫描那些被应用程序标记为"可合并"的地址空间,一旦发现有内容完全相同的页面,就将它们合并为同一个页面,这样就可以节约内存的使用,但对性能有不利影响.推荐和内核虚拟机KVM()或者其他支持"MADV_MERGEABLE"特性的应用程序一起使用.KSM并不默认开启,仅在应用程序设置了"MADV_MERGEABLE"标记,并且 /sys/kernel/mm/ksm/run 被设为"1"的情况下才会生效.Low address space to protect from user allocationCONFIG_DEFAULT_MMAP_MIN_ADDR2009年,内核曾经爆过一个严重的,由于其根源是将NULL指针映射到地址"0"所致,所以从2.6.32版本以后,为了防止此类漏洞再次造成严重后果,特别设置了此选项,用于指定受保护的内存低端地址范围(可以在系统运行时通过
进行调整),这个范围内的地址禁止任何用户态程序的写入,以从根本上堵死此类漏洞可能对系统造成的损害.但内核这种强加的限制,对于需要使用vm86系统调用(用于在保护模式的进程中模拟8086的实模式)或者需要映射此低端地址空间的程序(bitbake,dosemu,qemu,wine,...)来说,则会造成不兼容,不过目前这些程序的新版本都进行了改进,以适应内核的这种保护.一般情况下,"4096"是个明智的选择,或者你也可以保持默认值.Enable recovery from hardware memory errorsCONFIG_MEMORY_FAILURE在具备恢复机制的系统上,允许内核在物理内存中的发生数据错误的情况下,依然坚强的纠正错误并恢复正常运行.这需要有相应的硬件(通常是ECC内存)支持.有的选,没有的就别选了.HWPoison pages injectorCONFIG_HWPOISON_INJECT仅用于调试.Transparent Hugepage SupportCONFIG_TRANSPARENT_HUGEPAGE大多数现代计算机体系结构都支持多种不同的大小(比如x86_64支持4K和2M以及1G[需要cpu-flags中含有"pdpe1gb"]).大于4K的内存页被称为""().()是位于CPU内部的(虚拟地址到物理地址的映射表)缓冲区,既高速又很宝贵(尺寸很小).如果系统内存很大(大于4G)又使用4K的内存页,那么分页表将会变得很大而难以在CPU内缓存,从而导致较高的TLB不命中概率,进而降低系统的运行效率.开启大内存页支持之后,就可以使用大页(2M或1G),从而大大缩小分页表的尺寸以大幅提高TLB的命中率,进而.传统上使用大内存页的方法是通过Hugetlbfs虚拟文件系统(CONFIG_HUGETLBFS),但是hugetlbfs需要专门进行配置以及应用程序的特别支持.所以从2.6.38版本开始引入了(),目标是替代先前的Hugetlbfs虚拟文件系统(CONFIG_HUGETLBFS).THP允许内核在可能的条件下,透明的(对应用程序来说)()与,THP不像hugetlbfs那样需要专门进行配置以及应用程序的特别支持.THP将这一切都交给操作系统来完成,也不再需要额外的配置,对于应用程序完全透明,因而可用于更广泛的应用程序.这对于数据库/KVM等需要使用大量内存的应用来说,可以提升其效能,但对于内存较小(4G或更少)的个人PC来说就没啥必要了.详见""文档.Transparent Hugepage Support sysfs defaults设置 /sys/kernel/mm/transparent_hugepage/enabled 文件的默认值."always"表示总是对所有应用程序启用透明大内存页支持,"madvise"表示仅对明确要求该特性的程序启用.建议选"always".Cross Memory SupportCONFIG_CROSS_MEMORY_ATTACH支持,也就是支持.从而允许有权限的进程直接读取/写入另外一个进程的地址空间.现在它们只用于快速进程通信,也可以用于调试程序.未来也许还会有其他用途.Enable cleancache driver to cache clean pages if tmem is presentCONFIG_CLEANCACHE可以被看作是内存页的""(),当回收内存页时,先不把它清空,而是把其加入到内核不能直接访问的""中,这样支持Cleancache的文件系统再次访问这个页时可以直接从"transcendent memory"加载它,从而减少磁盘IO的损耗.目前只有和支持"transcendent memory",不过将来会有越来越多的应用支持.开启此项后即使此特性不能得到利用,也仅对性能有微小的影响,所以建议开启.更多细节请参考""文件.Enable frontswap to cache swap pages if tmem is presentCONFIG_FRONTSWAP是和Cleancache非常类似的东西,在传统的swap前加一道内存缓冲(同样位于"transcendent memory"中).目的也是减少swap时的磁盘读写.建议开启.Check for low memory corruptionCONFIG_X86_CHECK_BIOS_CORRUPTION低位内存脏数据检查,即使开启此选项,默认也不会开启此功能(需要明确使用"memory_corruption_check=1"内核引导选项).这些脏数据通常被认为是有bug的BIOS引起的,默认每60秒(可以通过memory_corruption_check_period内核参数进行调整)扫描一次0-64k(可以通过memory_corruption_check_size内核参数进行调整)之间的区域.这种检查所占用的开销非常小,基本可以忽略不计.如果始终检查到错误,则可以通过"memmap="内核引导参数来避免使用这段内存.一般没必要选中,如果你对BIOS不放心,带着它试运行一段时间,确认没问题之后再去掉.Set the default setting of memory_corruption_checkCONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK设置memory_corruption_check的默认值,选中表示默认开启(相当于使用"memory_corruption_check=1"内核引导选项),不选中表示默认关闭.Amount of low memory, in kilobytes, to reserve for the BIOSCONFIG_X86_RESERVE_LOW为BIOS设置保留的低端地址(默认是64K).内存的第一页(4K)存放的必定是BIOS数据,内核不能使用,所以必须要保留.但是有许多BIOS还会在suspend/resume/热插拔等事件发生的时候使用更多的页(一般在0-64K范围),所以默认保留0-64K范围.如果你确定自己的BIOS不会越界使用内存的话,可以设为"4",否则请保持默认值.但是也有一些很奇葩的BIOS会使用更多的低位内存,这种情况下可以考虑设为"640"以保留所有640K的低位内存区域.MTRR (Memory Type Range Register) supportCONFIG_MTRR()是CPU内的一组MSR(Model-specific registers),其作用是告诉CPU以哪种模式(write-back/uncachable)存取各内存区段效率最高.这对于AGP/PCI显卡意义重大,因为write-combining技术可以将若干个总线写传输捆绑成一次较大的写传输操作,可以将图像写操作的性能提高2.5倍或者更多.这段代码有着通用的接口,其他CPU的寄存器同样能够使用该功能.简而言之,开启此选项是个明智的选择.MTRR cleanup supportCONFIG_MTRR_SANITIZER的意思是将MTRR的连续输出转为离散的输出,这样X驱动就可以在其中添加writeback项,算是一种优化措施.建议开启.可以使用"mtrr_chunk_size"来限制最大的连续块尺寸.MTRR cleanup enable value (0-1)CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT"1"表示默认开启CONFIG_MTRR_SANITIZER特性,相当于使用"enable_mtrr_cleanup","0"表示默认关闭CONFIG_MTRR_SANITIZER特性,相当于使用"disable_mtrr_cleanup".建议设为"1".MTRR cleanup spare reg num (0-7)CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT这里设定的值等价于使用内核引导参数"mtrr_spare_reg_nr=N"中的"N".也就是告诉内核reg0N可以被清理或改写(参见"/proc/mtrr"文件).在多数情况下默认值是"1",其含义是 /proc/mtrr 中的 reg01 将会被映射.一般保持其默认值即可.修改此项的值通常是为了解决某些.x86 PAT supportCONFIG_X86_PAT是对MTRR的补充,且比MTRR更灵活.如果你的CPU支持PAT(grep pat /proc/cpuinfo),那么建议开启.仅在开启后导致无法正常启动或者显卡驱动不能正常工作的情况下才需要关闭.x86 architectural random number generatorCONFIG_ARCH_RANDOMIntel 从
微架构开始(对于Atom来说是从Silvermont开始),在CPU中集成了一个高效的硬件随机数生成器(称为"Bull Mountain"技术),并引入了一个新的x86指令"",可以非常高效的产生随机数.此选项就是对此特性的支持.Supervisor Mode Access PreventionCONFIG_X86_SMAP是Intel从微架构开始引入的一种新特征,它在CR4寄存器上引入一个新标志位SMAP,如果这个标志为1,内核访问用户进程的地址空间时就会触发一个页错误,目的是为了防止内核因为自身错误意外访问用户空间,这样就可以避免一些内核漏洞所导致的安全问题.但是由于内核在有些时候仍然需要访问用户空间,因此intel提供了两条指令STAC和CLAC用于临时打开/关闭这个功能,反复使用STAC和CLAC会带来一些轻微的性能损失,但考虑到增加的安全性,还是建议开启.EFI runtime service supportCONFIG_EFI支持.如果你打算(2009年之后的机器基本都已经是UEFI规格了),那么就必须开启此项(开启后也依然可以在传统的BIOS机器上启动).与传统的BIOS相差很大.虽然Linux受到了所谓""问题的阻挠(已经),但是UEFI依然将迅速一统江湖.[提示]在UEFI平台上安装Linux的关键之一是首先要用一个支持UEFI启动的LiveCD以UEFI模式启动机器.EFI stub supportCONFIG_EFI_STUB 支持.如果开启此项,就可以不通过GRUB2之类的引导程序来加载内核,而直接由EFI固件进行加载,这样就可以不必安装引导程序了.不过这是一个看上去很美的特性,由于EFI固件只是简单的加载内核并运行,所以缺点有三:(1)不能在传统的BIOS机器上启动.(2)不能给内核传递引导参数.(3)不能使用intrd.不过,针对后两点的解决办法是:使用CONFIG_CMDLINE和CONFIG_INITRAMFS_SOURCE.更多细节可参考""文档.Enable seccomp to safely compute untrusted bytecodeCONFIG_SECCOMP允许使用技术安全地运算非信任代码.通过使用管道或其他进程可用的通信方式作为文件描述符(支持读/写调用),就可以利用SECCOMP把这些应用程序隔离在它们自己的地址空间.这是一种有效的安全沙盒技术.除非你是嵌入式系统,否则不要关闭.Enable -fstack-protector buffer overflow detectionCONFIG_CC_STACKPROTECTOR开启GCC的"-fstack-protector"命令行选项,以使用.这样可以有效的防御以堆栈溢出为代表的缓冲区溢出攻击,不过系统的运行速度也会受到一些影响.服务器之类强调安全的场合建议开启,个人PC之类的就不是很有必要了.Timer frequency内核时钟频率.对于要求快速响应的场合,比如桌面环境,建议使用1000Hz,而对于不需要快速响应的SMP/NUMA服务器,建议使用250Hz或100Hz或300Hz(主要处理多媒体数据).kexec system callCONFIG_KEXEC提供系统调用,可以(不一定必须是Linux内核),不过这个特性并不总是那么可靠.如果你不确定是否需要它,那么就是不需要.kernel crash dumpsCONFIG_CRASH_DUMP当内核崩溃时自动导出运行时信息的功能,主要用于调试目的.更多信息请参考""文件.kexec jumpCONFIG_KEXEC_JUMP 支持.这是对CONFIG_KEXEC的增强功能,仅在你确实明白这是干啥的情况下再开启,否则请关闭.Physical address where the kernel is loadedCONFIG_PHYSICAL_START加载内核的物理地址.如果内核不是可重定位的(CONFIG_RELOCATABLE=n),那么bzImage会将自己解压到该物理地址并从此地址开始运行,否则,bzImage将忽略此处设置的值,而从引导装载程序将其装入的物理地址开始运行.仅在你确实知道自己是在干什么的情况下才可以改变该值,否则请保持默认.Build a relocatable kernelCONFIG_RELOCATABLE使内核可以,主要用于调试目的.仅在你确实知道为什么需要的时候再开启,否则请关闭.Support for hot-pluggable CPUsCONFIG_HOTPLUG_CPU热插拔CPU支持(通过 /sys/devices/system/cpu 进行控制).Set default setting of cpu0_hotpluggableCONFIG_BOOTPARAM_HOTPLUG_CPU0开启/关闭此项的意思是设置"cpu0_hotpluggable"的默认值为"on/off".开启此项表示默认将CPU0设置为允许热插拔.Debug CPU0 hotplugCONFIG_DEBUG_HOTPLUG_CPU0仅用于调试目的.Compat VDSO supportCONFIG_COMPAT_VDSO是否将(Virtual Dynamic Shared Object)映射到旧式的确定性地址.如果Glibc版本大于等于2.3.3选"N",否则就选"Y".Built-in kernel command lineCONFIG_CMDLINE_BOOL将内核引导参数直接编进来.在无法向内核传递引导参数的情况下(比如在嵌入式系统上,或者想使用 EFI stub kernel),这就是唯一的救命稻草了.如果你使用grub之类的引导管理器,那么就可以不需要此特性.Built-in kernel command stringCONFIG_CMDLINE将要编译进内核的引导参数字符串.Built-in command line overrides boot loader argumentsCONFIG_CMDLINE_OVERRIDE开启此项表示完全忽略引导加载器传递过来的参数,并仅仅只使用CONFIG_CMDLINE所指定的参数.通常情况下建议关闭此项,除非你确定引导加载器在传递内核引导参数的时候不能正常工作.
Power management and ACPI options电源管理和ACPI选项
Suspend to RAM and standbyCONFIG_SUSPEND"休眠到内存"(ACPI S3)支持.也就是系统休眠后,除了内存之外,其他所有部件都停止工作,重开机之后可以直接从内存中恢复运行状态.要使用此功能,你需要执行"echo mem & /sys/power/state"命令,还需要在BIOS中开启S3支持,否则可能会有问题.Enable freezer for suspend to RAM/standbyCONFIG_SUSPEND_FREEZER选"Y".除非你知道自己在做什么Hibernation (aka 'suspend to disk')CONFIG_HIBERNATION"休眠到硬盘"(ACPI S4)支持.也就是将内存的内容保存到硬盘(hibernation),所有部件全都停止工作.要使用此功能,你首先需要使用内核引导参数"resume=/dev/swappartition",然后执行"echo disk & /sys/power/state"命令.如果你不想从先前的休眠状态中恢复,那么可以使用"noresume"内核引导参数.更多信息,可以参考""文件.Default resume partitionCONFIG_PM_STD_PARTITION默认的休眠分区.这个分区必须是swap分区.不过这里设置的值会被明确的内核引导参数中的值覆盖.Opportunistic sleepCONFIG_PM_AUTOSLEEP这是一种从.这个特性在安卓系统上被称为"suspend blockers"或"wakelocks".这是一种更激进的电源管理模式,以尽可能节约电力为目的.系统默认就处于休眠状态,仅为内存和少数唤醒系统所必须的设备供电,当有任务(唤醒源)需要运行的时候才唤醒相关组件工作,工作完成后又立即进入休眠状态.不过这些特性需要相应的设备驱动程序的支持.目前除了安卓设备,在PC和服务器领域,能够利用此特性的驱动还比较少,不过这是一项非常有前途的电源技术,喜欢尝鲜的可以考虑开启.User space wakeup sources interfaceCONFIG_PM_WAKELOCKS允许用户空间的程序通过sys文件系统接口,创建/激活/撤销系统的"唤醒源".需要与CONFIG_PM_AUTOSLEEP配合使用.Maximum number of user space wakeup sources (0 = no limit)CONFIG_PM_WAKELOCKS_LIMIT用户空间程序允许使用的"唤醒源"数量,"0"表示无限,最大值是"100000".Garbage collector for user space wakeup sourcesCONFIG_PM_WAKELOCKS_GC对"唤醒源"对象使用垃圾回收.主要用于调试目的和Android环境.Run-time PM core functionalityCONFIG_PM_RUNTIME允许IO设备(比如硬盘/网卡/声卡)在系统运行时进入省电模式,并可在收到(硬件或驱动产生的)唤醒信号后恢复正常.此功能通常需要硬件的支持.建议在笔记本/嵌入式等需要节约电力的设备上选"Y".Power Management Debug SupportCONFIG_PM_DEBUG仅供调试使用ACPI (Advanced Configuration and Power Interface) SupportCONFIG_ACPI()包括了软件和硬件方面的规范,目前已被软硬件厂商广泛支持,并且取代了许多过去的配置与电源管理接口,包括 PnP BIOS (Plug-and-Play BIOS), MPS(CONFIG_X86_MPPARSE), APM(Advanced Power Management) 等.总之,ACPI已经成为x86平台必不可少的组件,如果你没有特别的理由,务必选中此项.Deprecated /proc/acpi filesCONFIG_ACPI_PROCFS过时的 /proc/acpi 接口支持,建议关闭.Deprecated power /proc/acpi directoriesCONFIG_ACPI_PROCFS_POWER过时的 /proc/acpi 接口支持,建议关闭.EC read/write access through /sys/kernel/debug/ecCONFIG_ACPI_EC_DEBUGFS仅供调试使用.Deprecated /proc/acpi/event supportCONFIG_ACPI_PROC_EVENT过时的 /proc/acpi/event 接口支持,建议关闭.AC AdapterCONFIG_ACPI_AC允许在外接交流电源和内置电池之间进行切换.BatteryCONFIG_ACPI_BATTERY允许通过 /proc/acpi/battery 接口查看电池信息.ButtonCONFIG_ACPI_BUTTON允许守护进程通过 /proc/acpi/event 接口捕获power/sleep/lid(合上笔记本)按钮事件,并执行相应的动作,软关机(poweroff)也需要它的支持.VideoCONFIG_ACPI_VIDEO对主板上的集成显卡提供ACPI支持.注意:仅支持集成显卡.FanCONFIG_ACPI_FAN允许用户层的程序对风扇进行控制(开/关/查询状态)DockCONFIG_ACPI_DOCK支持兼容ACPI规范的扩展坞(比如 IBM Ultrabay 和 Dell Module Bay)支持.ProcessorCONFIG_ACPI_PROCESSOR在支持 ACPI C2/C3 的CPU上,将ACPI安装为idle处理程序.有几种CPU频率调节驱动依赖于它.而且目前的CPU都已经支持ACPI规范,建议开启此项.IPMICONFIG_ACPI_IPMI允许ACPI使用(智能平台管理接口)的请求/应答消息访问BMC(主板管理控制器).IPMI通常出现在服务器中,以允许通过诸如这样的工具监视服务器的物理健康特征(温度/电压/风扇状态/电源状态).Processor AggregatorCONFIG_ACPI_PROCESSOR_AGGREGATOR支持 ACPI 4.0 加入的处理器聚合器()功能,以允许操作系统对系统中所有的CPU进行统一的配置和控制.目前只支持逻辑处理器idling功能,其目标是降低耗电量.Thermal ZoneCONFIG_ACPI_THERMALACPI thermal zone 支持.系统温度过高时可以及时调整工作状态以避免你的CPU被烧毁.目前所有CPU都支持此特性.务必开启.参见CONFIG_THERMAL选项.NUMA supportCONFIG_ACPI_NUMA通过读取系统固件中的ACPI表,获得NUMA系统的CPU及物理内存分布信息.NUMA系统必选.Custom DSDT Table file to includeCONFIG_ACPI_CUSTOM_DSDT_FILE允许将一个定制过的DSDT编译进内核.详情参见""文档.看不懂的请保持空白.ACPI tables override via initrdCONFIG_ACPI_INITRD_TABLE_OVERRIDE允许initrd更改
中的任意内容. ACPI tables 是BIOS提供给OS的硬件配置数据,包括系统硬件的电源管理和配置管理.详情参见""文件.Debug StatementsCONFIG_ACPI_DEBUG详细的ACPI调试信息,不搞开发就别选.PCI slot detection driverCONFIG_ACPI_PCI_SLOT将每个PCI插槽都作为一个单独的条目列在 /sys/bus/pci/slots/ 目录中,有助于将设备的物理插槽位置与逻辑的PCI总线地址进行对应.不确定的选"No".Power Management Timer SupportCONFIG_X86_PM_TIMER,简称"ACPI Timer",是一种集成在主板上的硬件时钟发生器,提供3.579545MHz固定频率.这是比较传统的硬件时钟发生器(HPET则是比较新型的硬件时钟发生器),目前所有的主板都支持,而且是ACPI规范不可分割的部分.除非你确定不需要,否则必选.Container and Module DevicesCONFIG_ACPI_CONTAINER支持 NUMA节点/CPU/内存 的热插拔. Device ID: ACPI0004, PNP0A05, PNP0A06Memory HotplugCONFIG_ACPI_HOTPLUG_MEMORY内存热插拔支持. Device ID: PNP0C80Smart Battery SystemCONFIG_ACPI_SBS()可以让笔记型电脑显示及管理详细精确的电池状态信息.的笔记本电脑必备利器.但遗憾的是并不是所有笔记本都支持这项特性.Hardware Error DeviceCONFIG_ACPI_HEDHardware Error Device (Device ID: PNP0C33) 能够通过 SCI 报告一些硬件错误(通常是已经被纠正的错误).如果你的系统中有设备ID为"PNP0C33"的设备(比如某些Intel芯片组),那么就选上.Allow ACPI methods to be inserted/replaced at run timeCONFIG_ACPI_CUSTOM_METHOD允许在不断电的情况下直接对ACPI的功能进行删改,包含一定危险性,它允许root任意修改内存中内核空间的内容.仅用于调试.Boottime Graphics Resource Table supportCONFIG_ACPI_BGRT在 /sys/firmware/acpi/bgrt/ 中显示 ACPI Boottime Graphics Resource Table ,以允许操作系统获取固件中的启动画面(splash).ACPI Platform Error Interface (APEI)CONFIG_ACPI_APEI是的一部分,是定义在 ACPI 4.0 规范中的一个面向硬件错误管理的接口,主要是为了统一 firmware/BIOS 和 OS 之间的错误交互机制,使用标准的错误接口进行管理,同时也扩展了错误接口的内容以便实现更加灵活丰富的功能.APEI Generic Hardware Error SourceCONFIG_ACPI_APEI_GHES"Firmware First Mode"支持.由于BIOS/FIRMWARE是平台相关的,因此BIOS/FIRMWARE比OS更清楚硬件平台的配置情况,甚至包含各种必须的修正/定制/优化.这样,在"Firmware First"模式下,BIOS/FIRMWARE利用这一优势,可以有针对性的对发生的硬件错误进行分析/处理/分发,也可以更准确的记录错误的现场信息.这样,不但对硬件错误可以做出更准确,更复杂的处理,而且可以降低OS的复杂性和冗余度.建议开启.APEI PCIe AER logging/recovering supportCONFIG_ACPI_APEI_PCIEAER让 PCIe AER errors 首先通过 APEI firmware 进行报告.APEI memory error recovering supportCONFIG_ACPI_APEI_MEMORY_FAILURE让 Memory errors 首先通过 APEI firmware 进行报告.APEI Error INJection (EINJ)CONFIG_ACPI_APEI_EINJ仅供调试使用.APEI Error Record Serialization Table (ERST) Debug SupportCONFIG_ACPI_APEI_ERST_DEBUG仅供调试使用SFI (Simple Firmware Interface) SupportCONFIG_SFI简单固件接口规范()使用一种轻量级的简单方法(通过内存中的一张静态表格)从firmware向操作系统传递信息.目前这个规范仅用于第二代 Intel Atom 平台,其核心名称是"".CPU Frequency scalingCONFIG_CPU_FREQ子系统允许动态改变CPU主频,达到省电和降温的目的.现如今的CPU都已经支持动态频率调整,建议开启.不过,如果你是为虚拟机编译内核,就没有必要开启了,由宿主机内核去控制就OK了.CPU frequency translation statisticsCONFIG_CPU_FREQ_STAT通过sysfs文件系统输出CPU频率变化的统计信息CPU frequency translation statistics detailsCONFIG_CPU_FREQ_STAT_DETAILS输出更详细的CPU频率变化统计信息Default CPUFreq governor默认的CPU频率.不同策略拥有不同的.'performance' governorCONFIG_CPU_FREQ_GOV_PERFORMANCE'性能'优先,静态的将频率设置为cpu支持的最高频率'powersave' governorCONFIG_CPU_FREQ_GOV_POWERSAVE'节能'优先,静态的将频率设置为cpu支持的最低频率'userspace' governor for userspace frequency scalingCONFIG_CPU_FREQ_GOV_USERSPACE既允许手动调整cpu频率,也允许用户空间的程序动态的调整cpu频率(需要额外的调频软件)'ondemand' cpufreq policy governorCONFIG_CPU_FREQ_GOV_ONDEMAND'立即响应',周期性的考察CPU负载并自动的动态调整cpu频率(不需要额外的调频软件),适合台式机'conservative' cpufreq governorCONFIG_CPU_FREQ_GOV_CONSERVATIVE'保守',和'ondemand'相似,但是频率的升降是渐变式的(幅度不会很大),更适合用于笔记本/PDA/x86_64环境x86 CPU frequency scaling driversCPU频率调节器驱动Intel P state controlCONFIG_X86_INTEL_PSTATEIntel CPU 的 P-state 驱动,面向""/""/""或更新的CPU微架构,可以更好的支持""技术.Processor Clocking Control interface driverCONFIG_X86_PCC_CPUFREQPCC(Processor Clocking Control)接口支持.此种接口仅对某些HP Proliant系列服务器有意义.更多细节可以参考""文件.ACPI Processor P-States driverCONFIG_X86_ACPI_CPUFREQ这是首选的驱动(CONFIG_X86_INTEL_PSTATE也依赖于它),同时支持Intel和AMD的CPU.除非你的CPU实在太老,否则必选.Legacy cpb sysfs knob support for AMD CPUsCONFIG_X86_ACPI_CPUFREQ_CPB为了兼容旧的用户空间程序而设置,建议关闭.AMD Opteron/Athlon64 PowerNow!CONFIG_X86_POWERNOW_K8过时的驱动,仅为老旧的核心的AMD处理器提供支持.以及更新的CPU应该使用CONFIG_X86_ACPI_CPUFREQ驱动.AMD frequency sensitivity feedback powersave biasCONFIG_X86_AMD_FREQ_SENSITIVITY如果你使用 AMD Family 16h 或者更高级别的处理器,同时又使用"ondemand"频率调节器,开启此项可以更有效的进行频率调节(在保证性能的前提下更节能).Intel Enhanced SpeedStep (deprecated)CONFIG_X86_SPEEDSTEP_CENTRINO已被时代抛弃的驱动,仅对老旧的迅驰平台 Intel Pentium M 或者 Intel Xeons 处理器有意义.Intel Pentium 4 clock modulationCONFIG_X86_P4_CLOCKMOD已被时代抛弃的驱动,仅对支持老旧的Speedstep技术的 Intel Pentium 4 / XEON 处理器有意义.而且即便是在这样的CPU上,因为种种兼容性问题可能导致的不稳定,也不建议开启.CPU idle PM supportCONFIG_CPU_IDLE 指令支持,该指令可以让CPU在空闲时"打盹"以节约电力和减少发热.只要是支持ACPI的CPU就应该开启.由于所有64位CPU都已支持ACPI,所以不必犹豫,开启![提示]为虚拟机编译的内核就没有必要开启了,由宿主机内核去控制就OK了.Support multiple cpuidle driversCONFIG_CPU_IDLE_MULTIPLE_DRIVERS允许CONFIG_CPU_IDLE为每个不同的CPU使用不同的驱动.仅在你的系统由多个不同型号的CPU组成,并且具有不同的唤醒潜伏时间和状态的时候才需要开启.Cpuidle Driver for Intel ProcessorsCONFIG_INTEL_IDLE专用于Intel CPU的cpuidle驱动.而CONFIG_CPU_IDLE则是用于非Intel的CPU.Memory power savings内存节能Intel chipset idle memory power saving driverCONFIG_I7300_IDLE在某些具备内存节能特性的intel服务器芯片组上,让内存也可以在空闲时通过idle指令"打盹".这些必须具备
支持(例如 Intel 7300).同时内存也需要支持此特性.
Bus options (PCI etc.)总线选项
PCI supportCONFIG_PCI是最重要的内部总线,不但PCI与PCI Express设备依赖于它,而且USB/IDE/SATA/SCSI/火线(IEEE 1394)/PCMCIA/CardBus等各种内部和外部总线也都依赖于它.所以必须选"Y",除非你知道自己在干什么.Support mmconfig PCI config space accessCONFIG_PCI_MMCONFIG允许通过mmconfig方式访问,这种访问方式比传统的IO方式速度更快.建议开启.MMCONFIG的意思是"Memory-Mapped config",它是PCI Express引入的新方式.背景知识:PCI设备都有一组叫做'Configuration Space'的寄存器,PCI-E设备在PCI的基础上又增加了一组叫做'Extended Configuration Space'的寄存器.这些寄存器都被映射到了内存中(Memory-Mapped),操作系统理应提供相应的API供设备驱动和诊断程序访问这些'Configuration Space'.但如果操作系统没有提供Memory-Mapped方式的API的话,这些驱动程序和诊断程序就必须自己根据操作系统的底层规则(IO方式)去访问,这显然就增加了开发难度.这个选项的目的就是提供Memory-Mapped方式的API.Read CNB20LE Host Bridge WindowsCONFIG_PCI_CNB20LE_QUIRKCNB20LE芯片组PCI热插拔支持.除非你非常明确的知道你需要它,否则请关闭此项.PCI Express supportCONFIG_PCIEPORTBUS是PCI的升级版并在软件层与PCI兼容,其目标是统一电脑内部总线.基本上只要不是古董机,都早已支持PCI-E了.选"Y".PCI Express Hotplug driverCONFIG_HOTPLUG_PCI_PCIE如果你的主板和设备都支持PCI Express热插拔就可以选上.Root Port Advanced Error Reporting supportCONFIG_PCIEAER 驱动支持.这样,发送到 Root Port 的 Error reporting messages 就会由 PCI Express AER 处理.建议开启.背景知识:PCI Express 定义了两种错误报告范例:(1)baseline,所有PCI-E组件都必须要支持,功能也比较基础.(2)AER(Advanced Error Reporting),功能比较高级,也更可

我要回帖

更多关于 怎么让linux支持中文 的文章

 

随机推荐