使用printk的注意点

        内核开发中,使用printk十分常见,但是也要注意,一次队友在开发中,想要打印一个大缓冲区的数据,就用printk打印,但是只能打印前约1K的数据,后来发现printk的实现中,临时缓冲区确实有LOG_LINE_MAX限制,现在简单总结下注意点:
        1.printk的实现很低效,不要在内核大量打印,尤其是在某些性能测试中,中断上下文尽量少用,有可能大量的printk导致系统crash,亲身经历过。
        2.内核在切换模式时不保存处理器的浮点状态,因此printk并不支持浮点数运算。
        3.printk使用的“ring buffer”,如果来不及刷新到syslog中,日志有可能被覆盖,即数据丢失。printk函数执行时首先设法获取控制台信号量,然后将要输出的字符存储到控制台的日志缓冲区,再调用控制台驱动程序来刷新缓冲区。若printk无法获得控制台信号量,则只能把要输出的字符存储到日志缓冲区,并依赖拥有控制台信号量的进程来刷新这个缓冲区。printk函数会将数据存储到日志缓冲区,但是为了安全考虑,在这之前需要使用日志缓冲区锁,保证并发调用printk的安全性。
        4.内核启动初期,是无法使用printk输出在终端上的,只有在终端和控制台被初始化后,才能输出到终端。

        简单提及下用户态的printf,可利用fprintf(log->file, "%s", info);//设置log->file可以将日志记录到指定位置,stderr,syslog或者指定文件中等。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值