• 调试内核打印debugfs


    新年第一天更博。这么勤劳我一定是小仙女`_>`

    前几天调试时候,因为处理速度问题,师父给的建议是把应用中不重要的打印删掉。内核中也不要直接用printk,可以把想查看的数据通过debugfs来查看。

    debugfs的用法和sysfs的用法相似。***在注册制好后,路径在/sys/kernel/debug路径下。


    使用方法:

    添加头文件<linux/debugfs.h>

     1)注册debugfs:struct dentry* debugfs_create_dir(const char *name, struct dentry *parent);

             注册通常放在module_init加载的函数中。通过这一步的注册,在路径/sys/kernel/debug下面会出现我们注册的模块。

               name是创建的目录名字,parent是该目录的父目录。如果填NULL,则直接出现在debugfs的根目录。

             使用这种方法,可以创建subdir。

             需要注册全局变量static struct dentry *spi_429_debugfs;和全局的数字变量(最好注册到dev设备结构体中)。

     2)因为要查看实际进中断次数,所以我注册的是数字接口的,数字的操作比较简单。通过函数:

      struct dentry *debugfs_create_u8(const char *name, mode_t mode, struct dentry *parent, u8 *value);
      struct dentry *debugfs_create_u16(const char *name, mode_t mode, struct dentry *parent, u16 *value);
      struct dentry *debugfs_create_u32(const char *name, mode_t mode, struct dentry *parent, u32 *value);
      struct dentry *debugfs_create_u64(const char *name, mode_t mode, struct dentry *parent, u64 *value);
      struct dentry *debugfs_create_bool(const char *name, mode_t mode, struct dentry *parent, u32 *value);
      struct dentry *debugfs_create_blob(const char *name, mode_t mode, struct dentry *parent, struct debugfs_blob_wrapper *blob);
    将要查看的数据注册。在使用的地方改变它的值,该值就可以在cd /sys/kernel/debug/myname cat *看到。

     3)读数据

     4)写数据

     5)卸载模块:在module_exit注册的函数中,加入

      void debugfs_remove(struct dentry *dentry);即可

    读数写数还没用,偷个懒

  • 相关阅读:
    从零开始,SpreadJS新人学习笔记【第4周】
    如何使用JavaScript实现前端导入和导出excel文件
    【案例分享】在 React 框架中使用 SpreadJS 纯前端表格控件
    中国高考志愿填报与职业趋势分析
    Vue 2019开发者图谱
    从零开始,SpreadJS新人学习笔记【第3周】
    从零开始,SpreadJS 新人学习笔记(第二周)
    从零开始,SpreadJS 新人学习笔记
    Spread.NET 表格控件 V12.1 正式发布
    汇编语言-端口
  • 原文地址:https://www.cnblogs.com/feixiao5566/p/6355865.html
Copyright © 2020-2023  润新知