zoukankan      html  css  js  c++  java
  • Andriod深度探索—HAL与驱动开发 第十 章 读书笔记and一点心得

     打印内核调试信息:printk

       Printk函数的用法与printf函数相似,只不过printk函数运行在内核空间,printf函数运行在用户空间。

       Prink函数在printk.c文件中实现,该文件的路径如下:

       /root/kernel/linux_kernel_2.6.36/kernel/printk.c

       Printk函数至少要有一个参数(格式字符串)如果格式字符串中包含有占位符(%d、%s等),后面必须跟与占位符相等数量的参数,以便一一对应传入printk函数。

      Printk文件是一个简单的有4个数字组成的文本文件,该文本的默认数值如:6     4     1     7

      这4个数字的含义如下:

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

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

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

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

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

    Printk函数在控制台显示消息是通过/dev/console设备文件实现的。该设备文件只在字符界面的控制台下才起作用,所以printk函数只有用在字符界面的控制台上才能正常输出消息。

    如果不想使用printk输出消息,只要将“#if1”中的1改为0即可。

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

       Create_proc_read_entry函数在内部是通过调用Create_proc_entry函数实现的。

       Linux文件的读写由属性决定

       删除虚拟目录之前,要先删除虚拟目录中的虚拟文件

    调试工具

    用gdb调试用户空间程序

    用gdbserver远程调试用户空间程序

    用kgdb远程调试内核程序

    心得:Linux内核调试移植被很多人认为是非常困难的。大多数人宁愿直接使用printk函数输出调试信息,也不愿意使用各种命令进行调试。因为这样做并不一定能换来更多的好处。这里除了介绍了printk函数调试技术外,也介绍了其他的调试技术。这些调试技术虽然不一定都能用到,但是了解还是非常有必要的。

    本人博客地址:http://home.cnblogs.com/u/jie617530/

  • 相关阅读:
    编译问题汇总
    IAP测试购买失败,Error Domain=SKErrorDomain Code=0 "无法连接到 iTunes Store"
    关于H5移动端调试的那些事
    关于JS中this指向的说明
    关于UIControl响应事件说明
    绝对独创---关于直播(推流-拉流-服务器搭建)
    关于直播
    关于公司视频播放由mp4格式向m3u8格式转换的学习
    关于UIView中的endEditing:的使用
    关于UITableViewCell左滑显示多个功能的实现
  • 原文地址:https://www.cnblogs.com/jie617530/p/5656531.html
Copyright © 2011-2022 走看看