Dou*_* Su 4 linux kernel linux-kernel printk
Altprintk()打印的信息只能在++ ~Ctrl控制台下看到。F1F7
这些控制台无法回滚,因此调试非常不方便。我正在使用KDE桌面环境和控制台终端。如何将 printk() 消息重定向到控制台?
printk的语法是
printk ("log level" "message", <arguments>);
Run Code Online (Sandbox Code Playgroud)
内核在头文件printk.h中定义了八个日志级别:
#define KERN_EMERG "<0>" /* system is unusable*/
#define KERN_ALERT "<1>" /* action must be taken immediately*/
#define KERN_CRIT "<2>" /* critical conditions*/
#define KERN_ERR "<3>" /* error conditions*/
#define KERN_WARNING "<4>" /* warning conditions*/
#define KERN_NOTICE "<5>" /* normal but significant condition*/
#define KERN_INFO "<6>" /* informational*/
#define KERN_DEBUG "<7>" /* debug-level messages*/
Run Code Online (Sandbox Code Playgroud)
每个日志级别对应一个数字,数字越小,消息的重要性越高。
这些级别可用于决定应在控制台上向用户显示什么以及不应该显示什么。
每个控制台都有一个日志级别,称为控制台日志级别,任何日志级别编号小于控制台日志级别的消息都会显示在控制台上,而日志级别编号高于或等于控制台日志级别的其他消息都会被记录在内核日志(内核缓冲区)中,可以使用命令dmesg进行查看。
可以通过查看文件/proc/sys/kernel/printk找到控制台日志级别:
printk ("log level" "message", <arguments>);
Run Code Online (Sandbox Code Playgroud)
输出:
4 4 1 7
Run Code Online (Sandbox Code Playgroud)
输出中的第一个数字是控制台日志级别,第二个是默认日志级别,第三个是最小日志级别,第四个是最大日志级别。
日志级别 4 对应于 KERN_WARNING。因此,日志级别为 3、2、1 和 0 的所有消息都将显示在屏幕上并被记录,而日志级别为 4、5、6 和 7 的消息仅被记录并可以使用 dmesg查看。
可以通过写入 proc 条目来更改控制台日志级别
echo "6" > /proc/sys/kernel/printk
cat /proc/sys/kernel/printk
Run Code Online (Sandbox Code Playgroud)
输出:
6 4 1 7
Run Code Online (Sandbox Code Playgroud)
现在控制台日志级别设置为6,即KERN_INFO。
在这里,您想要打印出每条消息,因此您应该将控制台级别设置为最高数字“8”:
echo "8" > /proc/sys/kernel/printk
tail -f /var/log/kern.log &
Run Code Online (Sandbox Code Playgroud)
或者
cat /proc/kmsg & (Android Environment)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17601 次 |
| 最近记录: |