私はある種の文字デバイスを実装しました。私はcopy_from_user関数の助けが必要です。私は、ユーザ空間でそれを初期化し、「書き込み」機能を使用して、私のchar型のデバイスにmy_structへのポインタを渡すLinuxカーネル:copy_from_user - ポインタ付き構造体
struct my_struct{
int a;
int *b;
};
:
私は構造をしました。カーネルのスペースキャラクタデバイスの '書き込み'機能では、この文字を* charからこのような構造にキャストします。私はkmallocを使って構造体のためにいくつかのメモリを割り当て、それにcopy_from_user
を実行します。
シンプルな 'int a'では問題ありませんが、bによって指された値ではなくb値のポインタ(アドレス)だけがコピーされるので、今はカーネルスペースに入っています。ユーザ空間メモリ。これは間違っていると私は直接ユーザー空間のポインタにアクセスすべきではないと私は機能を使用して "読み取り"機能ですべてのポインタをコピーし、copy_from_user
私の構造体のすべての単一のポインタにする必要がありますか?
また、ポインタを持つ構造体をとるsyscallsやioctlについて考えることはできません。文字列を持つものであっても、代わりに構造体にcharの配列があります。すべてのポインタメンバーに対してこれを行うコードを記述することは非常に厄介であるという事実は、それに関係しているかもしれません。 :-) – asveikau
@asveikau: 'readv()'と 'writev()'? – caf