Kernel/build unpackaged: различия между версиями
Vt (обсуждение | вклад) Нет описания правки |
Vt (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
{{Внимание|Статья в процессе написания.}} | {{Внимание|Статья в процессе написания.}} | ||
= Самостоятельная сборка ядра | = Самостоятельная сборка ядра обычными средствами сборки, без создания RPM пакетов, на примере std-def = | ||
Для сборки и инсталляции вам понадобится около 25 гигабайт дискового пространства. | |||
== Настраиваем сборочную среду == | == Настраиваем сборочную среду == | ||
Все собранные пакеты попадают в, доступные на сайте git.alt, git репозитории [https://git.altlinux.org/gears/ gears]. | Все собранные пакеты попадают в, доступные на сайте git.alt, git репозитории [https://git.altlinux.org/gears/ gears]. Каждый репозиторий называется по имени пакета, а бранчи дистрибутива (sisyphus, p10) находятся в соответствующих бранчах git репозитория. Таким образом, в Сизифе для ядра с флейвором std-def пакет называется <code>kernel-image-std-def</code> — путь к его gears репозиторию на git.alt будет <code>/gears/k/kernel-image-std-def.git</code>, а git бранч sisyphus. | ||
Под root ставим необходимые | Под '''root''' ставим необходимые пакеты для сборки ядра (в Сизифе): | ||
# apt-get update | # apt-get update | ||
Строка 12: | Строка 14: | ||
== Получаем исходный код == | == Получаем исходный код == | ||
Будем использовать схему именования позволяющую работать | Будем использовать схему именования позволяющую работать со множеством репозиториев бранчей и апстримов — git remote для gears репозиториев называется <code>gears/флейвор</code>, то есть для std-def это будет <code>gears/std-def</code>, (затем можно будет добавить <code>gears/un-def</code> или апстрим), а git бранч называется <code>флейвор/бранч_дистрибутива</code>, то есть в нашем случае это <code>std-def/sisyphus</code>. Такая схема позволит различить remote и бранчи для разных флейворов. | ||
Далее выходим из root и продолжаем под своим пользователем. | Далее выходим из root и продолжаем под своим пользователем. | ||
Строка 45: | Строка 47: | ||
Конечно можно взять готовый конфиг из <code>/boot/config-*</code> или <code>/proc/config.gz</code>, но вероятно, он не точно соответствует версии ядра, которую вы собираете — поэтому воспроизведем генерацию конфига как она происходит при сборке пакета. | Конечно можно взять готовый конфиг из <code>/boot/config-*</code> или <code>/proc/config.gz</code>, но вероятно, он не точно соответствует версии ядра, которую вы собираете — поэтому воспроизведем генерацию конфига как она происходит при сборке пакета. | ||
Конфиг собирается из частей находящихся в файлах <code>config*</code>, где к основному конфигу <code>config</code> добавляются конфиги соответствующих архитектуре (<code>config-архитектура</code>) и флейвору (например для std-def добавляется <code>config-std</code>, а для un-def не добавляется). | Конфиг собирается из частей находящихся в файлах <code>config*</code>, где к основному конфигу <code>config</code> добавляются конфиги соответствующих архитектуре (<code>config-архитектура</code>, в примере мы будем использовать переменную bash <code>$HOSTTYPE</code> для её определения) и флейвору (например для std-def добавляется <code>config-std</code>, а для un-def не добавляется). | ||
$ make mrproper | $ make mrproper | ||
$ scripts/kconfig/merge_config.sh -m config config-$ | $ scripts/kconfig/merge_config.sh -m config config-$HOSTTYPE config-std | ||
$ make olddefconfig | $ make olddefconfig | ||
{{Примечание| На этом этапе вы можете редактировать получившийся <code>.config</code> или добавить свой патч.}} | |||
== Компиляция ядра == | == Компиляция ядра == | ||
{{Примечание| Компиляцию лучше производить используя параллельную сборку с опцией <code>-jколичество_потоков</code>, рекомендуемое количество потоков равно количеству ядер в системе.}} | {{Примечание| Компиляцию лучше производить используя параллельную сборку с опцией <code>-jколичество_потоков</code>, рекомендуемое количество потоков равно количеству ядер в системе (вывод утилиты <code>nproc</code>).}} | ||
$ make -j`nproc` bzImage | $ make -j`nproc` bzImage | ||
$ make -j`nproc` modules | $ make -j`nproc` modules | ||
Дополнительный шаг для архитектуры ARM: | |||
$ make -j`nproc` dtbs | $ make -j`nproc` dtbs | ||
Строка 63: | Строка 67: | ||
== Инсталляция ядра в систему == | == Инсталляция ядра в систему == | ||
Снова под '''root''', зайдите в каталог с ядром: | |||
# make -j`nproc` modules_install | # make -j`nproc` modules_install | ||
# make install | # make install |
Версия от 06:37, 9 ноября 2022
Самостоятельная сборка ядра обычными средствами сборки, без создания RPM пакетов, на примере std-def
Для сборки и инсталляции вам понадобится около 25 гигабайт дискового пространства.
Настраиваем сборочную среду
Все собранные пакеты попадают в, доступные на сайте git.alt, git репозитории gears. Каждый репозиторий называется по имени пакета, а бранчи дистрибутива (sisyphus, p10) находятся в соответствующих бранчах git репозитория. Таким образом, в Сизифе для ядра с флейвором std-def пакет называется kernel-image-std-def
— путь к его gears репозиторию на git.alt будет /gears/k/kernel-image-std-def.git
, а git бранч sisyphus.
Под root ставим необходимые пакеты для сборки ядра (в Сизифе):
# apt-get update # apt-get install -y rpm-build git bc dwarves flex libelf-devel zlib-devel openssl openssl-devel
Получаем исходный код
Будем использовать схему именования позволяющую работать со множеством репозиториев бранчей и апстримов — git remote для gears репозиториев называется gears/флейвор
, то есть для std-def это будет gears/std-def
, (затем можно будет добавить gears/un-def
или апстрим), а git бранч называется флейвор/бранч_дистрибутива
, то есть в нашем случае это std-def/sisyphus
. Такая схема позволит различить remote и бранчи для разных флейворов.
Далее выходим из root и продолжаем под своим пользователем.
Клонирование репозитория
Клонируем репозиторий так, чтоб remote назывался gears/std-def (опция -o
) в каталог kernel-image
(в будущем другие флейворы тоже будут там) и открываем бранч std-def/sisyphus
из него:
$ git clone -n -o gears/std-def http://git.altlinux.org/gears/k/kernel-image-std-def.git kernel-image $ cd kernel-image
Открываем нужный бранч
В нужном бранче уже применены все ALT specific патчи, поэтому, достаточно его открыть. Называем его в соответствии с нашей схемой описанной выше.
Первоначальное (после клонирования) открытие бранча — создание локального бранча std-def/sisyphus
соответствующего gears/std-def/sisyphus
(то есть бранчу sisyphus
в remote gears/std-def
).
$ git checkout -B std-def/sisyphus gears/std-def/sisyphus
Последующее (после git fetch
) открытие бранча и его обновление:
$ git checkout std-def/sisyphus $ git pull --rebase
Далее можно убедиться, что ядро свежее посмотрев на даты в git log
.
Конфигурация ядра
Конечно можно взять готовый конфиг из /boot/config-*
или /proc/config.gz
, но вероятно, он не точно соответствует версии ядра, которую вы собираете — поэтому воспроизведем генерацию конфига как она происходит при сборке пакета.
Конфиг собирается из частей находящихся в файлах config*
, где к основному конфигу config
добавляются конфиги соответствующих архитектуре (config-архитектура
, в примере мы будем использовать переменную bash $HOSTTYPE
для её определения) и флейвору (например для std-def добавляется config-std
, а для un-def не добавляется).
$ make mrproper $ scripts/kconfig/merge_config.sh -m config config-$HOSTTYPE config-std $ make olddefconfig
Компиляция ядра
$ make -j`nproc` bzImage $ make -j`nproc` modules
Дополнительный шаг для архитектуры ARM:
$ make -j`nproc` dtbs
Инсталляция ядра в систему
Снова под root, зайдите в каталог с ядром:
# make -j`nproc` modules_install # make install