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