最近、「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 を使用してコンパイルしました。また、これは私の最初の質問です。理解できることを願っています。