イーサネットを介したカスタム通信用のカーネル モジュールを構築したい場合を除き、libc の最速のユーザー空間 API は Berkley Sockets API です。はい、これはカーネル TCP/IP および UDP/IP のラッパーです。これは IP 上のレイヤーであり、WWAN、LAN、およびイーサネットのレイヤーであり、他の何か上のレイヤーです。と正確なパフォーマンス、私はより低いものを使用する必要があるカーネルモジュールを書くのではなく、ユーザーランドの単純なものにとどまることをお勧めします。私が完全に間違っていない限り、ハードウェアに実際にアクセスするどころか、ユーザー空間から生のイーサネット、WWAN、または LAN にアクセスする方法はありません。
注: UNIX ネットワーク スタック全体とネットワーク カード ドライバーを数年かけて書き直す場合は、この呼び出しで root として実行すると、ユーザー空間から x86 I/O ポート アクセスを取得できますが、ioperm()
UNIX ネットワーク全体を書き直すことはお勧めしません。スタック。それはほぼ20年の仕事です。また、サードパーティ製アプリケーションから直接ハードウェアにアクセスすると、セキュリティ上の問題が発生するのを待っています。
注: ネットワークに従来のハードウェアを使用しなくても問題ない場合は、両端 USB ケーブル用のカスタム ドライバーを作成し、それを介してカスタム ネットワーク プロトコルを作成することができます。おそらく、Linux USB デバイス ドライバーを作成するのが最も簡単な種類のドライバーです。 、そのための大きな API があるためです。ただし、USB 2.0 は古いイーサネット規格よりも高速であるため、ここで速度がどのように積み重なるかは本当にわかりませんが、現在は SUB 3.0 があるため、1 Gbps イーサネットが使用され始めているため、これはより高速または低速になる可能性があります。利用可能なハードウェアによって異なります。これは、使いやすさに関するものです。
編集: スピードのためにカーネルにコードを入れないでください。お願いします。マシンに設置した巨大なセキュリティ ホールは、パフォーマンスをわずかに向上させるだけの価値はありません。システムコールが非常に高価だった時代があり、最小化してカーネルに追加することがオプションでしたが、Intel のsysenter
/sysexit
や AMD のsyscall
/などの新しい標準sysret
では、セキュリティ ホールを保証しないほど安価です。