Skip to content

Commit 1af2b47

Browse files
committed
Return rewritten mini-kernel section
Signed-off-by: Vasiliy Stelmachenok <[email protected]>
1 parent 1da21df commit 1af2b47

File tree

2 files changed

+144
-1
lines changed

2 files changed

+144
-1
lines changed

docs/source/index.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
software.rst
2727
drivers.rst
2828
laptops.rst
29-
boot.rst
3029

3130
.. toctree::
3231
:caption: Общее ускорение системы
@@ -44,6 +43,7 @@
4443

4544
kernel-parameters.rst
4645
file-systems.rst
46+
mini-kernel.rst
4747

4848
.. toctree::
4949
:caption: Игры

docs/source/mini-kernel.rst

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
.. ARU (c) 2025, Pavel Priluckiy, Vasiliy Stelmachenok and contributors
2+
3+
ARU is licensed under a
4+
Creative Commons Attribution-ShareAlike 4.0 International License.
5+
6+
You should have received a copy of the license along with this
7+
work. If not, see <https://creativecommons.org/licenses/by-sa/4.0/>.
8+
9+
.. _mini-kernel:
10+
11+
*******************
12+
Сборка мини-ядра
13+
*******************
14+
15+
.. index:: kernel, modprobed-db
16+
.. _about:
17+
18+
======================
19+
Что такое "мини-ядро"?
20+
======================
21+
22+
Ядро Linux на внешнем носителе представлено из двух частей: "остов"
23+
ядра или его базовый образ называемый ``vmlinuz`` и множество модулей,
24+
располагающихся в ``/usr/lib/modules`` и загружаемых по требованию.
25+
Как правило модули ядра представляют собой различные драйверы,
26+
файловые системы и вспомогательные объекты, все они по соглашению
27+
носят суффикс ``.ko`` (kernel object). Стоит отметить, что некоторые
28+
модули могут являться обязательными к загрузке и быть "встроенными"
29+
как часть базового образа. В этом случае такие модули нельзя выгрузить
30+
во время работы системы.
31+
32+
Мини-ядро - это условное понятие, которое обозначает ядро собранное с
33+
минимальным количеством модулей, оставляя лишь реально необходимые для
34+
работы системы на конкретной машине. Смысл в использовании такого ядра
35+
состоит преимущественно в ускорении процесса самой сборки и экономии
36+
пространства на диске. Также уменьшение количества модулей
37+
потенциально может улучшить безопасность системы, уменьшив поверхность
38+
для атаки.
39+
40+
.. index:: modprobed-db, modules, kernel
41+
.. _modules_list:
42+
43+
=======================================
44+
Как понять какие модули нужны системе?
45+
=======================================
46+
47+
Так как мини-ядро можно получить только путём пересборки ядра с
48+
соответствующей для системы конфигурацией, то крайне важно заранее
49+
понять какие модули нужны для её работы. В классическом варианте
50+
система сборки ядра Kbuild имеет "пресет", называемый ``localmodcfg``,
51+
который просто берёт список загруженных на данный момент модулей
52+
сборочной машины и использует его при конфигурации ядра. Такой способ
53+
не является достаточно надёжным для использования в большинстве
54+
случаев, так как некоторые модули могут быть просто не загружены на
55+
момент сборки, но все ещё быть необходимыми для правильной работы
56+
системы, например модули, являющиеся частью образа начального
57+
окружения initramfs, используемые только при загрузке системы и
58+
выгружаемые после её завершения.
59+
60+
.. _modprobed-db:
61+
62+
-------------
63+
modprobed-db
64+
-------------
65+
66+
По этой причине был создан специальный индексатор модулей -
67+
`modprobed-db <https://github.com/graysky2/modprobed-db>`_, который
68+
делает снимок списка используемых модулей с некоторым интервалом (по
69+
умолчанию раз в час) и аккумулирует их в отдельном файле по пути
70+
``~/.config/modprobed.db``, который затем указывается при сборке
71+
мини-ядра.
72+
73+
Его можно установить вручную или из AUR. Если ваш дистрибутив Arch
74+
Linux или основанный на нём, то рекомендуется использовать второй
75+
способ::
76+
77+
git clone https://aur.archlinux.org/modprobed-db.git
78+
cd modprobed-db
79+
makepkg -sricCf
80+
81+
После установки необходимо включить службу-таймер, которая и будет
82+
собирать информацию об используемых модулях в фоновом режиме::
83+
84+
systemctl --user enable --now modprobed-db.service modprobed-db.timer
85+
86+
Далее следует активно пользоваться всеми возможностями вашей системы,
87+
использовать USB-порты для подключения различной периферии,
88+
CD-носители (если имеются) и т. д. Чтобы все редко используемые
89+
драйверы устройств были проиндексированы в списке модулей и вам не
90+
пришлось повторно пересобирать ядро для их добавления.
91+
92+
.. _linux-tkg-list:
93+
94+
---------------
95+
Готовые списки
96+
---------------
97+
98+
Проект `linux-tkg <https://github.com/Frogging-Family/linux-tkg/>`_
99+
ведет готовый список модулей, который позволяет получить наиболее
100+
часто используемые в "среднем по больнице" модули для простых ПК:
101+
https://github.com/Frogging-Family/linux-tkg/blob/master/linux-tkg-config/6.17/minimal-modprobed.db
102+
103+
Вы можете использовать его в случае, если составить собственный список
104+
не получилось или это привело к проблемам с системой, хотя это даст не
105+
такое большое ускорение процесса компиляции, чем со списком
106+
составленным под конкретную систему.
107+
108+
.. index:: kernel, compilation, modprobed-db
109+
.. _buidling:
110+
111+
=======
112+
Сборка
113+
=======
114+
115+
После того как список модулей был составлен, можно переходить
116+
непосредственно к сборке ядра с его использованием. При классической
117+
"ручной" сборке ядра он указывается как значение переменной
118+
``LSMOD``::
119+
120+
make LSMOD=$HOME/.config/modprobed.db localmodconfig
121+
122+
Однако такой способ не следует использовать, если у вас есть
123+
возможность собрать правильно оформленный пакет для ядра. В Arch Linux
124+
большинство версий ядер, устанавливаемых из AUR имеют соответствующую
125+
переменную в своих PKGBUILD скриптах, которая позволяет использовать
126+
базу модулей от ``modprobed-db``. Как правило она называется
127+
``_localmodcfg``, значение для которой указывается либо внутри самого
128+
PKGBUILD файла, либо как одноименная переменная окружения.
129+
130+
Рассмотрим сборку мини-версии на примере ядра `linux-cachyos
131+
<https://github.com/Frogging-Family/linux-tkg/>`_::
132+
133+
git clone https://github.com/CachyOS/linux-cachyos
134+
cd linux-cachyos/linux-cachyos
135+
_makenconfig=yes _localmodcfg=yes makepkg -sricCf
136+
137+
Как можно видеть, здесь ``_localmodcfg`` передаётся как простая
138+
переменная окружения, так что редактировать сборочный скрипт PKGBUILD
139+
нет необходимости. ``_makenconfig`` используется для включения ручной
140+
настройки конфига в случае, если вы хотите выключить или включить
141+
сборку тех или иных модулей самостоятельно через интерактивное меню.
142+
143+
.. vim:set textwidth=70:

0 commit comments

Comments
 (0)