procfs、debugfs
2016-04-17 14:21
232 查看
procfs 是进程文件系统(file system) 的缩写,包含一个伪文件系统,用于通过内核访问进程信息
这个文件系统通常被挂载到 /proc 目录。由于 /proc 不是一个真正的文件系统,它也就不占用存储空间,只是占用有限的内存
伪文件系统
用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。proc文件系统是动态从系统内核读出所需信息并提交的
优点
在调试时修改某些内核变量,而printk无能为力;为了修改某个值重新编译内核或者驱动过于低效
安装文件系统
头文件
创建目录
创建文件
name就是创建的名字;parent是父目录;mode是这个文件读写权限;data是传入的参数;fops为实现在该文件上进行文件操作的fiel_operations结构指针
变量处理
删除文件
举例
这个文件系统通常被挂载到 /proc 目录。由于 /proc 不是一个真正的文件系统,它也就不占用存储空间,只是占用有限的内存
伪文件系统
用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。proc文件系统是动态从系统内核读出所需信息并提交的
优点
在调试时修改某些内核变量,而printk无能为力;为了修改某个值重新编译内核或者驱动过于低效
安装文件系统
# mount -t debugfs none /mnt
头文件
linux/debugfs.h
创建目录
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);
name就是创建的名字;parent是父目录;mode是这个文件读写权限;data是传入的参数;fops为实现在该文件上进行文件操作的fiel_operations结构指针
变量处理
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);
删除文件
void debugfs_remove(struct dentry *dentry); void debugfs_remove_recursive(struct dentry *dentry);
举例
my_debugfs_root = debugfs_create_dir("mydebug", NULL); //根目录 sub_dir = debugfs_create_dir("subdir", my_debugfs_root); //子目录 debugfs_create_u8("a", 0644, my_debugfs_root, &a); char hello[32] = "Hello world!\n"; struct debugfs_blob_wrapper b; b.data = (void *)hello; b.size = strlen(hello) + 1; debugfs_create_blob("b", 0644, my_debugfs_root, &b); struct file_operations c_fops = { .owner = THIS_MODULE, .open = c_open, .read = c_read, .write = c_write, }; debugfs_create_file("c", 0644, sub_dir, NULL, &c_fops);
相关文章推荐
- 《机电传动控制》学习笔记08-1
- [LeetCode]Verify Preorder Serialization of a Binary Tree
- Android_AndroidManifest.xml
- 《机电传动控制》学习笔记-07
- jquery根据name属性查找
- HDU 1050(其实应该是线段树但规模太小,没必要)
- [Data Structure] Maximum Subsequence Sum
- 技术文章写作及运营的技巧:分析篇 | 什么样的文章受欢迎?
- php序列化存储数据
- 【杭电oj】-2099-整除的尾数(求未知的后两位)
- 20145337《JAVA程序设计》第七周学习总结
- iOS地图开发-高德地图
- 静态注册广播接收者
- [python]Django AttributeError 'tuple' object has no attribute 'regex'
- 几个常用的Linux监控脚本
- php面向对象的简单用法
- 10年资深猎头揭露:他们为什么能年薪百万
- org.eclipse.wst.xsl.jaxp.debug.invoker.TransformationException: No embedded stylesheet instruction f
- 广东工业大学2016校赛决赛 A: Krito的讨伐
- 基础知识点问题