Сборка ядра(с поддержкой IPSec и PPPFilter)

Встала необходимость поднятия на WB6 IPSec. Обнаружилось, что соответствующие модули в стандартном ядре отсутствуют. Плюсом при подключении через сим-карту выявилось отсутствие опции PPPFilter.

Было решено пересобрать ядро.

Начал делать, как тут

https://wirenboard.com/wiki/index.php/Сборка_ядра

  1. Скачал тулчейн “gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf”, дерево исходников и “упрощающие сборку” скрипты.

  2. Установил mxs_wirenboard_defconfig

  3. Сделал menuconfig с включениме недостающих опций и savedefconfig с копированием в /arch/arm/configs/mxs_wirenboard_defconfig

в параметре CROSS_COMPILE указывал соответствующий путь до тулчейн.

  1. На этапе ./build.sh что-то пошло не так, поэтому компиляцию и установку производил вручную по командам из скрипта ./build.sh и scp_kernel.sh. А именно:

make -j8 ARCH=arm LOCALVERSION= CROSS_COMPILE=/home/user/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- zImage

make -j8 ARCH=arm LOCALVERSION= CROSS_COMPILE=/home/user/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- modules

make -j8 ARCH=arm LOCALVERSION= CROSS_COMPILE=/home/user/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- dtbs

make -j8 ARCH=arm CROSS_COMPILE=/home/user/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- INSTALL_MOD_PATH=/home/user/linux-wb/build_kernel/deploy/tmp/1 modules_install

make -j8 ARCH=arm CROSS_COMPILE=/home/user/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- INSTALL_MOD_PATH=/home/user/linux-wb/build_kernel/deploy/tmp firmware_install

Всё скомпилировалось без проблем. Правда смутил вес ядра(чуть более 3 мегабайт).

  1. Скопировал полученные модули, ядро и Firmware на Wirenboard:

ядро - в /boot
дерево устройств - /boot/dtbs
модули - в /lib/modules/4.9.22
firmware - в /lib/firmware и для верности в /lib/firmware/4.9.22

  1. Перезапустил Wirenboard

  2. Загрузка останавливается на сообщении “Загрузка ядра”.

То есть ядро соответствующего формата есть, всё остальное вроде тоже имеется, но ядро загрузить девайс не может! Подскажите, что делаю не так?

Покажите ls -lh папки с ядром. И да, ядро было просто поверх оргигинального записано? ссылка zImage осталась?

Сделать листинг команды в данный момент проблематично, так как загрузка не осуществляется. Если память не изменяет я скопировал новое ядро с именем 4.9.22 и создал на него новую ссылку с именем zImage, предварительно удалив старую. Стандартное ядро при этом не удалял(оставил в папке /boot)

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

Листинги конфигурационных файлов .config и mxs_wirenboard_defconfig также прилагаю.

config.txt (110.2 КБ)

mxs_wirenboard_defconfig.txt (13.0 КБ)

Не совсем понятен алгоритм. На первом этапе(после подачи команды make mxs_wirenboard_defconfig) мы выбираем дефолтный конфиг, на основе которого создаётся файл .config в директории KERNEL. Далее после подачи make menuconfig мы добавляем/убираем опции из всё того же .config. И, наконец, делая savedefconfig и копируя defconfig в папку arch/arm/configs я так понимаю файлы должны становиться идентичными? Но они явно отличаются! Вопрос - так по какому конфигу всё-таки происходит компиляция после подачи команды make zImage modules и dtbs?

И сопутствующий вопрос - файлы .dtb копировал из KERNEL/arch/arm/boot/dts(при помощи поиска, аналогично скрипту). Если конфигурационный файл корректный, с моими дополнениями, то по какой причине необходимые файлы .dtb могут отсутствовать? Скопировать из старого дерева(того, что на устройстве) я так понимаю не совсем корректно? Как быть?

Кажется, инструкция сильно устарела.

  1. Тулчейн не принципиален, подойдёт стандартный из Debian/Ubuntu например.

  2. Собирается оно как-то так:

boger@boger-laptop:~/work/board/build_kernel$ KERNEL_FLAVOUR=wb6 ./build_deb.sh

defconfig для wb6 не mxs, но скрипт выше про это знает.

не самая хорошая идея. Лучше разобраться, что именно не так.

это нормально

собраете под архитектуру WB5, а не WB6

savedefconfig и копирование нужен только для того, чтобы обновить defconfig. Чтобы добавить последний в git и прислать нам pull request.

конфиг под WB5

1 лайк

Всё скомпилировалось, загрузка прошла успешно! Завтра проверю на работоспособность необходимых функций. Отпишусь о результатах. :slightly_smiling_face:

По крайней мере в ядре должны присутствовать