写入 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;
}