copy_to_user
カーネルが関数を使用するのはなぜですか?
ユーザー空間のデータを直接操作することはできませんか?
カーネルアプリケーションとユーザースペースアプリケーションのアドレススペースは異なるため、ユーザースペースにコピーするには、アドレススペースを変更する必要があります。各プロセスには、独自の(ユーザー)アドレス空間があります。
また、ユーザースペースにコピーするときにカーネルがクラッシュすることはないため、copy_to_user
関数はおそらく宛先アドレスが有効であることを確認します(おそらく、そのアドレスは、たとえばスワップスペースからページインする必要があります)。
特定のカーネルが 1 つのアーキテクチャー用にのみ作成された場合、これは妥当な選択である場合とそうでない場合があります。
アーキテクチャごとに異なる可能性がある多くの考慮事項があるため、ある種のポリモーフィック操作が必要です...
保護...カーネルのアクセス権が多すぎたり少なすぎたりする可能性があり、どちらの方法でも、特定のターゲットで追加のコードが必要になる場合があります
アドレス空間...ユーザー空間とカーネル空間が重複する可能性があるため、ターゲット固有のソリューションまたは一時的なマップが必要になります
ページ フォールト管理 ... ユーザー空間へのアクセスはフォールトする可能性があり、これを回避するか許可する必要があります。特定の場所へのアクセスを制限することで、追加のセットアップまたは障害の理由の特定が可能になります。