使用proc,我们可以很容易地使用读和写系统调用,如本例所示。write on /proc entry through user space
但我正在使用调试器将信息从驱动程序传递到用户空间。我可以找到这两个示例代码。在这里,应用程序可以使用mmap()系统调用对调试器文件进行读写。
但是,在我的例子中,假设需要使用Debugfs文件与设备驱动程序进行通信:
user-space application <-------> debugfs file <-------> Device driver发布于 2012-12-30 09:08:34
您可以看看kmem外泄是如何在mm/kmemles.c中使用调试器的:
static const struct seq_operations kmemleak_seq_ops = {
.start = kmemleak_seq_start,
.next = kmemleak_seq_next,
.stop = kmemleak_seq_stop,
.show = kmemleak_seq_show,
};
static int kmemleak_open(struct inode *inode, struct file *file)
{
return seq_open(file, &kmemleak_seq_ops);
}
static int kmemleak_release(struct inode *inode, struct file *file)
{
return seq_release(inode, file);
}
static ssize_t kmemleak_write(struct file *file, const char __user *user_buf,
size_t size, loff_t *ppos)
{...}
static const struct file_operations kmemleak_fops = {
.owner = THIS_MODULE,
.open = kmemleak_open,
.read = seq_read,
.write = kmemleak_write,
.llseek = seq_lseek,
.release = kmemleak_release,
};
dentry = debugfs_create_file("kmemleak", S_IRUGO, NULL, NULL,
&kmemleak_fops);发布于 2017-03-19 16:13:34
这个问题是Google中mmap调试器的最高搜索结果。我在这里补充一个重要的信息。根据这个https://lkml.org/lkml/2016/5/21/73,内核4.8.0或更高版本中的post debugfs_create_file()将忽略结构file_operations中的.mmap字段
使用debugfs_create_file_unsafe()作为解决方法
https://stackoverflow.com/questions/14079893
复制相似问题