Kernel hacking 内核 hack 选项
优质
小牛编辑
127浏览
2023-12-01
Kernel hacking 内核 hack 选项
- Show timing information on printks
CONFIG_PRINTK_TIME - 在控制台和syslog()系统调用的输出中包含printk()消息的时间戳,以便于直接显示内核启动过程中各步骤所用的时间.注意:无论此项是否开启,时间戳总会被记录在/dev/kmsg中,开启此项仅相当于使用"printk.time=1"内核引导参数.
- Default message log level (1-7)
CONFIG_DEFAULT_MESSAGE_LOGLEVEL - printk()
内核消息日志的默认级别,取值范围是[1,7].任何由printk显示的字符串通常记录在/var/log/messages文件里.数值越大显示的消
息就越详细: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或更高版本
- Strip assembler-generated symbols during link
CONFIG_STRIP_ASM_SYMS - 连接时剥离汇编器产生的内部符号(类似'.Lxxx'),这样可以净化get_wchan()之类的输出,同时还可以减小内核尺寸.建议开启.
- Magic SysRq key
CONFIG_MAGIC_SYSRQ - 开启"魔法键"(SysRq,
允许用户按下Alt+PrintScreen后发送给内核特殊的命令)支持(可以通过"echo 0 >
/proc/sys/kernel/sysrq"关闭).由于SysRq会带来安全隐患(允许未经登录的操作),所以你应该仅在确实需要的场合开启.更多
详情参见"Documentation/sysrq.txt"文档 - Enable magic SysRq key functions by default
CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE - 设置默认开启哪些魔法键.设为"1"表示开启所有魔法键,设为"0"表示禁用所有魔法键.或者按照"Documentation/sysrq.txt"文档的指引设置特定的码位.
- Enable magic SysRq key functions by default
- 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 - 在编译时检查无效的引用.仅供内核开发者使用
- Make section mismatch errors non-fatal
CONFIG_SECTION_MISMATCH_WARN_ONLY - 若选"N",那么一旦出现"section mismatch",将会直接导致编译失败(而不是仅仅抛出警告).建议选"N".
- Kernel debugging
CONFIG_DEBUG_KERNEL - 仅供内核开发者使用.[提示]如果你开启了
CONFIG_EXPERT,此项会被强制选中,如果这不是你想要的,可以到内核源码树的根目录下使用"sed -i '/select
DEBUG_KERNEL/d' usr/src/linux/init/Kconfig"命令去掉这个依赖. - Panic on Oops
CONFIG_PANIC_ON_OOPS - 当内核oops时,直接panic掉(相当于Windows蓝屏死机),这样可以确保内核停止工作,避免导致无法预料的后果.等价于使用"oops=panic"内核引导参数.不确定的选"Y".
- panic timeout
CONFIG_PANIC_TIMEOUT - 如何处理内核崩溃(panic):(1)若设为"0"则表示无限等待,不做任何处理;(2)若设为正整数则表示等待设定的秒数之后重启;(3)若设为负整数则表示立即重启.
- panic timeout
- Enable extra timekeeping sanity checking
CONFIG_DEBUG_TIMEKEEPING - 仅供内核开发者使用
- 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 - 仅供内核开发者使用
- Stack backtrace support
CONFIG_STACKTRACE - 仅供内核开发者使用.
- 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".
- Runtime Testing
- 运行时自我检查.建议子项全选"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 - 在启动时显示额外bzimage解压消息,显示详细的内核引导信息.建议选"N"使引导过程更安静(依然会显示错误信息).
- Early printk
CONFIG_EARLY_PRINTK - 将内核日志直接输出到VGA缓冲或串口.这有助于调试那些在控制台尚未完成初始化之前就造成系统崩溃的bug.
- Early printk via EHCI debug port
CONFIG_EARLY_PRINTK_DBGP - 支持将内核日志直接通过EHCI调试端口输出.选"N",除非你想调试内核.
- Early printk via EHCI debug port
- Dump the EFI pagetable
CONFIG_EFI_PGT_DUMP - 仅供内核开发者使用
- 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 doublefault exception handler
CONFIG_DOUBLEFAULT - 仅供内核开发者使用
- 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延迟机制.只要你的机器不是老古董,建议选择此项.
- port 0x80 based port-IO delay
- 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". - NMI Selftest
CONFIG_DEBUG_NMI_SELFTEST - 对不可屏蔽中断(Non Maskable Interrupt)进行自检,仅供内核开发者使用
- ATOM Punit debug driver
CONFIG_PUNIT_ATOM_DEBUG - 仅供内核开发者使用