写入 proc 的内核模块不起作用
Kernel module write to proc does not work
我正在尝试在我的 proc
模块上处理 写入操作,但指针功能不起作用。
当在文件上执行 cat
时,dmesg
命令显示 pr_info 定义在 my_read
函数
$ cat /proc/myprocfile
$ sudo dmesg | grep 'my_read'
[ 5788.919508] myprocfile my_read handler
但是当尝试写入文件时,dmesg
命令从不显示在 my_write
函数[=20= 上定义的 pr_info ]
$ echo 1 > /proc/myprocfile
$ sudo dmesg | grep 'my_write'
我的模块
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/proc_fs.h>
#include <linux/version.h>
#define FILE_NAME "myprocfile"
static struct proc_dir_entry *my_proc_file;
static ssize_t my_read(struct file *file, char __user *buffer, size_t length, loff_t *offset)
{
pr_info("%s my_read handler\n", FILE_NAME);
return -1;
}
static ssize_t my_write(struct file *file, const char __user *buffer, size_t length, loff_t *offset)
{
pr_info("%s my_write handler\n", FILE_NAME);
return -1;
}
static const struct proc_ops proc_file_fops = {
.proc_read = my_read,
.proc_write = my_write
};
static int __init proc_init(void)
{
my_proc_file = proc_create(
FILE_NAME,
0644,
NULL,
&proc_file_fops
);
return 0;
}
static void __exit proc_exit(void)
{
proc_remove(my_proc_file);
}
module_init(proc_init);
module_exit(proc_exit);
MODULE_LICENSE("GPL");
这是我的 Makefile
obj-m += proc_test.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
我的内核版本是5.11.0-40-generic
我已经解决了这个问题,只是将 proc_create_function
上的权限值从 0644 更改为 0666。
static int __init proc_init(void)
{
my_proc_file = proc_create(
FILE_NAME,
0666, // Updated value
NULL,
&proc_file_fops
);
return 0;
}
我正在尝试在我的 proc
模块上处理 写入操作,但指针功能不起作用。
当在文件上执行 cat
时,dmesg
命令显示 pr_info 定义在 my_read
函数
$ cat /proc/myprocfile
$ sudo dmesg | grep 'my_read'
[ 5788.919508] myprocfile my_read handler
但是当尝试写入文件时,dmesg
命令从不显示在 my_write
函数[=20= 上定义的 pr_info ]
$ echo 1 > /proc/myprocfile
$ sudo dmesg | grep 'my_write'
我的模块
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/proc_fs.h>
#include <linux/version.h>
#define FILE_NAME "myprocfile"
static struct proc_dir_entry *my_proc_file;
static ssize_t my_read(struct file *file, char __user *buffer, size_t length, loff_t *offset)
{
pr_info("%s my_read handler\n", FILE_NAME);
return -1;
}
static ssize_t my_write(struct file *file, const char __user *buffer, size_t length, loff_t *offset)
{
pr_info("%s my_write handler\n", FILE_NAME);
return -1;
}
static const struct proc_ops proc_file_fops = {
.proc_read = my_read,
.proc_write = my_write
};
static int __init proc_init(void)
{
my_proc_file = proc_create(
FILE_NAME,
0644,
NULL,
&proc_file_fops
);
return 0;
}
static void __exit proc_exit(void)
{
proc_remove(my_proc_file);
}
module_init(proc_init);
module_exit(proc_exit);
MODULE_LICENSE("GPL");
这是我的 Makefile
obj-m += proc_test.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
我的内核版本是5.11.0-40-generic
我已经解决了这个问题,只是将 proc_create_function
上的权限值从 0644 更改为 0666。
static int __init proc_init(void)
{
my_proc_file = proc_create(
FILE_NAME,
0666, // Updated value
NULL,
&proc_file_fops
);
return 0;
}