如何将printk打印以日志形式保存下来
时间: 2023-12-24 08:02:14 浏览: 148
可以通过将打印信息输出到系统日志文件中来保存printk打印信息。具体步骤如下:
1. 在内核代码中使用printk打印需要保存的信息;
2. 在系统启动时,使用以下命令将系统日志文件挂载到指定的挂载点:
```
mount -t debugfs none /sys/kernel/debug/
mount -t debugfs none /sys/kernel/debug/
```
3. 在/sys/kernel/debug/目录下,创建一个名为tracing的目录:
```
mkdir /sys/kernel/debug/tracing
```
4. 进入tracing目录,将打印信息输出到trace文件中:
```
cd /sys/kernel/debug/tracing
echo 1 > tracing_on
echo function_graph > current_tracer
echo printk > set_ftrace_filter
cat trace
```
这会将所有的printk打印信息输出到trace文件中。
5. 将trace文件中的信息保存到指定的文件中:
```
cat trace > /path/to/logfile
```
这样就可以将printk打印信息保存到指定的日志文件中了。
相关问题
ubuntu printk 打印
在Ubuntu中,如果你想让printk的输出信息显示在终端上,你可以按照以下步骤进行设置。首先,你需要以root权限运行以下命令来将控制台log等级设为最高的8:
```
echo "8" > /proc/sys/kernel/printk
```
接下来,你可以使用以下命令来实时查看内核日志:
```
tail -f /var/log/kern.log &
```
注意,这些设置需要root权限。另外,需要注意的是,默认情况下,printk的输出设备是/dev/console,而这个设备只能在内核中访问。用户使用的终端对应的是/dev/tty*。如果你在发行版Linux驱动开发中遇到了这个问题,可能是因为printk默认的输出设备是/dev/console,而终端对应的是/dev/tty*。你可以修改/etc/default/grub文件来解决这个问题,在GRUB_CMDLINE_LINUX_DEFAULT和GRUB_CMDLINE_LINUX这两行中添加以下内容:
```
console=tty0 console=ttyS0,115200n8
```
然后,保存文件并更新grub配置,最后重启系统生效。这样,你就可以在终端上看到printk的输出信息了。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [如何让 printk 打印到终端](https://blog.csdn.net/weixin_39591031/article/details/121640688)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [printk调试信息无法打印到控制台](https://blog.csdn.net/qq_41115702/article/details/104657103)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [ubuntu中printk打印信息](https://blog.csdn.net/u010340823/article/details/40514273)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
printk打印等级
在 Linux 内核中,有多种不同的 printk() 打印等级(log level)可用于在日志中标识不同类型的消息,每个打印等级都有一个与之关联的数字值。这些打印等级及其对应的数字值如下:
- KERN_EMERG (0): 紧急情况,例如系统崩溃
- KERN_ALERT (1): 需要立即采取行动,例如硬件故障
- KERN_CRIT (2): 严重错误,可能导致系统故障
- KERN_ERR (3): 错误消息,但不会导致系统崩溃
- KERN_WARNING (4): 警告消息,例如硬件故障可能导致错误
- KERN_NOTICE (5): 通知消息,例如网络连接的建立和断开
- KERN_INFO (6): 信息消息,例如模块加载和卸载
- KERN_DEBUG (7): 调试消息,仅用于调试目的
在使用 printk() 函数时,可以通过在消息字符串前加上打印等级的前缀来指定消息的打印等级。例如,使用 KERN_ERR 打印等级打印一个错误消息可以这样做:
```
printk(KERN_ERR "Error message\n");
```
需要注意的是,内核可以通过设置日志级别(log level)来控制哪些类型的消息将被打印。只有打印等级大于或等于当前日志级别的消息才会被打印出来。可以通过 /proc/sys/kernel/printk 文件来设置日志级别。例如,将日志级别设置为 3 将只打印错误消息和更严重的消息。
阅读全文