printk
是Linux内核中的一个函数,用于向系统日志中打印消息。它类似于用户空间的 printf
函数,但 printk
的输出会被写入内核日志缓冲区,随后可以被各种日志系统读取和显示。
printk
可以在内核空间直接记录关键信息,对于调试内核模块和系统启动过程非常有用。printk
消息有不同的优先级(或称为日志级别),从高到低包括:
KERN_EMERG
:紧急情况,系统不可用。KERN_ALERT
:需要立即采取行动。KERN_CRIT
:严重情况。KERN_ERR
:错误情况。KERN_WARNING
:警告情况。KERN_NOTICE
:需要注意的情况。KERN_INFO
:普通信息。KERN_DEBUG
:调试信息。printk
输出调试信息。printk
输出关键步骤的信息,帮助诊断启动失败的原因。问题:系统启动时 printk
消息不显示或显示不全。
原因:
printk
消息可能不会显示。printk
消息可能会被丢弃。printk
消息不输出到预期的设备。解决方法:
dmesg
命令查看内核日志缓冲区的内容,确保没有溢出:dmesg
命令查看内核日志缓冲区的内容,确保没有溢出:CONFIG_PRINTK
。在内核模块中使用 printk
输出调试信息:
#include <linux/module.h>
#include <linux/kernel.h>
static int __init my_module_init(void) {
printk(KERN_INFO "Hello, World!\n");
return 0;
}
static void __exit my_module_exit(void) {
printk(KERN_INFO "Goodbye, World!\n");
}
module_init(my_module_init);
module_exit(my_module_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("A simple kernel module using printk");
编译并加载这个模块后,可以使用 dmesg
命令查看输出的日志信息:
dmesg | tail
通过以上方法,可以有效地使用 printk
进行内核日志记录和调试。
腾讯云数据库TDSQL训练营
腾讯云数据库TDSQL(PostgreSQL版)训练营
2022OpenCloudOS社区开放日
云+社区沙龙online第6期[开源之道]
云原生正发声
腾讯云数据库TDSQL训练营
腾讯云数据库TDSQL训练营
腾讯云数据库TDSQL训练营
腾讯云数据库TDSQL训练营
腾讯云数据库TDSQL训练营
腾讯云数据库TDSQL训练营
领取专属 10元无门槛券
手把手带您无忧上云