2015-06-09 5 views
2

Я хочу построить приложение, которое поддерживает eBPF на CentOS 7 (версия ядра 3.10.0):Как создать ядро ​​Linux для поддержки опции SO_ATTACH_BPF сокета?

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

Так загрузить версию 4.0.5, сделайте следующие конфигурации на:

CONFIG_BPF=y 
CONFIG_BPF_SYSCALL=y 

Далее следуют это link для сборки и установки ядра 4.0.5.

После выполнения make modules_install install, я нахожу, что до сих пор нет SO_ATTACH_BPF в <asm-generic/socket.h>, поэтому приведенный выше код нельзя скомпилировать.

Как создать ядро ​​Linux для поддержки SO_ATTACH_BPF опции сокета?

ответ

2

В моей настройке, основанной на Fedora 21, я использую очень похожие шаги для тех, которые вы связали с компиляцией и установкой последнего ядра. В качестве дополнительного шага, я сделаю следующее из дерева сборки ядра, чтобы установить файлы заголовков ядра в/USR/местные/включают в себя:

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.

+0

Спасибо за ваш ответ! Можно ли полностью заменить все старые файлы заголовков ядра новым ядром? Я использую команду 'make headers_install', вывод« CHK include/generated/uapi/linux/version.h INSTALL usr/include/linux/(411 файлов) ». Он устанавливает все файлы в каталоге '/ usr/include/linux'. –

+0

Вы можете использовать/usr в качестве аргумента для INSTALL_HDR_PATH. Лучшее объяснение того, как использовать headers_install, можно найти здесь: http://lxr.free-electrons.com/source/Documentation/kbuild/headers_install.txt. Однако, я считаю, что пример «/ usr/include» неверен, так как в моих экспериментах это создало/usr/include/include. –

+0

Однако имейте в виду, что на это есть противоречивые ответы, а некоторые из них сообщили о проблемах при использовании/usr в качестве аргумента. http://www.linuxquestions.org/questions/linux-newbie-8/make-headers_install-deleted-header-files-944363/ –

0

Ваше недавно установленное ядро ​​поддерживает SO_ATTACH_BPF, но ваш текущий пакет libc не говорит об этом (как вы говорите, в дистрибутиве родного ядра 3.10.0 отсутствует данная поддержка опций).

Вам необходимо обновить пакет libc, чтобы использовать функции нового ядра в программах пользовательского пространства.

+0

'' находится в 'libc'? а не файлы заголовков ядра? –

+0

'libc' имеет ** собственную копию ** входящих файлов, разделяемых между ядром и пользователем. В ядре такие файлы помещаются под 'include/uapi /' и 'arch//include/uapi /'. – Tsyvarev

+0

Моя версия '' libc'''''''''. Как узнать, какой 'libc' поддерживает' SO_ATTACH_BPF'? –