[linux device driver] Chapter 04:使用/proc文件系统查询调试
来源:互联网 发布:s7总决赛 知乎 编辑:程序博客网 时间:2024/05/15 22:32
首先看代码:
那么如何在/proc中实现相应的文件呢?通过调用内核定义的创建proc函数可以实现:
如果要删除该文件,可以调用这个函数:
scull的read proc方法
int scull_read_procmem(char *buf, char **start, off_t offset, int count, int *eof, void *data){int i, j, len = 0;int limit = count - 80; /* Don't print more than this */for (i = 0; i < scull_nr_devs && len <= limit; i++) {struct scull_dev *d = &scull_devices[i];struct scull_qset *qs = d->data;if (down_interruptible(&d->sem))return -ERESTARTSYS;len += sprintf(buf+len,"\nDevice %i: qset %i, q %i, sz %li\n",i, d->qset, d->quantum, d->size);for (; qs && len <= limit; qs = qs->next) { /* scan the list */len += sprintf(buf + len, " item at %p, qset at %p\n",qs, qs->data);if (qs->data && !qs->next) /* dump only the last item */for (j = 0; j < d->qset; j++) {if (qs->data[j])len += sprintf(buf + len," % 4i: %8p\n",j, qs->data[j]);}}up(&scull_devices[i].sem);}*eof = 1;return len;}通过上述函数,scull将数据输出到用户可见的/proc文件夹下的某个文件。
那么如何在/proc中实现相应的文件呢?通过调用内核定义的创建proc函数可以实现:
static inline struct proc_dir_entry *create_proc_read_entry(const char *name,mode_t mode, struct proc_dir_entry *base, read_proc_t *read_proc, void * data){struct proc_dir_entry *res=create_proc_entry(name,mode,base);if (res) {res->read_proc=read_proc;res->data=data;}return res;}
那么scull是如何结合两者呢?代码如下:
static void scull_create_proc(void){struct proc_dir_entry *entry;create_proc_read_entry("scullmem", 0 /* default mode */,NULL /* parent dir */, scull_read_procmem,NULL /* client data */);entry = create_proc_entry("scullseq", 0, NULL);if (entry)entry->proc_fops = &scull_proc_ops;}这样就会在/proc目录下创建一个scullmem文件,当用户读取它的时候会调用scull_read_procmem,输出相应的数据。
如果要删除该文件,可以调用这个函数:
static void scull_remove_proc(void){/* no problem if it was not registered */remove_proc_entry("scullmem", NULL /* parent dir */);remove_proc_entry("scullseq", NULL);}
0 0
- [linux device driver] Chapter 04:使用/proc文件系统查询调试
- [linux device driver] Chapter 04:Magic SysRq Key
- [linux device driver] Chapter 03:scullc_open理解
- [linux device driver] Chapter 03:字符设备注册学习
- [linux device driver] Chapter 03:IS_ERR的理解
- [linux device driver] Chapter 14:kobject_init的理解
- [linux device driver] Chapter 03:make输出重定向
- [linux device driver] Chapter 03:scull_load脚本理解
- [linux device driver] Chapter 03:从scull_load了解awk
- strace调试(Linux Device Driver)
- Linux内核proc文件系统使用示例
- linux proc文件系统使用之单次读
- Linux device drives chapter 4(调试技术)
- Linux Device Driver: char device
- linux device driver
- Linux device driver
- Linux device driver
- Linux Device Driver
- 每日一题6:位图向量排序
- 快速实现 ListView下拉,图片放大刷新操作
- IDF实验室之天罗地网你关注最新的漏洞吗
- create new Android Virtual Device: no system images installed for this target
- 黑马程序员——xcode的使用
- [linux device driver] Chapter 04:使用/proc文件系统查询调试
- How to calculate t distributions
- the first blood
- 闪讯1.2.16.20、闪讯1.2.17.23开不了猎豹wifi的解决方法:
- VS2010产品密匙
- Spark1.0.0 源码编译和部署包生成
- JAVA NIO(二)基础 内存管理 文件锁定 Socket服务器客户端通信
- Understanding the p-value - Statistics Help
- 黑马程序员————C语言——基本语法2