Linux DebugFs子系统

debugFs是一种用于内核调试的虚拟文件系统,内核通过debugfs和用户空间交换数据,类似procfs和sysfs等,这几种虚拟文件系统都并不实际存储在硬盘上,而是linux内核运行起来后才建立的。通常情况下,最常用的内核调试手段是printk,但打印的数据如果过多,printk就显得没有那么好用,我们真正关心的数据在大量的输出里不是那么一目了然;或者我们在调试时可能需要修改某些内核变量,这种情况下printk就无能为力,而如果为了修改某个值重新编译内核或者驱动又过于低效,此时就需要一个临时的文件系统可以把我们需要关心的数据映射到用户空间。在过去,procfs可以实现这个目的,到了2.6时代,新引入的sysfs也同样可以实现,但无论时procfs还是sysfs,用它们来实现某些debug的需求,似乎偏离了它们创建的本意。比如procfs,其目的时反映进程的状态信息;而sysfs主要用于linux设备模型。不论时procfs或是sysfs的接口应该保持相对稳定,因为用户态程序很可能会依赖它们,当然,如果我们只是临时借用procfs或者sysfs来作debug之用,在代码发布之前将相关调试代码删除也无不可。但如果相关的调试接口要在相当长的一段时间内存在于内核之中,就不太适合放在procfs和sysfs里了,debugfs会被挂载在目录/sys/kernel/debug之下,如果您的发行版里没有自动挂载,可以用如下命令:

mount -t debugfs none /sys/kernel/debug 

二、API

//name是创建的文件或目录的名字,mode是文件的权限,parent是父目录,data通常指向驱动程序分配的数据,fops指向驱动分配的file_operations结构体
struct dentry debugfs_create_dir(const char name, struct dentry parent);

struct dentry debugfs_create_file(const char name, mode_t mode, struct dentry parent, void data, const struct file_operations fops);

//debugfs除了实现这个文件对函数的功能,还提供了一些API用来针对变量的操作,这样就可以在用户态去调试内核变量value了:
struct dentry debugfs_create_u8(const char 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值