四川省妇幼保健院怎样:debugfs -- usefull linux kernel debug tools
来源:百度文库 编辑:偶看新闻 时间:2024/04/29 10:21:25
debugfs -- usefull linux kernel debug tools2009-08-27 14:16 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);)
/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("
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);)
l,;kvb, l
w i l l ?
z+l l=l l+l+l l=l
466666666666622lll;k;l;l;l;
fdsklfjdsalkfdsa;l
L(中文翻译)
wangbu l
L-胱氨酸
选择题~ ````````````````````` ~L
l中国电信
l believe l can fly
l wonder l so 是什么意思
排量1L 中的L 是什么意思?
L.O.L和XOXO分别是什么意思?
what is "L&L product"?
Investindustrial L.P.
L.A是哪里
l刘树森,号稚亭,何许人?
Trojan.Dialer.l
z.e.l是什么?
L`OREAL REVITA LIFT
l say 是什么意思
L制的含义?
H E L P