Программа eBPF завершается с ошибкой «libpf: не удалось найти действительный BTF ядра» после обновления до ядра 6.8.0-48Linux

Ответить Пред. темаСлед. тема
Anonymous
 Программа eBPF завершается с ошибкой «libpf: не удалось найти действительный BTF ядра» после обновления до ядра 6.8.0-48

Сообщение Anonymous »

Я учусь использовать eBPF в средах Linux с помощью библиотеки libbpf. У меня есть простая программа eBPF, которая успешно компилируется и работает на ядре версии 5.15.0-125-generic, но после обновления моего ядра до 6.8.0-48-generic, программа не запускается со следующими сообщениями об ошибках:

Код: Выделить всё

libbpf: failed to find valid kernel BTF
libbpf: Error loading vmlinux BTF: -3
libbpf: failed to load object 'execve.bpf.o'
Failed to load eBPF object
Окружающая среда:
  • ОС: Ubuntu 22.04. 5 LTS x86_64
  • Ядро: 6.8.0-48-generic (обновлено с 5.15.0-125-generic)
    < li>Процессор: Intel i9-14900K
  • Код: Выделить всё

    neofetchРезультат команды 
    выглядит следующим образом:
    Изображение
Подробности проекта:
Я работаю над небольшим проектом eBPF, который отслеживает execve() системные вызовы. Код доступен в моем репозитории GitHub:
https://github.com/KnightChaser/hello-e ... e_tracking
Проект состоит из:
  • Makefile: собирает и запускает код.
  • execve.bpf.c: код на стороне ядра, который фиксирует выполнение execve().
  • execve_user.c : код пользовательского пространства, который взаимодействует с программой eBPF через кольцевой буфер и отображает данные.
Предпринятые шаги:< /p>
  • Сгенерирован vmlinux.h:

    Код: Выделить всё

    sudo apt update
    sudo apt install linux-headers-$(uname -r) clang llvm libbpf-dev gcc-multilib make
    bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h
    
  • Создал программу:
  • Запустил программу:

    Код: Выделить всё

    sudo ./execve_user
    
    Это приводит к появлению сообщений об ошибках, упомянутых выше.
Попытки устранения неполадок:
  • Проверенная поддержка BTF ядра: Гарантировано, что ядро ​​скомпилировано с поддержкой BTF.
  • Проверено pahole Версия: подтверждено, что pahole — это версия 1.25.
  • Установите LIBBPF_LOG_LEVEL= debug: предпринята попытка получить более подробные журналы, но дополнительных результатов не получено.

    Код: Выделить всё

    LIBBPF_LOG_LEVEL=debug sudo ./execve_user
    
  • Использована strace: Отслежены системные вызовы и замечено, что программа пытается получить доступ к несуществующим объектам. файлы типа /boot/vmlinux-6.8.0-48-generic:

    Код: Выделить всё

    access("/boot/vmlinux-6.8.0-48-generic", R_OK) = -1 ENOENT (No such file or directory)
    access("/lib/modules/6.8.0-48-generic/vmlinux-6.8.0-48-generic", R_OK) = -1 ENOENT (No such file or directory)
    ...
    
  • Напротив, в ядре 5.15.0-125-generic программа не пытается получить доступ к этим файлов и успешно запускается.
Дополнительная информация:
  • В моей системе установлена ​​двойная загрузка Windows 11 и Ubuntu через grub2win.
  • Файл vmlinux.h существует и создан без ошибок.
  • Похоже, проблема связана с обновленной версией ядра.
Вопрос:< /p>
Почему моя программа eBPF не работает с libbpf: не удалось найти действительный BTF ядра после обновления до ядра 6.8.0-48-generic, и как это сделать могу ли я решить эту проблему?
Любая информация о том, почему libbpf не может найти действительный BTF ядра в новом ядре и какие шаги я могу предпринять для решения этой проблемы, будет очень полезна. оценил.

Что я уже пробовал:
  • Переустановка заголовков ядра: переустановлены заголовки ядра для новой версии ядра.
  • Повторное создание vmlinux.h< /strong>: убедитесь, что vmlinux.h соответствует новому ядру.
  • Проверка файлов BTF: проверено, что /sys /kernel/btf/vmlinux существует и доступен.
  • Исследование альтернативных местоположений BTF: Замечено, что libbpf ищет файлы BTF в несколько мест, но они не существуют для нового ядра.
Будем очень благодарны за любую помощь или рекомендации по решению этой проблемы!

Будем очень признательны!

p>
(Примечание: в настоящее время эта проблема рассматривается в выпуске GitHub https://github.com/libbpf/libbpf/issues/863, который я написал вчера. Поскольку репозиторий libbpf на GitHub не так активен, я снова загружаю свой вопрос после уточнения предложений в StackOverflow, где соответствующие разработчики могут быть доступны.)

Подробнее здесь: https://stackoverflow.com/questions/791 ... r-upgradin
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»