|
Метка: новое перенаправление |
(не показано 7 промежуточных версий 2 участников) |
Строка 1: |
Строка 1: |
| Сборка ядра Linux вручную может понадобиться, например, если нужно включить в ядро
| | #REDIRECT [[How_To_Build_Linux_Kernel]] |
| модули, отсутствующие в стандартной поставке Wiren Board. Если вы не знаете, для чего
| |
| вам это нужно, то, скорее всего, вам не нужно собирать ядро вручную.
| |
| | |
| Начиная с 8 апреля 2021 года, скрипты для сборки deb-пакетов ядра Linux для Wiren Board
| |
| добавлены в репозиторий с кодом ядра: http://github.com/wirenboard/linux.
| |
| | |
| Если вы собираете более старую версию ядра (то есть, без встроенных скриптов для сборки),
| |
| вам подойдёт [[Сборка ядра (build_kernel)|инструкция по сборке с build_kernel]].
| |
| | |
| | |
| == Подготовка сборочной машины ==
| |
| | |
| Сборка ядра должна производиться на настольном компьютере, ноутбуке или сервере под управлением Linux.
| |
| Собирать ядро на самом Wiren Board не стоит - у контроллера не хватит дискового пространства для получения
| |
| репозитория, а также вычислительной мощности. Даже на настольном компьютере сборка ядра может занять
| |
| десятки минут.
| |
| | |
| Сборочные скрипты писались с расчётом на дистрибутивы Debian и Ubuntu, инструкции в этой статье приводятся
| |
| также из расчёта использования этих дистрибутивов. Инструкция была проверена в Ubuntu 18.04.
| |
| | |
| Для сборки ядра понадобится установить пакеты с необходимым для сборки ПО:
| |
| | |
| <syntaxhighlight lang="bash">
| |
| $ sudo apt update && sudo apt install build-essential libncurses5-dev fakeroot lzop bc git
| |
| </syntaxhighlight>
| |
| | |
| Если вы собираете ядро для '''Wiren Board 6''' и новее, нужно установить компилятор для '''arm-linux-gnueabihf''':
| |
| | |
| <syntaxhighlight lang="bash">
| |
| $ sudo apt install gcc-arm-linux-gnueabihf
| |
| </syntaxhighlight>
| |
| | |
| Для '''Wiren Board 5''' и более старых понадобится другой компилятор:
| |
| | |
| <syntaxhighlight lang="bash">
| |
| $ sudo apt install gcc-arm-linux-gnueabi
| |
| </syntaxhighlight>
| |
| | |
| == Получение исходного кода ==
| |
| | |
| Исходный код ядра Linux с правками от команды Wiren Board хранится в репозитории на Github. Чтобы получить его на
| |
| свой компьютер, выполните команды:
| |
| | |
| <syntaxhighlight lang="bash">
| |
| $ git clone https://github.com/wirenboard/linux
| |
| $ cd linux
| |
| $ git submodule update --init --recursive
| |
| </syntaxhighlight>
| |
| | |
| == Настройка ядра ==
| |
| | |
| Для того, чтобы применить настройки ядра по умолчанию, выполните команду:
| |
| | |
| <syntaxhighlight lang="bash">
| |
| $ make ARCH=arm imx6_wirenboard_defconfig # для Wiren Board 6 и новее
| |
| $ make ARCH=arm mxs_wirenboard_defconfig # для Wiren Board 5 и более старых
| |
| </syntaxhighlight>
| |
| | |
| Можно отредактировать конфигурацию ядра с помощью menuconfig:
| |
| | |
| <syntaxhighlight lang="bash">
| |
| $ make ARCH=arm menuconfig
| |
| </syntaxhighlight>
| |
| | |
| Чтобы посмотреть, какие настройки изменились относительно исходной версии, выполните команды:
| |
| | |
| <syntaxhighlight lang="bash">
| |
| $ make ARCH=arm savedefconfig
| |
| $ diff -u arch/arm/configs/imx6_wirenboard_defconfig defconfig # Wiren Board 6 и новее
| |
| $ diff -u arch/arm/configs/mxs_wirenboard_defconfig defconfig # Wiren Board 5 и более старые
| |
| </syntaxhighlight>
| |
| | |
| Чтобы заменить исходную версию настроек своей (например, при подготовке патча или pull request), выполните:
| |
| | |
| <syntaxhighlight lang="bash">
| |
| $ make ARCH=arm savedefconfig
| |
| $ cp defconfig arch/arm/configs/imx6_wirenboard_defconfig # Wiren Board 6 и новее
| |
| $ cp defconfig arch/arm/configs/mxs_wirenboard_defconfig # Wiren Board 5 и более старые
| |
| </syntaxhighlight>
| |
| | |
| == Сборка ==
| |
| | |
| Чаще всего для использования на контроллере удобней всего собрать deb-пакет с файлами ядра.
| |
| | |
| Можно просто собрать бинарные файлы (zImage, модули и dtbs) без создания и скопировать на контроллер вручную.
| |
| | |
| === Сборка deb-пакета ===
| |
| | |
| Перед сборкой пакета необходимо сохранить свою версию конфигурации в исходный файл:
| |
| | |
| <syntaxhighlight lang="bash">
| |
| $ make ARCH=arm savedefconfig
| |
| $ cp defconfig arch/arm/configs/imx6_wirenboard_defconfig # Wiren Board 6 и новее
| |
| $ cp defconfig arch/arm/configs/mxs_wirenboard_defconfig # Wiren Board 5 и более старые
| |
| </syntaxhighlight>
| |
| | |
| Затем запускаем скрипт сборки:
| |
| | |
| <syntaxhighlight lang="bash">
| |
| $ make mrproper
| |
| $ KERNEL_FLAVOUR=wb6 VERSION_SUFFIX="~my~test~kernel" ./scripts/package/wb/do_build_deb.sh # Wiren Board 6 и новее
| |
| $ KERNEL_FLAVOUR=wb2 VERSION_SUFFIX="~my~test~kernel" ./scripts/package/wb/do_build_deb.sh # Wiren Board 5 и более старые
| |
| </syntaxhighlight>
| |
| | |
| Можно поменять значение VERSION_SUFFIX на свой вкус согласно правилам оформления версий пакетов в Debian.
| |
| Это значение будет добавлено в конец номера версии пакета и поможет отличить собранное вручную ядро от
| |
| ядра из репозитория Wiren Board.
| |
| | |
| После сборки в корне появятся файлы пакетов (пример для Wiren Board 6):
| |
| | |
| * linux-image-wb6_4.9.22-wb1~my~test~kernel_armhf.deb - образ ядра, модули и dtbs;
| |
| * linux-headers-wb6_4.9.22-wb1~my~test~kernel_armhf.deb
| |
| * linux-libc-dev_4.9.22-wb1~my~test~kernel_armhf.deb
| |
| | |
| На контроллер достаточно скопировать файл пакета linux-image-wb6, в нём уже содержится всё необходимое.
| |
| | |
| === Сборка вручную ===
| |
| | |
| После применения конфигурации (см. предыдущий раздел), выполняем команду (-j4 запускает сборку в 4 потока,
| |
| можно это убрать или поменять значение на более подходящее вашему компьютеру, идеальное значение - количество ядер CPU):
| |
| | |
| <syntaxhighlight lang="bash">
| |
| $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j4 # Wiren Board 6 и новее
| |
| $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- zImage modules dtbs -j4 # Wiren Board 5 и более старые
| |
| </syntaxhighlight>
| |
| | |
| В результате появятся нужные нам файлы:
| |
| | |
| * arch/arm/boot/zImage - образ ядра, который нужно скопировать в /boot/zImage на контроллере;
| |
| * arch/arm/boot/dtb/* - файлы device tree, используемые для настройки оборудования при запуске, копируются в директорию /boot/dtbs/.
| |
| | |
| Файлы модулей можно найти с помощью команды:
| |
| | |
| <syntaxhighlight lang="bash">
| |
| $ find . -name '*.ko'
| |
| </syntaxhighlight>
| |
| | |
| Далее файлы модулей копируются на контроллер в директорию /lib/modules/<версия ядра>/kernel/ с сохранением исходного пути, как было
| |
| при сборке.
| |