gpt4 book ai didi

c - 获取猫 :/dev/mydevice1: Invalid argument as output when trying to communicate in driver

转载 作者:行者123 更新时间:2023-12-02 03:40:08 25 4
gpt4 key购买 nike

我正在尝试在 Linux 内核中开发一个 FIFO 虚拟字符设备驱动程序。我正在尝试将数据从在一台设备上执行的一个进程复制到在另一台相同类型的设备上执行的另一进程。

我正在尝试从 mydevice1 读取

cat/dev/mydevice1

并写入我的设备

echo a >/dev/mydevice

但我一直收到错误:

cat: /dev/mydevice1: Invalid argument

在第二个设备输出(即读取设备)。

这是我从设备读取的代码

static ssize_t device_read( struct file *file,char *bufStoreData, size_t count,
loff_t *ppos )
{

ssize_t val = 1;
if(access_mode == WRITE_MY)
return -EINVAL;
else
res = wait_event_interruptible (read_queue, ready_to_read);

printk(KERN_ALERT "going to copy\n");
res = copy_from_user(bufStoreData,virtual_device.data,count);
printk(KERN_ALERT "copied data %c \n",virtual_device.data[0]);
ready_to_read = 0;
ready_to_write = 1;
wake_up_interruptible (&write_queue);
return val;
}

当我使用 dmesg 检查输出时,我得到正在复制数据,但我没有在设备上得到任何输出。在读取设备的输出中获取无效参数。

最佳答案

同意 n.m 和 Safayet Ahmed,尝试改变:

res = copy_from_user(bufStoreData,virtual_device.data,count);           

收件人:

res = copy_to_user(bufStoreData,virtual_device.data,count);           

术语可能有点困惑,我认为它是用户空间进程从内核内存读取数据或向内核内存写入数据。

在稍微不同的主题上,函数总是返回 1,无论读取的字节数是多少。传统的读取函数返回读取的字节数,或 -1 结合设置 errno 以指示错误。你是故意打破这个惯例吗?

此外,每次函数运行时,res 变量中的 wait_event_interruptible 的结果都会被覆盖。

关于c - 获取猫 :/dev/mydevice1: Invalid argument as output when trying to communicate in driver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20597993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com