ユーザー空間でカーネルレベル関数を呼び出す方法

ユーザー空間でカーネルレベル関数を呼び出す方法

カーネルでいくつかのヘルパー機能を開発しました。カーネルの他の関数によって呼び出されます。現在、彼らは私のカスタムカーネルをパニック状態にします:(

デバッグ目的のためにカーネルにのみ配置され、カーネル機能に影響を与えない手動コードとして使用しました。ビルドして実行した後、ユーザー空間でこれらの関数を呼び出す方法があるかどうか疑問に思います。

ベストアンサー1

これはあなたの質問に対する直接的な答えではありません。 @BasileStarynkevitch が正しいと思います。一般に、コードが十分に抽象的である場合(実際にカーネルの依存関係ではない場合)、理論的に簡単に/信頼できる作業ではありません。その後、スタブユーザースペースプロセスに接続してそのようにテストすることができるようです。

しかし、カーネルはあなたに役立ついくつかの機能を提供します。UML(ユーザーモードLinux)(このページを作成する時点では、sourceforgeインフラストラクチャの問題が原因でダウンしているようです。すぐにバックアップできるようになります。)

UMLは、カーネル全体をユーザー空間の実行可能ファイルとして構築する特別な種類のLinux ARCHです。この実行ファイルが実行されると、通常はカーネルのように起動しますが、すべてユーザー空間のプロセス空間に含まれます。これは、他のユーザースペースプロセスと同様に、GDBをUMLプロセスに直接接続し、カーネルデバッガを使用せずに正常にデバッグできることを意味します。

少なくとも以下が必要です。

  • これは、どのカーネルバージョンを使用しても、カーネルソースツリーに当てはまります。
  • ビルドカーネルを使用してくださいARCH=um。どのカーネルと構成を持っているかに関係なく、これは簡単ではないかもしれません。詳細な手順はsourceforgeページ(利用可能な場合)にあります。返品詳しくはこちらをご覧ください
  • このカーネルを起動するには、起動するファイルシステムも必要です。いくつかあります以下は事前に構築されたものです。。すべてのカーネルですべてのファイルシステムを使用できるわけではないので、賢明に選択する必要があるかもしれません。
  • あなたのコードがカーネルモジュールの一部であると仮定します。その場合は、それを使用してモジュールをビルドARCH=umし、UMLカーネルプロセスが実行された後にinsmodを実行する必要があります。

おすすめ記事