Kernel/build unpackaged: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
Строка 1: Строка 1:
{{Внимание|Статья в процессе написания.}}
{{Внимание|Статья в процессе написания.}}


= Самостоятельная сборка ядра std-def обычными средствами сборки, без создания пакета =
= Самостоятельная сборка ядра обычными средствами сборки, без создания RPM пакетов, на примере std-def =
 
Для сборки и инсталляции вам понадобится около 25 гигабайт дискового пространства.


== Настраиваем сборочную среду ==
== Настраиваем сборочную среду ==
Все собранные пакеты попадают в, доступные на сайте 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>, а бранч sisyphus.
Все собранные пакеты попадают в, доступные на сайте 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 и бранчи для разных флейворов.
Будем использовать схему именования позволяющую работать со множеством репозиториев бранчей и апстримов — 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-$HOSTARCH config-std
   $ 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 понадобиться дополнительный шаг:
Дополнительный шаг для архитектуры ARM:


   $ make -j`nproc` dtbs
   $ make -j`nproc` dtbs
Строка 63: Строка 67:
== Инсталляция ядра в систему ==
== Инсталляция ядра в систему ==


Под root:
Снова под '''root''', зайдите в каталог с ядром:


   # make -j`nproc` modules_install
   # make -j`nproc` modules_install
   # make install
   # make install

Версия от 03: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
Примечание: Если у вас уже есть репозиторий с ядром можно добавить к нему наши remote:
 $ cd linux
 $ git remote add -f gears/std-def http://git.altlinux.org/gears/k/kernel-image-std-def.git
Примечание: Через какое-то время понадобится обновить исходный код ядра, можно не повторять предыдущие шаги, а сделать git fetch нужному remote и обязательно открыть/обновить нужный бранч (см. ниже).
 $ git fetch gears/std-def

Открываем нужный бранч

В нужном бранче уже применены все 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


Примечание: На этом этапе вы можете редактировать получившийся .config или добавить свой патч.

Компиляция ядра

Примечание: Компиляцию лучше производить используя параллельную сборку с опцией -jколичество_потоков, рекомендуемое количество потоков равно количеству ядер в системе (вывод утилиты nproc).
 $ make -j`nproc` bzImage
 $ make -j`nproc` modules

Дополнительный шаг для архитектуры ARM:

 $ make -j`nproc` dtbs

Инсталляция ядра в систему

Снова под root, зайдите в каталог с ядром:

 # make -j`nproc` modules_install
 # make install