Установка WireGuard на платы Nvidia Tegra?

Вопрос или проблема

Я работаю с одноплатными компьютерами Nvidia Tegra для кастомного приложения. Приложение использует GPU Nvidia, специфичный для этих плат. Система работает на aarch64 (arm64) Ubuntu 22.04 Linux.

Мне нужно использовать WireGuard на этих платах. Но я не могу заставить WireGuard работать с ядром Tegra. Я даже пробовал wireguard-dkms. Я бы предпочел использовать режим ядра из-за производительности.

Linux 00000273 5.15.122-tegra #1 SMP PREEMPT Thu Nov 30 10:30:37 PST 2023 aarch64 aarch64 aarch64 GNU/Linux

Я слышал, что у многих людей были проблемы с этим. У кого-то есть решение?

Мне было очень грустно увидеть этот вопрос без ответов, когда я сам начал работать над этой проблемой. Это была настоящая головоломка. Теперь у меня это работает, поэтому я поделюсь здесь, чтобы помочь другим и себе в будущем, когда я неизбежно столкнусь с этой же проблемой через несколько месяцев.

Сначала я обновил ядро до текущей версии с помощью sudo do-release-upgrade, пока не стал на 5.10.65-tegra. Затем я установил wireguard и wireguard-tools с помощью sudo apt install wireguard-tools wireguard. Я подозреваю, что wireguard-tools не был нужен, но я не готов его удалять, чтобы проверить, теперь когда все работает. На этом этапе проверка модуля ядра все еще выдавала ошибку:

>> sudo modprobe wireguard
modprobe: FATAL: Module wireguard not found in directory /lib/modules/5.10.65-tegra

Я склонировал wireguard-linux-compat репозиторий. Если просто попытаться собрать это, запустив make после cd в wireguard-linux-compat/src, вы получите бесполезную ошибку:

WireGuard has been merged into Linux >= 5.6 and therefore this compatibility module is no longer required.

поскольку ядро 5.10.65-tegra находится после основной линии Linux 5.6, но модуль WireGuard отключен.

Замечательная вещь в директивах компилятора заключается в том, что их можно закомментировать. Я нашел проблемную ошибку с помощью grep, и она была в wireguard-linux-compat/src/compat/compat.h, после чего просто закомментировал следующее:

/* 
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
#error "WireGuard has been merged into Linux >= 5.6 and therefore this compatibility module is no longer required."
#endif
*/

После этого я смог выполнить make, а затем sudo make install и успешно установить модуль ядра. После этого sudo modprobe wireguard возвращал без вывода или ошибок, и я смог успешно запустить интерфейс wireguard.

Я пробовал достаточно много способов, чтобы это заработало, так что не могу утверждать, что это обязательно сработает без модификации для вас, но это сработало для меня и, надеюсь, поможет следующему человеку, который столкнется с этой проблемой.

Недостаточно репутации, чтобы прокомментировать ответ SleepyOtter, но вот форк и обновленная версия wireguard-linux-compat для любых несчастных душ, которые обнаружат, что оригинальный репозиторий не собирается для них. Несколько дополнительных изменений поверх ответа SleepyOtter для Linux 5.10.216-tegra.

https://github.com/dustin-richards-was-here/wireguard-linux-compat

Ответ или решение

Установка WireGuard на платы Nvidia Tegra

Установка и настройка WireGuard на одноплатных компьютерах Nvidia Tegra может представлять определенные сложности, особенно если система работает на ядре, которое не поддерживает WireGuard по умолчанию. В этой статье мы подробно рассмотрим процесс установки, включая потенциальные проблемы и их решения.

Шаг 1: Обновление ядра

Первое, что нужно сделать, это убедиться, что ваше ядро обновлено до последней версии, оптимизированной для Tegra. В вашем случае рекомендуется выполнить следующее:

sudo do-release-upgrade

Убедитесь, что текущее ядро – это версия 5.10.65-tegra или выше. Это ядро уже включает в себя поддержку WireGuard, однако она может быть отключена по умолчанию.

Шаг 2: Установка WireGuard

После обновления ядра установите необходимые пакеты WireGuard:

sudo apt install wireguard-tools wireguard

Пакет wireguard-tools предоставляет утилиты командной строки для управления WireGuard, хотя его можно не устанавливать для базовой работы модуля, но это может быть полезно для диагностики и настройки.

Шаг 3: Проверка модуля WireGuard

После установки возможно, что модуль WireGuard не будет загружаться:

sudo modprobe wireguard

Если вы получите сообщение об ошибке, такое как:

modprobe: FATAL: Module wireguard not found in directory /lib/modules/5.10.65-tegra

это означает, что модуль не доступен в ядре. В этом случае необходимо скомпилировать модуль WireGuard самостоятельно.

Шаг 4: Компиляция модуля WireGuard

  1. Клонирование репозитория:
    Скачайте совместимый модуль из репозитория wireguard-linux-compat. Это нужно сделать, так как поддержки нет в вашем ядре.

    git clone https://git.zx2c4.com/wireguard-linux-compat
  2. Модификация кода:
    Вызовите следующую команду для входа в директорию:

    cd wireguard-linux-compat/src

    В файле compat/compat.h нужно закомментировать блок кода, связанный с ошибкой, если оно присутствует:

    /* 
    #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
    #error "WireGuard has been merged into Linux >= 5.6 and therefore this compatibility module is no longer required."
    #endif
    */
  3. Сборка и установка:
    Далее выполните команды для сборки и установки модуля:

    make
    sudo make install

Шаг 5: Проверка и запуск

После установки попробуйте снова загрузить модуль:

sudo modprobe wireguard

Если команда выполнится без ошибок, стоит проверить создание интерфейса WireGuard. Используйте утилиты WireGuard для настройки интерфейса согласно вашим требованиям.

Альтернативные решения

Если вам не удастся скомпилировать модуль самостоятельно, можно также использовать форк, который включает в себя необходимые изменения для работы с последними версиями ядра Tegra. Один из таких форков доступен по ссылке: wireguard-linux-compat от dustin-richards-was-here.

Заключение

Установка WireGuard на Nvidia Tegra может быть непростой задачей, но следуя указанным шагам, вы сможете успешно реализовать этот процесс. Если у вас возникнут какие-либо трудности, проверьте совместимость с вашим конкретным ядром и рассмотрите возможность обращения к сообществу для дополнительной помощи.

Эта инструкция будет полезна не только вам, но и другим пользователям, сталкивающимся с аналогичными проблемами.

Оцените материал
Добавить комментарий

Капча загружается...