Всё же без перекомпиляции ядра не обойтись. Сетевой стек в ядре wirenboard собран монолитно, поэтому даже досборка модуля не поможет.
Для сборки ядра использовалась система Debian 9.
Ядро было собрано так:
apt update && sudo apt install build-essential libncurses5-dev fakeroot lzop bc git gcc-arm-linux-gnueabihf
git clone https://github.com/wirenboard/linux
cd linux/
git submodule update --init --recursive
make mrproper
make KBUILD_OUTPUT=.build-wb6 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
KERNEL_FLAVOUR=wb6 scripts/package/wb/do_build_deb.sh
На этапе menuconfig были проверены и включены опции ядра, указанные в документации wireguard :Compilation from Source Code - WireGuard
CONFIG_NET for basic networking support
CONFIG_INET for basic IP support
CONFIG_NET_UDP_TUNNEL for sending and receiving UDP packets
CONFIG_CRYPTO_ALGAPI for crypto_xor
[*] Networking support (NET) -->
Networking options -->
[*] TCP/IP networking (INET)
[*] IP: Foo (IP protocols) over UDP (NET_FOU)
[*] Cryptographic API (CRYPTO) -->
[*] Cryptographic algorithm manager (CRYPTO_MANAGER)
Далее для проверки, что ядро собрано корректно и сможет загрузиться deb пакет с ядром linux-image-wb6_4.9.22-wb2_armhf.deb был распакован.
Директория с модулями ядра сжата в архив, образ ядра и архив с модулями скопированы на флешку с файловой системой FAT32.
dpkg -x linux-image-wb6_4.9.22-wb2_armhf.deb ./
Флешка подключена к контроллеру, смонтирована и директория с модулями 4.9.22-wb2 скопирована в /lib/modules/4.9.22-wb2
Файл с образом ядра vmlinuz-4.9.22-wb2 перименован в zImage и помещён в корень флешки.
Для проверки загрузки с флешки контроллер был подключен через usb провод к компьютеру и посредством putty и debug консоли введены команды в загрузчик: Отладочный порт — Wiren Board
load mmc ${mmcdev}:${mmcpart} ${loadaddr} /boot/uEnv.txt
run loadfdtandoverlays
usb start
fatls usb 0:1
fatload usb 0:1 $loadaddr /zImage
setenv optargs ${optargs} root=/dev/mmcblk${mmcdev}p${mmcpart} rootwait ro test1
run setbootargs
bootz ${loadaddr} - ${fdt_addr}
Учтите, что времени на ввод команд в загрузчике немного, порядка 15 секунд, по истечении времени процедура запуска начинается заново и команды нужно ввонить снова.
Для проверки, что всё же загружено собранное ядро я дописал в строку параметров ядра слово test1, хотя можно увидеть и по версии ядра и дате сборки.
В начале я пробовал на USB 3.0 флешке объёмом 32 Гигабайта и её не было видно.
После выполнения команд
usb start
usb tree
должно быть видно usb storage устройство, если нет, то пробуйте другую флешку.
В итоге я использовать USB 2.0 флешку на 2 Гб.
Система загрузилась с собранного ядра.
Удостовериться в этом можно введя команду
uname -a
Linux wirenboard **4.9.22-wb2** #1 SMP **Fri Oct 22 17:47:31 MSK 2021** armv7l GNU/Linux
И посмотрев вывод команды
cat /proc/cmdline
console=ttymxc0,115200 root=/dev/mmcblk0p2 rootwait ro test1
После успешной загрузки образ ядра был скопирован в /boot/zImage в памяти контроллера.
Собранные deb пакеты просто устанавливаться не хотели, пакетный менеджер ругался на версию. Возможно виной было, что я не поменял префикс при сборке ядра и он у меня -wb2, в любом случае ядро рабочее и далее для сборки внешних модулей нам нужны только заголовочные файлы собранного ядра.
Всё остальное выполняется на самом контроллере.
По аналогии с модулями ядра я распаковал пакет с заголовочными файлами ядра в /usr/src/
cd /
dpkg -x linux/linux-headers-wb6_4.9.22-wb2_armhf.deb ./
Находиться нужно в корне, потому что в deb пакете файлы находятся относительно корня.
Для успешной сборки модуля wireguard нам нужно пересобрать две подпрограммы из linux-headers собранного ядра. Т.к. ядро собиралось на системе с архитектурой x86_64, а не arm, то и эти программы собраны под x86_64.
Для этого на контроллере делаем:
apt update
apt install gcc
cd /usr/src/linux-headers-4.9.22-wb2/scripts/basic
gcc fixdep.c -o fixdep
cd /usr/src/linux-headers-4.9.22-wb2/scripts/mod
gcc modpost.c file2alias.c sumversion.c -o modpost
Для установки wireguard нужно подключить репозитория stretch-backorts, если его нет.
Теперь нам осталось только собрать wireguard.
apt update
apt install wireguard
Сейчас уже не помню подключал ли я руками репозитории Debian Stretch или они были подключены, но я ставил пакет с wireguard из репозитория.
Если установлен пакет wireguard-dkms
Можно собрать и руками:
cd /usr/src/wireguard-1.0.20210219
make
make install