Сборка ядра v2: различия между версиями

Нет описания правки
Строка 46: Строка 46:
</syntaxhighlight>
</syntaxhighlight>


== Настройка ядра ==
== Сборка ==
Все промежуточные и конечные артефакты сборки - объектные файлы, dtb, модули ядра .ko, zImage и т.д. - будут находится в поддиректории '''.build-wbX''', где X зависит от модели контроллера.
В этой же директории находится конфигурация ядра (см. ниже).
 
Чаще всего для использования на контроллере удобней всего собрать deb-пакет с файлами ядра.


Для того, чтобы применить настройки ядра по умолчанию, выполните команду:
Если вам нужны только некоторые бинарные файлы (zImage, модули и dtbs), то после успешной сборки deb-пакета их можно будет найти в сборочной поддиректории  '''.build-wbX'''.


=== Сборка deb-пакета ===
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
$ make ARCH=arm wirenboard7_defconfig  # для Wiren Board 7.x
$ make mrproper
$ make ARCH=arm imx6_wirenboard_defconfig # для Wiren Board 6.x
$ KERNEL_FLAVOUR=wb6 VERSION_SUFFIX="~my~test~kernel" ./scripts/package/wb/do_build_deb.sh # Wiren Board 6
$ make ARCH=arm mxs_wirenboard_defconfig  # для Wiren Board 5 и более старых
</syntaxhighlight>
</syntaxhighlight>


Можно отредактировать конфигурацию ядра с помощью menuconfig:
Можно поменять значение 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, в нём уже содержится всё необходимое.
 
== Разные модели контроллеров ==
{| class="wikitable"
|-
! Модель контроллера
! KERNEL_FLAVOUR
! файл defconfig
! сборочная директория
! файлы dts и dtb
|-
| Wiren Board 6
| wb6
| imx6_wirenboard_defconfig
| .build-wb6
| imx6ul-wirenboard6*
|-
| Wiren Board 5 и ниже
| wb2
| mxs_wirenboard_defconfig
| .build-wb2
| imx28-wirenboard5*
|-
| Wiren Board 7
| wb7
| wirenboard7_defconfig
| .build-wb7
| sun8i-r40-wirenboard7*
|}
 
== Настройка ядра ==


При запуске скрипт сборки deb-пакета спрашивает, использовать ли конфигурацию по-умолчанию:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
$ make ARCH=arm menuconfig
$ KERNEL_FLAVOUR=wb7  scripts/package/wb/do_build_deb.sh
Building kernel packages for wb7 (Wiren Board 7)
Revision: -wb100
Architecture: armhf
Config: wirenboard7_defconfig
.config already present
Use wirenboard7_defconfig instead? (y/N)
</syntaxhighlight>
</syntaxhighlight>


Чтобы посмотреть, какие настройки изменились относительно исходной версии, выполните команды:
Конфигурация по-умолчанюи при этом берётся из файлов в '''arch/arm/configs/''', например '''imx6_wirenboard_defconfig'''.
 
Чтобы поменять конфигурацию, запустите '''make''' с необходимыми параметрами:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
$ make ARCH=arm savedefconfig
$ make KBUILD_OUTPUT=.build-wb6 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig # для Wiren Board 6
$ 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>
</syntaxhighlight>


Чтобы заменить исходную версию настроек своей (например, при подготовке патча или pull request), выполните:
вместо '''menuconfig''' можно использовать графический '''xconfig'''.


После сохранения, конфигурация заишется в сборочную директорию: '''.build-wbX/.config'''.
Теперь вы можете собрать ядро с новой конфигурацией, выполнив обычную команду
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
$ make ARCH=arm savedefconfig
$ KERNEL_FLAVOUR=wb7 scripts/package/wb/do_build_deb.sh
$ cp defconfig arch/arm/configs/imx6_wirenboard_defconfig  # Wiren Board 6 и новее
$ cp defconfig arch/arm/configs/mxs_wirenboard_defconfig  # Wiren Board 5 и более старые
</syntaxhighlight>
</syntaxhighlight>


== Сборка ==
и ответив N, чтобы использовать новую конфигурацию, вместо конфигурации по-умолчанию:


Чаще всего для использования на контроллере удобней всего собрать deb-пакет с файлами ядра.
<syntaxhighlight lang="bash">
Use wirenboard7_defconfig instead? (y/N)
</syntaxhighlight>


Можно просто собрать бинарные файлы (zImage, модули и dtbs) без создания и скопировать на контроллер вручную.


=== Сборка deb-пакета ===
Когда вы полностью довольны результатом, можно посмотреть изменения относительно исходной версии:
 
Перед сборкой пакета необходимо сохранить свою версию конфигурации в исходный файл:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
$ make ARCH=arm savedefconfig
# для Wiren Board 6
$ cp defconfig  arch/arm/configs/imx6_wirenboard_defconfig # Wiren Board 6 и новее
$ make KBUILD_OUTPUT=.build-wb6 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- savedefconfig # приводит конфигурацию к стандартному виду и записывает в .build-wb6/defconfig
$ cp defconfig arch/arm/configs/mxs_wirenboard_defconfig # Wiren Board 5 и более старые
$ diff -u arch/arm/configs/imx6_wirenboard_defconfig .build-wb6/defconfig  # посмотреть её отличия от исходной конфигурации
</syntaxhighlight>
</syntaxhighlight>


Затем запускаем скрипт сборки:
Чтобы заменить исходную версию настроек своей (например, при подготовке патча или pull request):


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
$ make mrproper
# для Wiren Board 6
$ KERNEL_FLAVOUR=wb6 VERSION_SUFFIX="~my~test~kernel" ./scripts/package/wb/do_build_deb.sh  # Wiren Board 6 и новее
$ make KBUILD_OUTPUT=.build-wb6 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- savedefconfig
$ KERNEL_FLAVOUR=wb2 VERSION_SUFFIX="~my~test~kernel" ./scripts/package/wb/do_build_deb.sh  # Wiren Board 5 и более старые
$ cp .build-wb6/defconfig  arch/arm/configs/imx6_wirenboard_defconfig
</syntaxhighlight>
</syntaxhighlight>


Можно поменять значение VERSION_SUFFIX на свой вкус согласно правилам оформления версий пакетов в Debian.
После этого скрипт '''do_build_deb.sh''' будет использовать обновлённую конфигуацию при ответе "y".
Это значение будет добавлено в конец номера версии пакета и поможет отличить собранное вручную ядро от
ядра из репозитория Wiren Board.


После сборки в корне появятся файлы пакетов (пример для Wiren Board 6):
=== Сборка вручную ===
Этот этап не требуется для стандартных задач.
Если вы хотите выполнить вручную какой-либо этап сборки, то можно запустить '''make''' вручную.


* linux-image-wb6_4.9.22-wb1~my~test~kernel_armhf.deb - образ ядра, модули и dtbs;
<syntaxhighlight lang="bash">
* linux-headers-wb6_4.9.22-wb1~my~test~kernel_armhf.deb
# для Wiren Board 6
* linux-libc-dev_4.9.22-wb1~my~test~kernel_armhf.deb
$ make KBUILD_OUTPUT=.build-wb6 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage dtbs modules -j4
</syntaxhighlight>


На контроллер достаточно скопировать файл пакета linux-image-wb6, в нём уже содержится всё необходимое.
(-j4 запускает сборку в 4 потока,
 
=== Сборка вручную ===
 
После применения конфигурации (см. предыдущий раздел), выполняем команду (-j4 запускает сборку в 4 потока,
можно это убрать или поменять значение на более подходящее вашему компьютеру, идеальное значение - количество ядер CPU):
можно это убрать или поменять значение на более подходящее вашему компьютеру, идеальное значение - количество ядер 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 на контроллере;
* .build-wb6/arch/arm/boot/zImage - образ ядра, который нужно скопировать в /boot/zImage на контроллере;
* arch/arm/boot/dtb/* - файлы device tree, используемые для настройки оборудования при запуске, копируются в директорию /boot/dtbs/.
* .build-wb6/arch/arm/boot/dtb/* - файлы device tree, используемые для настройки оборудования при запуске, копируются в директорию /boot/dtbs/.


Файлы модулей можно найти с помощью команды:
Файлы модулей можно найти с помощью команды: