私は関数の実装とLinuxのファイルシステムを持っている:function-handlerでwrite関数のユーザ空間バッファを直接使用してメモリを節約する(Linux、Kernel)?
ssize_t (*write) (struct file *file, const char __user *buffer, size_t count, loff_t *pos);
は、今の私は(機能ハンドリング以内)パリティを計算するために、バッファのデータを使用したいとしましょう。 私は
copy_from_user(void *to, const void __user *from, unsigned long n)
を使用することができますしかし、問題は、私が最初に私のカーネル空間ポインタにメモリを割り当てる必要があるということです。コピーしたいデータの量は最大です。約7.5 MBおよび分。 512KB。私がkmalloc
を使ってカーネルにメモリを割り当てると、メモリプールに十分なメモリが割り当てられない可能性もあります。なぜなら何とか失敗するからです。
私はちょうど私のコードのユーザー空間からのポインタ?
...
*(dest) ^= *(buf);
...
これまでのところ、(小さいメモリ領域でも)動作するようです。 メモリマッピングの仕組みがわかりません。ユーザー空間のメモリが連続していない可能性がありますか?スワップアウトすることもできますか?危険とは何ですか?どうも!
の可能性のある重複した[Linuxカーネルからユーザー空間のメモリにアクセスする方法?](http://stackoverflow.com/questions/10509850/how-to-access-user-space-memory-from-the -linux-kernel) –