Linux DebugFS 子目录也是用debugfs_create_dir来实现
2013-12-27 17:34
387 查看
DebugFS,是一种用于内核调试的虚拟文件系统,内核通过debugfs和用户空间交换数据。类似procfs和sysfs等,这些文件系统都在内存里。
最常用的内核调试手段是printk。但在调试时可能需要修改某些内核变量,这时printk就无能为力,procfs和sysfs虽然也可以实现这个功能,但是偏离了本意,故debugfs从天而降。默认情况下,debugfs会被挂载在目录/sys/kernel/debug之下,如果没有自动挂载,可以用如下命令手动完成:
我们分三种情况说明debugfs如何使用
比如生成树形目录结构如下的调试开关或变量:
mydebug 目录
subdir 目录
c 文件
a 变量
b blob变量
其中,a对应模块中的一个u8类型的变量,b和subdir下面的c都是对应模块里的一个字符数组,只是它们的实现方式不同。
在module_init里,我们首先要建立根目录mydebug:
第一个参数是目录的名称,第二个参数用来指定这个目录的上级目录,如果是NULL,则表示是放在debugfs的根目录里
子目录也是用debugfs_create_dir来实现
建立文件a的代码非常简单:
这表示文件名为“a”,文件属性是0644,父目录是上面建立的“mydebug”,对应的变量是模块中的a。
b是一个32-bytes的字符数组,在debugfs里,数组可以用blob wrapper来实现。
char hello[32] = "hello";
struct debugfs_blob_wrapper b;
b.data = (void*)hello;
b.size = strlen(hello) + 1;
debugfs_create_blob("b", 0444, my_debugfs_root, &b);
blob wapper定义的数据只能是只读的。
那如何往内核里些数据调试呢?通过自定义的文件操作同时实现了读和写。
?
三个文件和子目录已经创建完毕。在module_exit中,我们要记得释放创建的数据。
debugfs_remove_recursive可以帮我们逐步移除每个分配的dentry,如果您想一个一个手动的移除,也可以直接调用debugfs_remove。
最常用的内核调试手段是printk。但在调试时可能需要修改某些内核变量,这时printk就无能为力,procfs和sysfs虽然也可以实现这个功能,但是偏离了本意,故debugfs从天而降。默认情况下,debugfs会被挂载在目录/sys/kernel/debug之下,如果没有自动挂载,可以用如下命令手动完成:
# mount -t debugfs none /sys/kernel/debug
我们分三种情况说明debugfs如何使用
比如生成树形目录结构如下的调试开关或变量:
mydebug 目录
subdir 目录
c 文件
a 变量
b blob变量
其中,a对应模块中的一个u8类型的变量,b和subdir下面的c都是对应模块里的一个字符数组,只是它们的实现方式不同。
在module_init里,我们首先要建立根目录mydebug:
第一个参数是目录的名称,第二个参数用来指定这个目录的上级目录,如果是NULL,则表示是放在debugfs的根目录里
子目录也是用debugfs_create_dir来实现
sub_dir = debugfs_create_dir(
"subdir"
, my_debugfs_root);
建立文件a的代码非常简单:
这表示文件名为“a”,文件属性是0644,父目录是上面建立的“mydebug”,对应的变量是模块中的a。
b是一个32-bytes的字符数组,在debugfs里,数组可以用blob wrapper来实现。
char hello[32] = "hello";
struct debugfs_blob_wrapper b;
b.data = (void*)hello;
b.size = strlen(hello) + 1;
debugfs_create_blob("b", 0444, my_debugfs_root, &b);
blob wapper定义的数据只能是只读的。
那如何往内核里些数据调试呢?通过自定义的文件操作同时实现了读和写。
?
debugfs_remove_recursive可以帮我们逐步移除每个分配的dentry,如果您想一个一个手动的移除,也可以直接调用debugfs_remove。
相关文章推荐
- Linux DebugFS 子目录也是用debugfs_create_dir来实现
- Linux DebugFS 子目录也是用debugfs_create_dir来实现
- Linux C实现 USB挂载后获取每个子目录的路径
- Python基础-面向过程编程实现Linux下cat -rl ‘dir’ |grep ‘keywords’ 功能
- 利用linux的timerfd_create实现计时器示例分享
- linux下通过dup2标准输出重定向查看系统进程方法(也是popen函数实现的方法)
- linux下使用系统调用编程实现dir命令功能
- linux下grep实现某目录下所有目标字符串的递归(包含子目录)查找
- Python基础-面向过程编程实现Linux下cat -rl ‘dir’ |grep ‘keywords’ 功能
- 在Linux系统下使用pthread_create和sleep函数实现随机序列
- 利用linux的timerfd_create实现计时器示例分享
- 精简linux (二)背景图片的设置 网络功能的实现
- Linux CPP程序的三种实现定时任务的方法
- Linux在应用层读写寄存器的方法及实现实例
- Linux 服务器集群系统实现方案详解
- Linux守护进程的编程实现
- uploadFile+nginx实现上传图片(Windows/Linux均可用)
- linux系统中rsync+inotify实现服务器之间文件实时同步
- linux中mmap系统调用原理分析与实现
- linux中触摸屏驱动的实现(1)——基于s3c6410处理器