Какие могут возникать ошибки в ходе выполнения этой функции?Точнее из-за чего данные могут быть не скопированы если делать это так:
buf = usb_buffer_alloc(dev->udev, count, GFP_KERNEL, &urb->transfer_dma);
if (!buf) {
retval = -ENOMEM;
goto error;
}
if (col=copy_from_user(buf, user_buffer, sizeof(*user_buffer))) {
retval = -EFAULT;
goto error;
}
Fedora Core 4.В общем заканчивается функция retval равным -EFAULT;
>Какие могут возникать ошибки в ходе выполнения этой функции?
>
>Точнее из-за чего данные могут быть не скопированы если делать это так:Не совсем к делу относится, но у вас user_buffer какого типа? (я про sizeof(*user_buffer))
А по теме: это может быть, например, из-за того, что user_buffer не указывает на валидную память в пространстве процесса, из которого вы обращаетесь к драйверу. Например если этот код у вас в какой-нибудь функции write() и вы ей передаёте левый указатель вместо нормального буфера.
-if (col=copy_from_user(buf, user_buffer, sizeof(*user_buffer))) {
+if ( (col=copy_from_user(buf, user_buffer, sizeof(*user_buffer))) ) {