ある種のキャラクター デバイスを実装しましたが、copy_from_user 関数のヘルプが必要です。
私は構造を持っています:
struct my_struct{
int a;
int *b;
};
ユーザー空間で初期化し、「書き込み」関数を使用して my_struct へのポインターを char デバイスに渡します。カーネルのスペース キャラクター デバイスの 'write' 関数では、*char からこの種の構造体にキャストします。kmalloc を使用して構造体にいくらかのメモリを割り当て、それに対して実行copy_from_user
します。
単純な「int a」には問題ありませんが、b が指す値ではなく、b 値のポインター (アドレス) のみをコピーするため、現在カーネル空間にいて、ユーザー空間メモリを指すポインターを使用しています。 . これは正しくありません。ユーザー空間ポインターに直接アクセスするべきではありません copy_from_user
。構造体のすべてのポインターにアクセスしてから、関数を使用して「読み取り」関数のすべてのポインターをコピーする 必要がありcopy_to_user
ますか?