Я пытаюсь разработать драйвер виртуального символьного устройства FIFO в ядре Linux. Я пытаюсь скопировать данные из одного процесса, выполняющегося на одном устройстве, на другой процесс, выполняющийся на другом устройстве того же типа.Получение cat:/dev/mydevice1: Недопустимый аргумент как вывод при попытке связи в драйвере
Я пытался читать mydevice1
cat /dev/mydevice1
и записи MyDevice
echo a > /dev/mydevice
, но я получаю сообщение об ошибке:
cat: /dev/mydevice1: Invalid argument
во втором выход устройства (th at - считывающее устройство).
Это мой код для чтения из устройства
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
, я получаю данные копируются, но я не получаю никакого вывода на device.Getting неверный аргумент в выход в считывающем устройстве.
В считываемом коде вам необходимо скопировать * на * пользователя, а не из * с * пользователя. –
Я согласен с n.m. Когда вы читаете файл, вы читаете его с точки зрения процесса и данные должны быть скопированы из памяти ядра в память пользователя и, следовательно, copy_to_user. –