常に最初のエラーを見る:
あなたの場合、インクルードファイルに問題があるように見えます。 request_queue_t が定義されていません。
これは非推奨のタイプであるため、コード例よりも新しいバージョンの linux/blkdev.h を使用している可能性があります。
typedef struct request_queue request_queue_t;
を追加してみてください
ユーザー空間でブロックドライバーを実行する「公式」の方法はありませんが、NBD ドライバーを (ab) 使用して、ループバックネットワークを介して、通常のソケットでリッスンし、NBD プロトコルを話すデーモンと対話することで、これを行うことがよくあります。詳細については、NBD ドキュメントを参照してください。
あなたの例は、カーネルモジュールとして構築する必要があるカーネルモードブロックデバイス用です。また、カーネルの内部構造は常に変化しているため、互換性がなくなっている可能性があります。
MarkR の提案に従って、AF_UNIX
経由で NBD プロトコルを話すことさえ可能です。 ソケット ペアであるため、追加のローカル デーモンは必要ありません。このプロトコルを実装するプログラムは、ソケット ペアを設定し、子をフォークする必要があります。親と子の両方がソケット ペアの一方の端を閉じます。そのうちの 1 つはソケットの端でリクエストの受け取りを開始し、もう 1 つは NBD ドライバーをソケットの端に接続します。