1

最近、「AF_CUSTOM」と呼ばれる新しいアドレス ファミリ/プロトコル ファミリを定義するカスタム カーネルをコンパイルしました。

たとえば、カーネル ソースの include/linux/socket.h が次のように変更されました (PF_CUSTOM と同様):

#define AF_NFC      39  /* NFC sockets          */
#define AF_CUSTOM       40  /* Custom sockets           */
#define AF_MAX      41  /* For now.. */

私は AF_CUSTOM を実装する予定ですが、簡単な健全性チェックとして、典型的なサンプル c ソケット プログラムを変更し、「socket(AF_INET, SOCK_STREAM, 0)」を「socket(AF_CUSTOM, SOCK_STREAM, 0)」に置き換えるとコンパイルされるかどうかを確認することにしました。しかし、そうではありませんでした。gcc でコンパイルすると、次のエラーが発生しまし'AF_CUSTOM' undeclared た。現在のカーネルで AF_CUSTOM を定義する必要があるため、少なくともコンパイルされると想定していました。

問題は、gcc がデフォルトのカーネル ヘッダーを使用して「#include <sys/socket.h>」を解決し、現在実行中のカスタム カーネルに対応するヘッダーを使用していないことです。gcc で -I と -isystem の両方のオプションを使用して、Ubuntu が他のカーネルのカーネル ヘッダーを配置しているように見えるパスに誘導しようとしました。

私の質問は、デフォルトのカーネル ヘッダーではなく、現在実行中のカスタム カーネルのヘッ​​ダーに対して C プログラムをコンパイルするにはどうすればよいかということです。

私はこれを試しました: gcc -isystem /usr/src/linux-headers-3.8.8-custom.5/ sendOnCustom.c -o sendOnCustom

参考までに、make-kpkg を使用してコンパイルしました。また、これは私の最初の質問です。理解できることを願っています。

4

1 に答える 1