GNU/Linux >> Linux の 問題 >  >> Linux

ユーザー空間のLinuxブロックデバイスドライバーを作成するには?

常に最初のエラーを見る:

あなたの場合、インクルードファイルに問題があるように見えます。 request_queue_t が定義されていません。

これは非推奨のタイプであるため、コード例よりも新しいバージョンの linux/blkdev.h を使用している可能性があります。

typedef struct request_queue request_queue_t; を追加してみてください


ユーザー空間でブロックドライバーを実行する「公式」の方法はありませんが、NBD ドライバーを (ab) 使用して、ループバックネットワークを介して、通常のソケットでリッスンし、NBD プロトコルを話すデーモンと対話することで、これを行うことがよくあります。詳細については、NBD ドキュメントを参照してください。

あなたの例は、カーネルモジュールとして構築する必要があるカーネルモードブロックデバイス用です。また、カーネルの内部構造は常に変化しているため、互換性がなくなっている可能性があります。


MarkR の提案に従って、AF_UNIX 経由で NBD プロトコルを話すことさえ可能です。 ソケット ペアであるため、追加のローカル デーモンは必要ありません。このプロトコルを実装するプログラムは、ソケット ペアを設定し、子をフォークする必要があります。親と子の両方がソケット ペアの一方の端を閉じます。そのうちの 1 つはソケットの端でリクエストの受け取りを開始し、もう 1 つは NBD ドライバーをソケットの端に接続します。


Linux
  1. Linux:デバイスに使用されているデバイスドライバーを見つける方法は?

  2. Linux –ブロックデバイスが/sysまたは/procから読み取り専用かどうかをテストする方法は?

  3. Linux – Linux上のデバイスに関連付けられているドライバー(モジュール)を見つける方法は?

  1. Linux で仮想ブロック デバイス (ループ デバイス/ファイルシステム) を作成する方法

  2. IOCTL Linux デバイス ドライバー

  3. Linux 上のデバイスに関連付けられているドライバー (モジュール) を見つける方法は?

  1. Linuxコマンドを使用して画像にテキストを書き込む方法

  2. Linux – Linuxカーネルはどのようにしてデバイスのメジャー番号とマイナー番号を認識しますか?

  3. Linux –論理的に切断されたUSBデバイスを再接続する方法は?