作者
彭东林
平台
Linux-4.14.13
Qemu + vexpress
概述
从内核中导出信息到用户空间有很多方法,可以自己去实现file_operations的read函数或者mmap函数,但是这种方法不够简单,而且也会有一些限制,比如一次read读取大于1页时,驱动里就不得不去进行复杂的缓冲区管理。为此,就需要学习一下seq_file的用法,为了更简单和方便,内核提供了single_xxx系列接口,它是对seq_file的进一步封装。
正文
示例程序
1 #include <linux/init.h> 2 #include <linux/module.h> 3 #include <linux/seq_file.h> 4 #include <linux/debugfs.h> 5 #include <linux/fs.h> 6 7 static struct dentry *seq_file_demo_dir; 8 9 static int seq_file_demo_show(struct seq_file *seq, void *v) 10 { 11 seq_printf(seq, "Hello World\n"); 12 return 0; 13 } 14 15 static int seq_file_demo_open(struct inode *inode, struct file *file) 16 { 17 return single_open(file, &seq_file_demo_show, NULL); 18 } 19 20 static const struct file_operations seq_file_demo_fops = { 21 .owner = THIS_MODULE, 22 .open = seq_file_demo_open, 23 .read = seq_read,