Linux 内核支持debugfs,debugfs -- usefull linux kernel debug tools

linux2.6.11内核引入debugfs技术(和bash命令中的debugfs毫无关系)。它提供了一种用户空间查看内核信息的方法,并且可以通过使用模块的方式使得可以动态查看内核中的不同信息。

/proc文件系统同样提供了相同的功能,但是这些信息是在内核中已经指定好了的。如果要查看这些信息之外的内容,必须要重新修改内核:添加/proc选项,编译内核,重新启动机器等一些列过程。如果某次又还要查看更多的信息,还要重复上述的过程。最关键的是需要重新启动机器。

与通过/proc文件系统获取内核信息不同的是:如果需要查看目前内核中没有统计的信息,只要更改下使用debugfs统计信息的模块,即更改或添加输出信息的内容,重新编译模块,加载模块。然后就可以看见需要的内容了。注意:这个过程不需要重新启动机器。并且这种的信息统计工作可以随时通过卸载模块的方式去除掉。但是这也有一个限制:就是debugfs是通过模块的方式加载的,所以需要统计的内核变量必须要通过宏EXPORT_SYMBOL输出才行,但是这个工作可以一次性的都做完。以后就不会改内核了。

连接:http://lwn.net/Articles/115405/ 讲述了如何使用debugfs提供的API。下面通过一个例子具体地解释如何编写一个简单的使用debugfs统计内核信息的模块:

---debug_test.c:

#include

#include

#include

static struct dentry *root_entry, *total_pages_entry;

static u64 total_pages;

extern long vm_total_pages;

static int __init debugfs_test_init(void)

{

total_pages = (u64)vm_total_pages;

root_entry = debugfs_create_dir("debugfs-root", NULL);

if (!root_entry) {

printk("Fail to create proc dir: debugfs-root\n");

return 1;

}

total_pages_entry = debugfs_create_u64("total_pages", 0644, root_entry, &total_pages);

return 0;

}

static void __exit debugfs_test_exit(void)

{

debugfs_remove(total_pages_entry);

debugfs_remove(root_entry);

}

module_init(debugfs_test_init);

module_exit(debugfs_test_exit);

MODULE_LICENSE("GPL");

----Makefile:

obj-m += debugfs_test.o

all:

make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:

make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

在执行完make命令后插入模块之前,还需要做一件事:挂载debugfs根目录,如下:

mount -t debugfs debugfs 挂载点(例如/home/debugfs)

然后加载模块:

insmod debugfs_test.ko

之后在进入到debugfs的根目录下(cd /home/debugfs),就可以看见有一个名字为debugfs-root的目录。其下有文件名为total_pages。然后cat一下这个文件就可以查看总的页面信息了。

在这个例子中需要注意的是:内核中的变量vm_total_pages默认没有被输出。这里要将这个变量使用宏EXPORT_SYMBOL输出才行(例如:EXPORT_SYMBOL(vm_total_pages);)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值