编写一个简单的杂项字符设备驱动程序,具有读写操作

编写一个简单的杂项字符设备驱动程序,具有读写操作

感谢您查看这个问题。

我正在编写一个简单的杂项字符设备,具有读写操作。请继续阅读...

TEXT当我这样做时,以下代码仅打印一次所需的文本

cat /dev/mydevice01

这是读取函数的代码。

static ssize_t my_read(struct file *file, char __user *buff, size_t count, loff_t *ppos)
{
    char *print_str = TEXT;

    if (*ppos != 0)
        return 0;
    if ((count < TEXT_LENGTH) || (copy_to_user(buff, print_str, TLF_ID_LENGTH)))
        return -EINVAL;
    *ppos += count;
    return count;
}

TEXT是使用定义的#define,所以是TEXT_LENGTH

我觉得这段代码有点太复杂了,因此我尝试修改它。这是修改后的代码,但是不断打印所需的文本,直到我使用SIGINT( Ctrl+C) 的过程:

static ssize_t my_read(struct file *file, char __user *buff, size_t count, loff_t *ppos)
{
        char *print_str = TLF_ID;

        if (copy_to_user(buff, print_str, TLF_ID_LENGTH))
                return -EINVAL;
        return count;
}

我是 Linux 内核编程新手。我想知道代码出了什么问题。如果可能的话,一行代码就可以实现相同的功能。提前致谢!

答案1

我自己弄清楚了,我将把答案留给其他正在寻找类似内容的人。

static ssize_t my_read(struct file *file, char __user *buff, size_t count, loff_t *ppos)
{
        char *print_str = TEXT;
        int len = TEXT_LENGTH;

        return simple_read_from_buffer(buff, count, ppos, print_str, len);
}

这按预期工作。只是不要忘记包含这些模块。

#include <linux/fs.h>
#include <linux/init.h>
#include <linux/miscdevice.h>
#include <linux/module.h>

谢谢大家的帮助:)。

相关内容