Comment utiliser correctement copy_from_user?

J’essaie de copier une valeur de l’espace utilisateur vers l’espace kernel avec la fonction suivante:

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); } 

où “len” est la variable qui existe dans l’espace utilisateur et que je veux copier dans “desp” dans l’espace du kernel

l’appel de fonction que je lance depuis l’espace utilisateur est (write est device_write selon la structure file_operations):

  write (fd,buffer,8, &off); 

quand j’imprime la valeur qui devrait être stockée dans “desp” est toujours 0 (devrait être 8). Quel est le problème dans mon code? J’ai vu plusieurs exemples et j’ai implémenté de nombreuses variantes mais aucune ne fonctionne.