公告

Gentoo交流群:87709706 欢迎您的加入

#1 2022-08-03 23:33:44

batsom
管理团队
注册时间: 2022-08-03
帖子: 594
个人网站

Kernel hacking

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

离线

页脚

Powered by FluxBB

本站由XREA提供空间支持