linux中打印错误信息

全局变量的errno用之前要extern下:
extern int errno;

<pre name="code" class="html">char *strerror(int errnum);
可以将errno转换成字符串,打印出来


但perror函数更好用:
void perror(const char *s)
### Linux 驱动程序中使用 `printk` 函数打印调试信息 在开发 Linux 驱动程序时,通常需要记录调试信息以便于排查问题。为此,内核提供了专门用于打印消息的函数——`printk()`。以下是关于如何在驱动程序中正确使用 `printk` 的详细介绍。 #### 1. 基本功能与用途 `printk` 是一种类似于标准 C 库中的 `printf` 的函数,但它专为 Linux 内核设计,在内核空间运行并支持特定的日志级别控制[^1]。它主要用于向系统日志(通常是 `/var/log/syslog` 或者通过命令 `dmesg` 查看)写入信息。 #### 2. 日志级别的定义 为了区分不同重要程度的消息,`printk` 支持多种日志级别前缀。这些前缀决定了消息的重要性和显示方式: | 宏名 | 数值 | 描述 | |---------------------|------|----------------------------------------| | KERN_EMERG | 0 | 系统不可用 | | KERN_ALERT | 1 | 必须立即采取行动 | | KERN_CRIT | 2 | 关键条件 | | KERN_ERR | 3 | 错误条件 | | KERN_WARNING | 4 | 警告条件 | | KERN_NOTICE | 5 | 正常但重要的条件 | | KERN_INFO | 6 | 提示性信息 | | KERN_DEBUG | 7 | 调试级信息 | 每条消息都应带有相应的日志级别宏来标记其严重程度。例如: ```c printk(KERN_INFO "This is an informational message.\n"); ``` #### 3. 示例代码展示 下面是一个简单的例子,演示如何在驱动程序初始化和退出过程中使用 `printk` 输出调试信息: ```c #include <linux/module.h> #include <linux/kernel.h> static int __init my_module_init(void) { printk(KERN_INFO "My module initialized successfully\n"); return 0; } static void __exit my_module_exit(void) { printk(KERN_INFO "My module exiting cleanly\n"); } module_init(my_module_init); module_exit(my_module_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("A simple example of using printk in a driver."); ``` 上述代码会在加载模块时输出一条提示信息,并在卸载模块时再次通知用户操作完成情况。 #### 4. 解决常见问题 如果发现 `printk` 发送的内容未能正常出现在终端上,则可能是由于以下几个原因造成的[^3]: - **日志级别过高**:当前系统的默认日志等级可能低于所使用的 `KERN_*` 定义值。 - **缓冲区溢出**:当大量数据被快速发送至环形缓存而未及时读取时会发生丢失现象。 - **TTY 设置不当**:某些情况下,串口或其他 TTY 设备并未开启接收来自 kernel log 的转发服务。 针对这些问题可以通过调整参数或者修改启动选项加以改善。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值