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)进行自检,仅供内核开发者使用