2

eBPFをサポートするアプリケーションをビルドしたいCentOS 7(カーネルのバージョンは です3.10.0):

if(setsockopt(sock, SOL_SOCKET, SO_ATTACH_BPF, prog_fd, sizeof(prog_f)) {
    ......
}

そこで、4.0.5バージョンをダウンロードし、次の構成を行います。

CONFIG_BPF=y
CONFIG_BPF_SYSCALL=y

次に、このリンク4.0.5に従って、カーネル をビルドしてインストールします。

を実行make modules_install installした後、まだSO_ATTACH_BPFinがないことがわかり<asm-generic/socket.h>ました。そのため、上記のコードは正常にコンパイルできません。

SO_ATTACH_BPFソケットオプションをサポートする Linux カーネルをビルドするには?

4

2 に答える 2

2

Fedora 21 に基づく私のセットアップでは、最新のカーネルをコンパイルしてインストールするためにリンクしたものと非常によく似た手順を使用します。追加の手順として、カーネル ビルド ツリーから次の手順を実行して、カーネル ヘッダー ファイルを /usr/local/include にインストールします。

sudo make INSTALL_HDR_PATH=/usr/local headers_install

これにより、ストック カーネル ヘッダー ファイルが にインストールされたまま/usr/include/{linux,asm,asm-generic,...}になり、新しいカーネル ヘッダー ファイルが にインストールされ/usr/local/include/{linux,asm,asm-generic,...}ます。テスト プログラムのコンパイル時に、使用するビルド システムによっては、gcc/clang の前に-I/usr/local/include.

于 2015-06-09T17:01:21.117 に答える
0

新しくインストールされたカーネルは をサポートしてSO_ATTACH_BPFいますが、現在のlibcパッケージはそれについてサポートしていません (あなたが言及したように、ディストリビューションのネイティブ 3.10.0 カーネルには、指定されたオプションのサポートがありません)。

libcユーザー空間プログラムで新しいカーネルの機能を使用するには、パッケージも更新する必要があります。

于 2015-06-09T09:08:57.917 に答える