Недавно я скомпилировал собственное ядро, которое определяет новое семейство адресов/протоколов под названием «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›», а не заголовки, соответствующие пользовательскому ядру, которое работает в данный момент. Я попытался использовать параметры -I и -isystem в gcc, чтобы направить его на путь, по которому Ubuntu, похоже, размещает заголовки ядра для других ядер, поскольку они казались соответствующими моим исследованиям в Google, но они не помогли.
Мой вопрос: как мне скомпилировать программу на языке C с использованием заголовков для работающего в данный момент пользовательского ядра, а не с заголовками ядра по умолчанию.
Я пробовал это: gcc -isystem /usr/src/linux-headers-3.8.8-custom.5/ sendOnCustom.c -o sendOnCustom
К вашему сведению, скомпилировано с помощью make-kpkg. Кроме того, это мой первый вопрос, надеюсь, он понятен.