日志与调试
优质
小牛编辑
135浏览
2023-12-01
日志与调试
- earlyprintk=设备[,keep]
- 使用哪个设备显示早期的引导信息,主要用于调试硬件故障。此选项默认并未开启,因为在某些情况下并不能正常工作。
在传统的控制台初始化之前,在哪个设备上显示内核日志信息。不使用此选项,那么你将永远没机会看见这些信息。
在尾部加上",keep"选项表示在真正的内核控制台初始化并接管系统后,不会抹掉本选项消息的显示。
earlyprintk=vga 表示在VGA上显示内核日志信息,这是最常用的选项,但不能用于EFI环境。
earlyprintk=efi v3.13新增,表示将错误日志写入EFI framebuffer,专用于EFI环境。
earlyprintk=xen 仅可用于XEN的半虚拟化客户机。 - loglevel={0|1|2|3|4|5|6|7}
- 设置内核日志的级别,所有小于该数字的内核信息(具有更高优先级的信息)都将在控制台上显示出来。这个级别可以使用 klogd 程序或者修改
/proc/sys/kernel/printk
文件进行调整。取值范围是"0"(不显示任何信息)到"7"(显示所有级别的信息)。建议至少设为"4"(WARNING)。[提示]级别"7"要求编译
时加入了调试支持。 - [KNL]
ignore_loglevel - 忽略内核日志等级的设置,向控制台输出所有内核消息。仅用于调试目的。
- [KNL]
debug - 将引导过程中的所有调试信息都显示在控制台上。相当于设置"loglevel=7"(DEBUG)。
- [KNL]
quiet - 静默模式。相当于设置"loglevel=4"(WARNING)。
- log_buf_len=n[KMG]
- 内核日志缓冲区的大小。"n"必须是2的整数倍(否则会被自动上调到最接近的2的整数倍)。该值也可以通过内核配置选项CONFIG_LOG_BUF_SHIFT来设置。
- [KNL]
initcall_debug - 跟踪所有内核初始化过程中调用的函数。有助于诊断内核在启动过程中死在了那个函数上面。
- kstack=N
- 在内核异常(oops)时,应该打印出内核栈中多少个字(word)到异常转储中。仅供调试使用。
- [KNL]
kmemleak={on|off} - 是否开启检测内核内存泄漏的功能(CONFIG_DEBUG_KMEMLEAK),默认为"on",仅供调试使用。
检测方法类似于跟踪内存收集器,一个内核线程每10分钟(默认值)扫描内存,并打印发现新的未引用的对象的数量。 - [KNL]
memtest=整数 - 设置内存测试(CONFIG_MEMTEST)的轮数。"0"表示禁止测试。仅在你确实知道这是什么东西并且确实需要的时候再开启。
- norandmaps
- 默认情况下,内核会随机化程序的启动地址,也就是每一次分配给程序的虚拟地址空间都不一样,主要目的是为了防止缓冲区溢出攻击。但是这也给程序调
试增加了麻烦,此选项(相当于"echo 0 >
/proc/sys/kernel/randomize_va_space")的目的就是禁用该功能以方便调试。 - [PNP]
pnp.debug=1 - 开启PNP调试信息(需要内核已开启CONFIG_PNP_DEBUG_MESSAGES选项),仅用于调试目的。也可在运行时通过 /sys/module/pnp/parameters/debug 来控制。
- show_msr=CPU数
- 显示启动时由BIOS初始化的MSR(Model-Specific Register)寄存器设置。CPU数设为"1"表示仅显示"boot CPU"的设置。
- printk.time={0|1}
- 是否在每一行printk输出前都加上时间戳,仅供调试使用。默认值是"0"(不添加)
- boot_delay=毫秒数
- 在启动过程中,为每一个printk动作延迟指定的毫秒数,取值范围是[0-10000](最大10秒),超出这个范围将等价于"0"(无延迟)。仅用于调试目的。
- pause_on_oops=秒数
- 当内核发生异常时,挂起所有CPU的时间。当异常信息太多,屏幕持续滚动时,这个选项就很有用处了。主要用于调试目的。