• 第十章


     打印内核调试信息:printk

    printk 函数的原型如下:

    asmlinkage int printk(const char * fmt, ...)

    printk文件是一个简单的有4 个数字组成的文本文件,该文件的默认.如下:

    6    4    1    7

       这四个数字的含义如下:

       6:将消息输出到控制台的级别。只有高于该级别的输出信息才会输出到控制台。

       4:默认的消息日志级别。如果不在printk函数中指定日志级别,将会使用该值作为默认级别。

       1:控制台日志级可被设置的最小值(最高优先级别)。

       7:控制台日志级别的默认值。

    如果想修改printk 文件中的内容,要求任何信息都输出到控制台,可以在Linux 终端执行下面的命令。

    #echo 8 > /proc/sys/kernel/printk

    修改后的printk 文件的内容如下:

    8    4    1    7

    执行有如下的命令可以编译和安装printk_demo驱动

    # sh build.sh

    防止printk函数降低Linux驱动性能:

    修改上-节的printk_demo 驱动代码,通过编译指令定义了一个pr_debug宏,并通过修改编译指令的条件值来控制是否调用printk函数。

    通过虚拟文件系统(/proc)进行数据交互:

    Linux 文件系统中,/proc经常被用来作为内核空间与用户空间进行数据交互的工具。/proc文件系统的行为方式与设备文件系统(/dev )类似。/proc 是虚拟文件系统,也就是说,/proc 并不是真正的文件系统,而是内存映射。所有的读写/proc 的操作都是对内存的读写。读写/proc 文件系统的速度要远比读写/dev文件系统的速度快。/proc 文件系统也可以作为linux驱动与用户空间程序交互的工具。有很多系统信息就是通过proc 文件系统由内核空间的程序向外界提供的。

    调试工具:

    gdb 调试用户空间程序、用gdbserver 远程调试用户空间程序、用kgdb 远程调试内核程序。

        printk文件的四个数字的第一个数字直接用来控制  printk函数将消息输出到哪里。

    不管消息级别是多少,所有通过 printk函数发出的消息都会输出到日志文件(就算有的消息输出到控制台,也会同时输出到日志文件)。

  • 相关阅读:
    【暑假】[深入动态规划]UVa 1380 A Scheduling Problem
    【暑假】[深入动态规划]UVa 12170 Easy Climb
    【暑假】[深入动态规划]UVa 10618 The Bookcase
    【暑假】[深入动态规划]UVa 10618 Fun Game
    【暑假】[深入动态规划]UVa 10618 Fixing the Great Wall
    【暑假】[深入动态规划]UVa 1627 Team them up!
    【暑假】[深入动态规划]UVa 10618 Tango Tango Insurrection
    【暑假】[深入动态规划]UVa 1412 Fund Management
    【暑假】[实用数据结构]UVAlive 4670 Dominating Patterns
    UML类图关系大全
  • 原文地址:https://www.cnblogs.com/haiyin/p/5651656.html
Copyright © 2020-2023  润新知