• linux device drivers


    书籍“linux device drivers”第四章,主讲一些debugging skills。其中就有提到printk。

    printk函数包括,打印优先级,格式化字符串,具体变参。

    例如:

    printk(KERN_DEBUG "Here I am: %s:%i
    ", _ _FILE_ _, _ _LINE_ _);
    printk(KERN_CRIT "I'm trashed; giving up on %p
    ", ptr);
    

    printk打印的消息,存储在环形buffer中,以及/proc/kmsg 文件中。

    klogd通过读取/proc/kmsg 文件来接收打印消息。

    klogd可以接收打印消息,并将其发送给syslogd服务。syslogd会对打印消息按照优先级进行归类,并且分发给不同的设施。这些设施需要关注对应优先级的打印消息。

    在linux系统中klogd和syslogd服务同时被启动的时候,printk打印的消息会出现在var/log/messages 文件中。

    如果klogd服务未启动,则消息会在/proc/kmsg 文件中,通过dmesg命令打印的消息就来自于这个文件。

    可以通过文件/proc/sys/kernel/printk设置允许哪些级别的消息,能够打印在终端上。

    注意printk打印的消息,除了显示在终端上,还是被重定向到其他文件中。

    当驱动开发者不注意,例如在驱动硬件的时候fail了,而驱动会printk fail error信息,并且不停的重试,那么会不停的有打印消息出来。恰好接收端是个慢速设备,来不及接收这么多打印消息的话,CPU就会被占用殆尽。

    因为当遇到需要不停的打印消息的时候,需要借助

    printk_ratelimit
    

    使用方法为:

    if (printk_ratelimit(  ))
        printk(KERN_NOTICE "The printer is still on fire
    ");
    

      

      

  • 相关阅读:
    什么是https?
    Gojs
    GoJs 01讲解
    你真的了解WebSocket吗?
    django channels
    序列化及反序列化
    全角转半角
    Thread Culture
    设置输入法
    token的认证使用
  • 原文地址:https://www.cnblogs.com/ironx/p/6005182.html
Copyright © 2020-2023  润新知