Kernel hacking
内核hack选项
Show timing information on printks
CONFIG_PRINTK_TIME
在控制台和syslog()系统调用的输出中包含printk()消息的时间戳,
以便于直接显示内核启动过程中各步骤所用的时间.
注意:无论此项是否开启,时间戳总会被记录在/dev/kmsg中,开启此项仅相当于使用"printk.time=1"内核引导参数.
Default console loglevel
默认控制台日志级别
Default message log level (1-7)
CONFIG_DEFAULT_MESSAGE_LOGLEVEL
printk()内核消息日志的默认级别,取值范围是[1,7].
数值越大显示的消息就越详细:1=ALERT,2=CRIT,3=ERR,4=WARNING,5=NOTICE,6=INFO,7=DEBUG.
Enable __deprecated logic
CONFIG_ENABLE_WARN_DEPRECATED
编译时开启"反对使用"逻辑检查,关闭此项将不会显示类似
"warning: 'foo' is deprecated (declared at kernel/power/somefile.c:1234)"的警告消息.
Enable __must_check logic
CONFIG_ENABLE_MUST_CHECK
编译时开启"必须检查"逻辑检查,关闭此项将不会显示类似
"warning: ignoring return value of 'foo', declared with attribute warn_unused_result"的警告消息.
Warn for stack frames larger than (needs gcc 4.4)
CONFIG_FRAME_WARN
堆栈帧大小警告阈值,设置过小会导致编译时警告太多,设为"0"可以关闭警告,需要GCC-4.4或更高版本
Magic SysRq key
CONFIG_MAGIC_SYSRQ
开启"魔法键"(SysRq)支持(可以通过"echo 0 > /proc/sys/kernel/sysrq"关闭).
由于SysRq会带来安全隐患(允许未经登录的操作),所以你应该仅在确实需要的场合开启.
更多详情参见"Documentation/sysrq.txt"文档
Strip assembler-generated symbols during link
CONFIG_STRIP_ASM_SYMS
连接时剥离汇编器产生的内部符号(类似'.Lxxx'),这样可以净化get_wchan()之类的输出,
同时还可以减小内核尺寸.建议开启.
Generate readable assembler code
CONFIG_READABLE_ASM
生成人类易读的汇编输出,以方便内核调试.这会禁用一些编译优化措施,也会降低内核的运行速度.
Enable unused/obsolete exported symbols
CONFIG_UNUSED_SYMBOLS
导出无用和废弃的符号,这将使内核不必要的增大.建议关闭.
Debug Filesystem
CONFIG_DEBUG_FS
debugfs是内核开发者用来存储调试信息的虚拟文件系统.不搞内核开发就别选
Run 'make headers_check' when building vmlinux
CONFIG_HEADERS_CHECK
在编译内核时运行'make headers_check'命令检查内核头文件的正确性,当你修改了与用户空间相关的内核头文件后应该启用该选项
Enable full Section mismatch analysis
CONFIG_DEBUG_SECTION_MISMATCH
仅供内核开发者使用
Kernel debugging
CONFIG_DEBUG_KERNEL
仅供内核开发者使用
Panic on Oops
CONFIG_PANIC_ON_OOPS
当内核oops时,直接panic掉(相当于Windows蓝屏死机),这样可以确保内核停止工作,避免导致无法预料的后果.等价于使用"oops=panic"内核引导参数.不确定的选"N".
Detect Hung Tasks
CONFIG_DETECT_HUNG_TASK
探测挂起的任务(处于不可中断的"D"状态).由于仅能检测,不能做进一步的处理,所以仅用于帮助内核调试.
Collect scheduler debugging info
CONFIG_SCHED_DEBUG
提供一个"/proc/sched_debug"文件以帮助调试调度程序.仅供内核开发使用.
Collect scheduler statistics
CONFIG_SCHEDSTATS
收集调度程序的统计信息,并展示在"/proc/schedstat"文件中.可以用于调试调度程序,或者调整特定的应用程序.不确定的选"N".
Collect kernel timers statistics
CONFIG_TIMER_STATS
收集内核计时器的统计信息,并展示在"/proc/timer_stats"文件中.使用"echo 1 > /proc/timer_stats"开启统计,使用"echo 0 > /proc/timer_stats"关闭统计.不确定的选"N".
Debug object operations
CONFIG_DEBUG_OBJECTS
跟踪各种对象的生命周期(life time),并校验对这些对象的各种操作.仅供内核调试.
Debug slab memory allocations
CONFIG_DEBUG_SLAB
仅供内核开发者使用
SLUB debugging on by default
CONFIG_SLUB_DEBUG_ON
默认开启SLUB内存分配器调试功能.仅供调试,切勿用于生产环境.
Enable SLUB performance statistics
CONFIG_SLUB_STATS
收集SLUB内存分配器的性能统计信息.仅供调试,切勿用于生产环境.
Kernel memory leak detector
CONFIG_DEBUG_KMEMLEAK
内核内存泄漏检测.仅供内核调试.
Debug preemptible kernel
CONFIG_DEBUG_PREEMPT
对内核的主动抢占特性进行调试.仅供内核开发者使用
RT Mutex debugging, deadlock detection
CONFIG_DEBUG_RT_MUTEXES
仅供内核开发者使用
Built-in scriptable tester for rt-mutexes
CONFIG_RT_MUTEX_TESTER
仅供内核开发者使用
Spinlock and rw-lock debugging: basic checks
CONFIG_DEBUG_SPINLOCK
仅供内核开发者使用
Mutex debugging: basic checks
CONFIG_DEBUG_MUTEXES
仅供内核开发者使用
Lock debugging: detect incorrect freeing of live locks
CONFIG_DEBUG_LOCK_ALLOC
仅供内核开发者使用
Lock debugging: prove locking correctness
CONFIG_PROVE_LOCKING
仅供内核开发者使用
Lock usage statistics
CONFIG_LOCK_STAT
仅供内核开发者使用
Lock dependency engine debugging
CONFIG_DEBUG_LOCKDEP
仅供内核开发者使用
Sleep inside atomic section checking
CONFIG_DEBUG_ATOMIC_SLEEP
仅供内核开发者使用
Locking API boot-time self-tests
CONFIG_DEBUG_LOCKING_API_SELFTESTS
在内核启动时运行一个简短的加锁/解锁函数(spinlocks,rwlocks,mutexes,rwsems)自我测试.仅供内核开发者使用
Stack utilization instrumentation
CONFIG_DEBUG_STACK_USAGE
仅供内核开发者使用
kobject debugging
CONFIG_DEBUG_KOBJECT
仅供内核开发者使用
Verbose BUG() reporting (adds 70K)
CONFIG_DEBUG_BUGVERBOSE
在内核panic时让BUG()函数报告更详细的信息.内核将会增大70-100K.
Compile the kernel with debug info
CONFIG_DEBUG_INFO
以调试方式编译内核(gcc -g).仅供内核开发者使用
Debug VM
CONFIG_DEBUG_VM
仅供内核开发者使用
Debug VM translations
CONFIG_DEBUG_VIRTUAL
仅供内核开发者使用
Debug filesystem writers count
CONFIG_DEBUG_WRITECOUNT
仅供内核开发者使用
Debug memory initialisation
CONFIG_DEBUG_MEMORY_INIT
在内存初始化时增加额外的合理性检查.不确定的选"Y".
Debug linked list manipulation
CONFIG_DEBUG_LIST
仅供内核开发者使用
Linked list sorting test
CONFIG_TEST_LIST_SORT
仅供内核开发者使用
Debug SG table operations
CONFIG_DEBUG_SG
仅供内核开发者使用
Debug notifier call chains
CONFIG_DEBUG_NOTIFIERS
仅供内核开发者使用
Debug credential management
CONFIG_DEBUG_CREDENTIALS
仅供内核开发者使用
Compile the kernel with frame pointers
CONFIG_FRAME_POINTER
仅供内核开发者使用
Delay each boot printk message by N milliseconds
CONFIG_BOOT_PRINTK_DELAY
仅供内核开发者使用
RCU Debugging
仅供内核开发者使用.建议所有子项全选"N".
Kprobes sanity tests
CONFIG_KPROBES_SANITY_TEST
仅供内核开发者使用
Self test for the backtrace code
CONFIG_BACKTRACE_SELF_TEST
仅供内核开发者使用
Force extended block device numbers and spread them
CONFIG_DEBUG_BLOCK_EXT_DEVT
仅供内核开发者使用
Force weak per-cpu definitions
CONFIG_DEBUG_FORCE_WEAK_PER_CPU
仅供内核开发者使用
Debug access to per_cpu maps
CONFIG_DEBUG_PER_CPU_MAPS
仅供内核开发者使用
Linux Kernel Dump Test Tool Module
CONFIG_LKDTM
仅供内核开发者使用
Notifier error injection
CONFIG_NOTIFIER_ERROR_INJECTION
仅供内核开发者使用
Fault-injection framework
CONFIG_FAULT_INJECTION
仅供内核开发者使用
Latency measuring infrastructure
CONFIG_LATENCYTOP
仅供内核开发者使用
Strict user copy size checks
CONFIG_DEBUG_STRICT_USER_COPY_CHECKS
仅供内核开发者使用
Debug page memory allocations
CONFIG_DEBUG_PAGEALLOC
仅供内核开发者使用
Tracers
CONFIG_FTRACE
仅供内核开发者使用.建议选"N".
Red-Black tree test
CONFIG_RBTREE_TEST
仅供内核开发者使用
Interval tree test
CONFIG_INTERVAL_TREE_TEST
仅供内核开发者使用
Remote debugging over FireWire early on boot
CONFIG_PROVIDE_OHCI1394_DMA_INIT
仅供内核开发者使用
Remote debugging over FireWire with firewire-ohci
CONFIG_FIREWIRE_OHCI_REMOTE_DMA
仅供内核开发者使用
Build targets in Documentation/ tree
CONFIG_BUILD_DOCSRC
编译内核源码树下"Documentation"目录中的目标.不确定的选"N".
Enable dynamic printk() support
CONFIG_DYNAMIC_DEBUG
仅供内核开发者使用
Enable debugging of DMA-API usage
CONFIG_DMA_API_DEBUG
仅供内核开发者使用
Perform an atomic64_t self-test at boot
CONFIG_ATOMIC64_SELFTEST
仅供内核开发者使用
Self test for hardware accelerated raid6 recovery
CONFIG_ASYNC_RAID6_TEST
仅供内核开发者使用
Sample kernel code
CONFIG_SAMPLES
内核示例代码.仅供内核开发者使用
KGDB: kernel debugger
CONFIG_KGDB
仅供内核开发者使用
kmemcheck: trap use of uninitialized memory
CONFIG_KMEMCHECK
仅供内核开发者使用
Test functions located in the string_helpers module at runtime
CONFIG_TEST_STRING_HELPERS
仅供内核开发者使用
Test kstrto*() family of functions at runtime
CONFIG_TEST_KSTRTOX
仅供内核开发者使用
Filter access to /dev/mem
CONFIG_STRICT_DEVMEM
如果选"N",那么用户空间的root用户将可以通过/dev/mem访问所有内存空间(包括用户空间与内核空间),以方便调试内核.如果选"Y",那么内核空间除了PCI和BIOS部分以及数据区之外,都禁止访问,以保护系统安全.不确定的选"Y".
Enable verbose x86 bootup info messages
CONFIG_X86_VERBOSE_BOOTUP
显示详细的内核引导信息.建议选"N"使引导过程更安静(依然会显示错误信息).
Early printk
CONFIG_EARLY_PRINTK
将内核日志直接输出到VGA缓冲或串口.这有助于调试那些在控制台尚未完成初始化之前就造成系统崩溃的bug.
Early printk via EHCI debug port
CONFIG_EARLY_PRINTK_DBGP
支持将内核日志直接通过EHCI调试端口输出.选"N",除非你想调试内核.
Check for stack overflows
CONFIG_DEBUG_STACKOVERFLOW
仅供内核开发者使用
Export kernel pagetable layout to userspace via debugfs
CONFIG_X86_PTDUMP
仅供内核开发者使用
Write protect kernel read-only data structures
CONFIG_DEBUG_RODATA
仅供内核开发者使用
Set loadable kernel module data as NX and text as RO
CONFIG_DEBUG_SET_MODULE_RONX
将内核模块的数据区标记为NX(不可执行),文本段标记为RO(只读),以防止不良模块(例如被植入病毒的模块)对系统的破坏,也能预防某些类型的内核入侵.这需要CPU支持NX位(CPU flags中要含有"nx"标志).但是这也有副作用:会与运行时代码补丁冲突,还会导致动态内核跟踪失效.建议选"Y",除非你需要调试内核,或者需要为运行中的模块打补丁.
Testcase for the NX non-executable stack feature
CONFIG_DEBUG_NX_TEST
对处理器的NX的测试用例.仅供内核开发者使用
Set upper limit of TLB entries to flush one-by-one
CONFIG_DEBUG_TLBFLUSH
仅供内核开发者使用
Enable IOMMU debugging
CONFIG_IOMMU_DEBUG
仅供内核开发者使用
Enable IOMMU stress-test mode
CONFIG_IOMMU_STRESS
仅供内核开发者使用
IOMMU leak tracing
CONFIG_IOMMU_LEAK
仅供内核开发者使用
x86 instruction decoder selftest
CONFIG_X86_DECODER_SELFTEST
仅供内核开发者使用
IO delay type
IO延迟方式
port 0x80 based port-IO delay
CONFIG_IO_DELAY_0X80
传统的Linux IO延迟方式,久经考验,也是最安全的默认值.
port 0xed based port-IO delay
CONFIG_IO_DELAY_0XED
基于0xed端口的IO延迟方式,主要是为了避免和基于0x80端口的主板诊断卡冲突.绝大多数人都没有主板诊断卡,除非那些专门维修主板的硬件工程师.
udelay based port-IO delay
CONFIG_IO_DELAY_UDELAY
使用内核端udelay()函数作为延迟方法(简单的延迟2微秒).可以不占用任何IO端口空间.
no port-IO delay
CONFIG_IO_DELAY_NONE
不使用任何port-IO延迟机制.只要你的机器不是老古董,建议选择此项.
Debug boot parameters
CONFIG_DEBUG_BOOT_PARAMS
仅供内核开发者使用
CPA self-test code
CONFIG_CPA_DEBUG
仅供内核开发者使用
Allow gcc to uninline functions marked 'inline'
CONFIG_OPTIMIZE_INLINING
允许GCC将标记为内联(inline)的函数变成非内联(uninline).选"Y"后将完全无视代码中的"inline"标记,完全由GCC自行决定是否应该将函数内联.由于GCC4.x系列更新了判断函数是否应该内联的算法,选"Y"后,编译出的内核体积会减小,但运行速度未必提升.建议经过测试后决定"Y"还是"N".
NMI Selftest
CONFIG_DEBUG_NMI_SELFTEST
对不可屏蔽中断(Non Maskable Interrupt)进行自检,仅供内核开发者使用