nat*_*han 1 embedded linux-kernel
我正在学习嵌入式系统
我需要从用户空间守护进程和内核空间在控制台上打印调试信息,我使用 printf 作为用户空间,使用 printk(KERN_CRIT) 作为内核空间。
然而,输出混杂成一团乱麻和乱序。我猜 KERN_CRIT 非常快,有什么干净的方法可以完成这项工作吗??非常感谢
ftrace 可以解决您的问题。
在linux内核中,您可以使用“trace_printk”代替“printk”来记录信息,同时在用户空间中您可以将日志写入文件“trace_marker”。
对于内核空间:
#include/linux/kernel.h
...
trace_printk("Hello, kernel trace printk !\n");
...
Run Code Online (Sandbox Code Playgroud)
对于用户空间
...
trace_fd = open("trace_marker", WR_ONLY);
void trace_write(const char *fmt, ...)
{
va_list ap;
char buf[256];
int n;
if (trace_fd < 0)
return;
va_start(ap, fmt);
n = vsnprintf(buf, 256, fmt, ap);
va_end(ap);
write(trace_fd, buf, n);
}
...
trace_write("Hello, trace in user space \n");
...
Run Code Online (Sandbox Code Playgroud)
您可以在linux内核源代码中找到有关ftrace的详细信息,路径为Documentation/trace/ftrace.txt。
还有一些关于ftraces的介绍,请关注trace_printk和trace marker。 使用 Ftrace 调试内核 - 第 1 部分 使用 Ftrace 调试内核 - 第 2 部分
| 归档时间: |
|
| 查看次数: |
1718 次 |
| 最近记录: |