Я пытаюсь скопировать значение из пользовательского пространства в пространство ядра с помощью функции:Как правильно использовать copy_from_user?
static ssize_t device_write(struct file *filp, const char *buff, size_t len, loff_t *off)
{
unsigned long copy=0;
int desp=0;
copy = copy_from_user(&desp, &len, 4);
printk(KERN_ALERT "copy: %lx\n", copy);
printk(KERN_ALERT "desp: %d\n", desp);
}
где «Len» является переменной, которая существует в пользовательском пространстве, и я хочу, чтобы скопировать его в «Desp» в пространстве ядра
вызова функции Я делаю из пользовательского пространства (запись является device_write согласно file_operations структуре):
write (fd,buffer,8, &off);
при печати значения, которое должно быть сохранено в «ДЭСПЕ» всегда 0 (должно быть 8). В чем проблема с кодом? Я видел несколько примеров, и я реализовал множество вариантов, но никто не работает.
проблема заключалась в том, что системный вызов имеет только 3 параметра, и я хотел использовать 4, которые находятся в методе структуры файловых операций (device_read/write). Таким образом, при размещении в пространстве ядра компилятор не дает никаких предупреждений о числе параметров, которые имеют методы (это разные) Я пробовал сделать систему llamdas 5 параметров! и компиляция и выполнение не предупреждаются о какой-либо проблеме ... Спасибо за ваши ответы !!! – eduardosufan