zoukankan      html  css  js  c++  java
  • printk 的简要分析

    Printk的级别:

    在内核代码 include/linux/kernel.h 中有如下代码, 它们表示 07这 个记录级别的名称。  

    #define KERN_EMERG  "<0>" /* system is unusable   */ 

    #define KERN_ALERT   "<1>" /* action must be taken immediately */ 

    #define KERN_CRIT     "<2>" /* critical conditions   */ 

    #define KERN_ERR      "<3>" /* error conditions    */ 

    #define KERN_WARNING "<4>" /* warning conditions   */ 

    #define KERN_NOTICE   "<5>" /* normal but significant condition */ 

    #define KERN_INFO      "<6>" /* informational   */ 

    内核会根据uboot里的tty=SACO来找到对应的硬件操作函数;console_setup

    Register_console=

    串口打印:

    1、name=ttySAC0;

    2、各种函数;

    lcd打印:

    1、name

    2、各种函数;

    Printk 的默认级别是4;

    #define DBG_PRINTK printk

    调试驱动程序时候就这样用:在驱动里觉得大概有问题的那行添加:

    DBG_PRINTK("%s %s %d\n", __FILE__,__FUNCTION__,__LINE__) ,通过这个来判断到底是哪行出错

    或  加上打印级别

    直接:printk(KERN_DEBUG "%s %s %d\n", __FILE__,__FUNCTION__,__LINE__)

    修改printk的级别:要小于第一个的级别才能打印,第二个是默认值

    查看:cat /proc/sys/kernel/printk

    7    4    1    7

    修改:echo "8 4 1 7" > /proc/sys/kernel/printk 如果将console_loglevel被改为1,于是所有的printk信息都不会被打印

    在uboot界面设置

    Setenv bootargs loglevel=0,其他参数不变,这样所有的打印信息都没有了

    但是启动后还可以dmesg命令将缓冲区里的内容打印出来。

    Setenv bootargs debug  其他参数不变,这样所有的东西都会被打印出来。

  • 相关阅读:
    Codeforces 787D. Legacy 线段树优化建图+最短路
    Codeforces 1051E. Vasya and Big Integers
    BZOJ3261 最大异或和
    BZOJ3531 SDOI2014 旅行
    洛谷P2468 SDOI 2010 粟粟的书架
    2018 ICPC 焦作网络赛 E.Jiu Yuan Wants to Eat
    HDU6280 From Tree to Graph
    HDU5985 Lucky Coins 概率dp
    (HDU)1334 -- Perfect Cubes (完美立方)
    (HDU)1330 -- Deck (覆盖物)
  • 原文地址:https://www.cnblogs.com/start530/p/3834400.html
Copyright © 2011-2022 走看看