関数を使用して、ユーザー空間からカーネル空間に値をコピーしようとしています:
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」にコピーしたい
ユーザー空間から作成する関数呼び出しは次のとおりです (書き込みは file_operations 構造体によると device_write です):
write (fd,buffer,8, &off);
「desp」に保存する必要がある値を印刷すると、常に0になります(8になるはずです)。私のコードの問題は何ですか? いくつかの例を見てきましたが、多くのバリエーションを実装しましたが、どれも機能しません。