Ускоряем загрузку Linux. Компиляция ядра

Привет! Страдая от безделия и низкой скорости загрузки ОС Linux в виде дистрибутива ArchLinux, задумался о том, как это исправить.. нет, не безделие.


Ускорение загрузки системы, естественно, начинается с уменьшения колличества демонов и программ, запускающихся с системой, но «Арч» не страдает излишним колличеством таковых, поэтому идем другим путем…

На вики дистрибутива есть описание сборки ядра разными способами, но они не рассказывают о том, как собрать лугковесное ядро. Именно о том, как его облегчить, как избавиться от initramfs, который сильно тормозит загрузку, как убрать модули в ядро и, наконец, собрать ядро непосредственно под целевой процессор, что, несомненно, ускорит его работу, я и расскажу.

Требуется умение работать в терминале без графической оболочки!

Все, что Вы делаете, Вы делаете на свой страх и риск. Автор статьи не несет ответственности за выполненные Вами действия!

Подготовка

Как получить новейшие исходники, объяснять не буду, это описано в статье на вики Арча. Начнем сразу с конфигурации. Вот, что нам понядобится:

make localyesconfig — магия воплоти, берет все конфигурации и модуди, которые использует запущенное ядро в системе и сконфигурирует их компилирование в ядро оставляя пару модулей;

make nconfig — новый консольный кофигуратор, нужен для правки некоторых моментов.

Начнем

  1. Получили исходники
  2. Теперь важно, по возможности, подключить все устройства, которые когда либо собираетесь использовать с вашим ПК, это подключит все нужные в будущем модули.
  3. Запускаем make localyesconfig, конфигуратор спросит о нескольких новых конфигурациях, добавленных в новой версии, ответьте на свое усмотрение или по у молчанию.
  4. make nconfig и читаем далее.

Конфигурация

  1. Выбираем разрядность будущего ядра в 3 пункте меню.
  2. Пункт Processor type and features -> Processor family -> ищем семейство вашего процессора, если не находим, оставляем как было.
  3. В пункте Supported processor vendors можно убрать из ядра поддержку процессоров других производителей. Убирать начинайте с последнего пункта.
  4. Далее CPU microcode loading support, если ваш процессор не поддерживается пакетом ucode, можно отключить. Как узнать, написано в интернете.
  5. Если у Вас не EFI сиситема, можно убрать EFI runtime service support
  6. Далее возвращаемся в самое начало и идем в Device Drivers.
  7. В Generic Driver Options -> Firmware loader имеется возможность вшить в ядро необходимые драйверам файлы (микрокод). Вернемся к этому пункту позже.
  8. В пункте Input device support можно отключить поддержку ненужных устройств ввода. Я отключал планшет и сенсорный экран.
  9. Возвращаемся и, если вы подключали USB HID устройства, тыкаем HID support -> Special HID drivers и переключаем все, что активировано, на модуль.
  10. Вернемся в Device Drivers, идем в USB support,  после *** USB Device Class drivers *** вчитываемся и переключаем все на модуль.
  11. Далее можно выпилить поддержку Chrome железа в пункте меню Device Driver Platform support for Chrome hardware.
  12. Возвращаемся в начало, настраиваем File systems. Тут можно выбрать, помимо основных, уже отмеченных файловых систем, дополнительные типа FAT, NTFS (DOS/FAT/NT Filesystems). Внимательно читайте конфиги, можно сразу включит возможность записи в NTFS.

Фух, на этом пока что все.

Компиляция

Далее это нужно собрать. Команда make без аргументов бросится собирать исходный код в один комок бинарного кода, но, по умолчанию, используя 1 потом, что достаточно медленно. Что бы указать ей колличество потоков, можно использовать аргумент j вот так:

make — j(кол-во ядер + 1)

например для 2-х ядерно процессора пишем так: make — j3

Установка

После компиляции нужно ядро установить. Как это сделать, подробно описано на вики. Я же приведу пример комманд, которые использую сам:

cp arch/x86/boot/bzImage /boot/vmlinuz-linux-mainline — копируем ядро
make modules_install — установка модулей
grub-mkconfig -o /boot/grub/grub.cfg — обновляем конфиги Grub, чтобы он нашел новое ядро.

Перед конфигурацией Grub советую отключить все аргументы ядра.

Также отключите запуск любой графики на старте в systemd

Первый запуск

При первом запуске стоит следить за выводом ядра на экране. Если будут критические ошибки, их следует посмотреть в логах ядра.

Если у Вас, как у меня, стоит драйвер ATI и графика не запускается, может не хватать микрокода, о котором я говорил в п.7. Какой файл нужен драйверу, выводится в логах ядра. Микрокод ATI хранится по пути /lib/firmware/radeon. Для примера вот мои настройки:

После конфигурации нужно повторить установку ядра. Достаточно удалить старое с /boot и скопировать туда новое.

Заключение

Знаю, многие могут сказать, что это бред и прирост к скорости загрузки и работы системы в целом настолько мал, что не стоит таких усилий. Но я этим занимался не только из-за какой либо выгоды. Мне было интересно и, надеюсь, Вам также будет интересна эта тема.

В группе я запущу опрос о том, помогла ли компиляция ядра именно Вам.

Огромное спасибо, что прочитали данную статью, надеюсь, Вам понравилось. До новых встреч! 👋🏼

Автор статьи: Александр Сорока

3 комментария к “Ускоряем загрузку Linux. Компиляция ядра”

  1. Здравствуйте. Решил немного помучить себя и собрать мелкий дистрибутив. Толком, все что мне нужно это Bash, GCC, да и блокнот, что еще нужно для счастья? С настройкой и компиляцией ядра не возникло проблем, но уже с креплением Bash, GRUB и GCC, у меня скажем так начали возникать вопросы. Собственно, как прикрепить это все к ядру? Как это должно выглядеть? К примеру GRUB, как же прописать в него свой дистрибутив? Да и в общем, как его туда запихнуть? Bash к примеру я скомпилировал, закинул в tools, соседнюю папку, папки с ядром, это чтоли все что нужно? Или что-то еще нужно сделать, чтобы ядро определило Bash, как стандартную оболочку sh? Ну и собственно GCC, с ним так же, как с Bash?

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *