- Kernel (Русский)
- Contents
- Официальные ядра
- Компиляция
- Ядра kernel.org
- Неофициальные ядра
- Отладка регрессий
- Kernel (Русский)/Traditional compilation (Русский)
- Contents
- Подготовка
- Установка пакетов
- Создание каталога сборки
- Загрузка исходников
- Распаковка исходников
- Настройка
- Конфигурация ядра
- A. Стандартная конфигурация Arch
- B. Сгенерированная конфигурация
- Продвинутая конфигурация
- Компиляция
- Установка
- Установка модулей
- Копирование ядра в каталог /boot
- Создание начального RAM-диска
- Автоматизированный метод
- Ручной метод
- Копирование System.map
- Настройка загрузчика
Kernel (Русский)
Ядро Linux — ядро операционной системы, соответствующее стандартам POSIX, составляющее основу операционных систем семейства Linux.
Дистрибутив Arch Linux основан на ядре Linux. Помимо основной стабильной (stable) версии в Arch Linux можно использовать некоторые альтернативные ядра. В статье описываются доступные в официальных репозиториях версии ядер, возможные патчи, а также способы, которыми пользователи могут скомпилировать собственное ядро.
Пакет ядра устанавливается в файловую систему в каталоге /boot/ . Для загрузки нужного ядра при запуске системы необходимо соответствующим образом настроить загрузчик.
Contents
Официальные ядра
Помощь при работе с официальными ядрами можно найти на форуме и в баг-трекере.
- Stable — «ванильное» ядро Linux с модулями и некоторыми патчами.
https://www.kernel.org/ || linux
- Hardened — ориентированное на безопасность ядро Linux с набором патчей, защищающих от эксплойтов ядра и пространства пользователя. Содержит больше защитных особенностей, чем linux .
https://github.com/anthraxx/linux-hardened || linux-hardened
- Longterm — ядро и модули с долгосрочной поддержкой (Long Term Support, LTS).
https://www.kernel.org/ || linux-lts
- Zen Kernel — результат коллективных усилий исследователей с целью создать лучшее из возможных ядер Linux для систем общего назначения. Подробности проекта можно найти на сайте liquorix.net (там же можно скачать двоичные файлы Zen-ядра для Debian).
https://github.com/zen-kernel/zen-kernel || linux-zen
Компиляция
Скомпилировать собственное ядро можно двумя способами:
/Arch Build System Преимущества — наличие готового PKGBUILD для пакета linux и удобство системы управления пакетами. /Традиционная компиляция Ручная загрузка архива файлов с исходными кодами ядра и их компиляция.
Файлы конфигурации пакетов с ядрами Arch можно найти в исходниках (например, файл [1] из linux ). Если включена опция ядра CONFIG_IKCONFIG_PROC , то файл /proc/config.gz содержит настройки ядра, которое работает на вашей машине в данный момент.
Некоторые из перечисленных пакетов могут быть также доступны в двоичном виде в неофициальных репозиториях.
Ядра kernel.org
- Git — ядро Linux, собранное из файлов с исходным кодом из git-репозитория Линуса Торвальдса.
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git || linux-gitAUR
- Mainline — ядра, в которых появляются все нововведения. Выходят каждые 2-3 месяца.
https://www.kernel.org/ || linux-mainlineAUR
- Next — самые новейшие ядра, с улучшениями, которые будут добавлены в следующий mainline-выпуск.
https://www.kernel.org/doc/man-pages/linux-next.html || linux-next-gitAUR
- Longterm 4.4 — LTS-ядро версии 4.4.
https://www.kernel.org/ || linux-lts44AUR
- Longterm 4.9 — LTS-ядро версии 4.9.
https://www.kernel.org/ || linux-lts49AUR
- Longterm 4.14 — LTS-ядро версии 4.14.
https://www.kernel.org/ || linux-lts414AUR
- Longterm 4.19 — LTS-ядро версии 4.19.
https://www.kernel.org/ || linux-lts419AUR
- Longterm 5.4 — LTS-ядро версии 5.4.
https://www.kernel.org/ || linux-lts54AUR
Неофициальные ядра
- Aufs — совместимое с aufs ядро Linux. Полезно при работе с Docker.
http://aufs.sourceforge.net/ || linux-aufsAUR
- Ck — патч от Con Kolivas, повышение быстродействия для настольных систем с любым типом нагрузки.
http://ck.kolivas.org/ || linux-ckAUR
- Clear — патчи проекта Clear Linux от Intel. Содержит улучшения производительности и безопасности.
https://github.com/clearlinux-pkgs/linux || linux-clearAUR
- GalliumOS — ядро Linux с патчами GalliumOS для Хромбуков.
https://github.com/GalliumOS/linux || linux-galliumosAUR
- Libre — без проприетарных или обфусцированных драйверов устройств.
https://www.fsfla.org/ikiwiki/selibre/linux-libre/ || linux-libreAUR
- Liquorix — ядро, собранное из исходного кода Zen с настройками для Debian. Разработан для настольных, мультимедийных и игровых систем, часто используется в качестве замены основному ядру Debian. Создатель патча Liquorix, Damentz, также является разработчиком набора патчей Zen.
https://liquorix.net || linux-lqxAUR
- MultiPath TCP — ядро с поддержкой Multipath TCP.
https://multipath-tcp.org/ || linux-mptcpAUR
- pf-kernel — набор неплохих улучшений, не вошедших в mainline. Сопровождается разработчиком ядра. Предоставляет порты улучшений для новых версий ядра, если они не были выпущены официально. Наиболее важные нововведения — UKSM и планировщик процессорного времени PDS.
https://gitlab.com/post-factum/pf-kernel/wikis/README || Пакеты:
- Репозиторий разработчика pf-kernel, post-factum.
- Репозиторий с пакетами linux-pfAUR и linux-pf-preset-defaultAUR от создателя форка pf-kernel, Thaodan.
- linux-pf-gitAUR от yurikoles
- Realtime kernel — поддерживается небольшой группой разработчиков, возглавляемой Ingo Molnar. Патч позволяет применять kernel preemption практически ко всему ядру за исключением небольших участков кода («raw_spinlock critical regions»). Этого удалось добиться за счёт замены большинства спинлоков ядра на мьютексы с поддержкой наследования приоритета, а также перемещением всех прерываний (в том числе и программных) в потоки ядра.
https://wiki.linuxfoundation.org/realtime/start || linux-rtAUR , linux-rt-ltsAUR
- Tkg — ядро с набором патчей для планировщиков PDS и Project C / BMQ. Стандартный планировщик CFS также доступен. Изменения нацелены на улучшение баланса интерактивность/производительность в играх. Автор и сопроводитель — Etienne Juvigny (Tk-Glitch).
https://github.com/Frogging-Family/linux-tkg || not packaged? search in AUR
- VFIO — патч ядра от Alex Williamson с поддержкой PCI Passthrough для KVM на некоторых машинах.
https://lwn.net/Articles/499240/ || linux-vfioAUR , linux-vfio-ltsAUR
- XanMod — улучшение производительности ядер рабочих станций, игровых компьютеров, медиацентров и других систем. Включает планировщик MuQSS, планировщик ввода-вывода BFQ, алгоритм дедупликации памяти в реальном времени UKSM, алгоритм управления перегрузками TCP BBR, расширенный набор команд для архитектуры x86_64 и другие изменения.
https://xanmod.org/ || linux-xanmodAUR
Отладка регрессий
Прежде всего проверьте ядро linux-mainline AUR на предмет того, не была ли проблема уже решена. В прикреплённом комментарии указан репозиторий с уже собранными ядрами, так что собирать ядро вручную не придётся.
Если проблема проявляется не слишком часто, то имеет смысл попробовать LTS-ядро ( linux-lts ). Старые версии LTS-ядер можно найти в архиве Arch Linux.
Если избавиться от проблемы не удалось, попробуйте локализовать баг в linux-git AUR , после чего сообщите о нём в баг-трекер ядра. Важно проверять ванильное непропатченное ядро, чтобы убедиться, что причиной ошибки является не патч. Если проблемы вызывает патч, то сообщите об этом его автору.
Источник
Kernel (Русский)/Traditional compilation (Русский)
В статье представлена краткая инструкция по сборке собственного ядра из исходников kernel.org. Данный метод является традиционным и общим для всех дистрибутивов. В зависимости от вашего опыта, компиляция из исходников может показаться несколько более сложной в сравнении с использованием системы сборки. Инструменты Arch Build System разрабатывались как раз с целью сделать многократно повторяющиеся задачи по компиляции более удобными и безопасными.
Contents
Подготовка
Для подготовки ядра не требуется ни root-аккаунт, ни root-привилегии (например, через sudo).
Установка пакетов
Установите группу пакетов base-devel с набором необходимых инструментов вроде make и gcc . Также рекомендуется установить пакеты, указанные в стандартном PKGBUILD ядра Arch Linux: xmlto , kmod , inetutils , bc , libelf , git , cpio , perl , tar , xz .
Создание каталога сборки
Рекомендуется создать отдельный каталог для сборки вашего ядра. В этом примере будет использоваться каталог kernelbuild в домашнем каталоге:
Загрузка исходников
Выберите версию ядра и загрузите файлы с исходным кодом с сайта https://www.kernel.org. Они будут иметь вид сжатого tar-архива (суффикс tar.xz ).
Загрузить можно просто через браузер (правый клик по ссылке с tar.xz и выбрать Save Link As. ) или любой другой программой, с графическим интерфейсом или интерфейсом командной строки, работающей через HTTP, TFTP, Rsync или Git.
Например, так выглядит загрузка ядра версии 4.8.6 в каталог
Также стоит проверить корректность загрузки. Скачайте файл подписи, с его помощью добудьте отпечаток (fingerprint) ключа, а с помощью отпечатка получите сам ключ:
Обратите внимание, что подпись создаётся для tar-архива (суффикс .tar ), а не для сжатого файла .tar.xz , который был загружен. Необходимо выполнить декомпрессию, но без извлечения архива. Для этого потребуется xz :
К последующим шагам нельзя переходить, если вы не получили вывод в виде «Good signature».
Если wget запускался не из каталога сборки, переместите в него скачанный архив:
Распаковка исходников
Распакуйте архив ядра в каталоге сборки:
Для завершения приготовлений убедитесь, что дерево файлов ядра абсолютно чистое; не стоит полагаться на то, что что оно будет таковым после распаковки. Перейдите в новый каталог с исходниками и выполните команду make mrproper :
Настройка
Это наиболее важный шаг в процессе «подгонки» ядра под точные характеристики вашего компьютера. Настройки ядра, включая используемые модули, задаются в файле .config .
Если правильно выбрать параметры в файле .config , то производительность вашего ядра и компьютера значительно вырастет.
Конфигурация ядра
Существует два способа создать конфигурацию:
- A. Использовать стандартные настройки Arch для официального ядра (рекомендуется).
- B. Сгенерировать файл с настройками ядра, работающего в данный момент (например, если вы желаете подкорректировать текущие настройки).
A. Стандартная конфигурация Arch
Этот метод предполагает создание нового файла .config на основе настроек стандартного ядра Arch. Если на вашей машине работает стандартное ядро, выполните следующую команду в каталоге с исходниками нового ядра:
В противном случае стандартную конфигурацию можно взять в официальном пакете ядра Arch Linux.
B. Сгенерированная конфигурация
С ядра 2.6.32 команда localmodconfig создаёт файл .config для нового ядра, отключив все опции, которые не заданы в работающем здесь и сейчас ядре. Другими словами, включены будут только опции, включённые в данный момент.
Хотя данный минималистичный подход позволяет создать высокоэффективную конфигурацию, подогнанную конкретно под вашу систему, есть ряд недостатков, таких как потенциальная неспособность ядра поддерживать более новое аппаратное обеспечение, периферийные устройства и другие особенности.
Продвинутая конфигурация
Существует ряд инструментов для тонкой настройки конфигурации ядра, которые можно использовать вместо многочасовой ручной настройки каждой возможной при компиляции опции.
- make menuconfig : утилита командной строки с интерфейсом ncurses; была заменена nconfig .
- make nconfig : новый инструмент командной строки с ncurses-интерфейсом.
- make xconfig : более дружелюбный к пользвателю графический интерфейс, которому требуется пакет packagekit-qt5 в качестве зависимости. Это рекомендуемый метод — особенно для неопытных пользователей — поскольку в нём упрощена навигация, а также выводится справочная информация о каждой опции.
- make gconfig : графический настройщик, похожий на xconfig, но использующий gtk.
Выбранную программу необходимо запустить внутри каталога с исходниками ядра. Все они создают новый .config либо перезаписывают существующий. Все опциональные настройки будут автоматически включены, но новые опции (т.е. отсутствовавшие в .config старого ядра) могут не включиться.
После внесения всех необходимых изменений сохраните файл .config . Имеет смысл также сделать резервную копию этого файла вне каталога с исходниками. Возможно, придётся повторить процесс несколько раз, прежде чем результат вас устроит.
Если испытываете сомнения, изменяйте по несколько опций между компиляциями. Если вы не можете загрузиться с новым ядром, изучите список необходимых пунктов конфигурации здесь.
Команда $ lspci -k # в liveCD-окружении выведет список используемых модулей ядра. Важно также не забыть обеспечить поддержку cgroups. Это необходимо для systemd.
Компиляция
Время компиляции может варьироваться от небольшого (
15 минут) до значительного (более часа) в зависимости от настроек ядра и мощности процессора. После задания всех необходимых настроек нового ядра в файле .config , выполните в каталоге с исходниками следующую команду:
Установка
Установка модулей
После того, как ядро скомпилировано, то же самое необходимо сделать с модулями. Сначала соберите модули:
Затем установите их:
Эта команда скопирует откомпилированные модули в каталог /lib/modules/ — . Например, для ядра версии 4.8 они будут скопированы в /lib/modules/4.8.6-ARCH . Это позволяет хранить модули разных ядер в отдельных каталогах.
Копирование ядра в каталог /boot
В результате компиляции ядра создаётся bzImage (big zImage, «большой сжатый образ») этого ядра, который необходимо скопировать в каталог /boot и переименовать. Имя должно начинаться с vmlinuz- , окончание можно выбрать любое. В примерах ниже установленное и скомпилированное ядро версии 4.8 копируется и переименуется в vmlinuz-linux48 :
Создание начального RAM-диска
Если вы не знаете, что такое создание начального RAM-диска, изучите статьи initrd и mkinitcpio.
Автоматизированный метод
Чтобы initramfs для нового ядра был сгенерирован аналогично официальному ядру, можно скопировать и модифицировать существующий mkinitcpio preset. Это удобно при перекомпиляции ядра (например, после обновления). В примере ниже файл предустановок (preset file) стокового ядра Arch копируется и модифицируется под ядро версии 4.8, установленное выше.
Сначала скопируйте существующий preset-файл, переименовав его с использованием суффикса из /boot/vmlinuz- (в нашем случае — linux48 ):
Затем отредактируйте файл под новое ядро. В параметре ALL_kver= необходимо указать имя нового ядра, выбранное при копировании bzImage :
Наконец, сгенерируйте initramfs-образ для нового ядра:
Ручной метод
Вместо использования файла с предустановками можно сгенерировать initramfs-файл вручную посредством mkinitcpio:
- -k ( —kernel ): указывает модули, которые будут использованы при генерации образа. Имя совпадает с именем каталога с исходниками нового ядра (и каталога с модулями для него, расположенного в /usr/lib/modules/ ).
- -g ( —generate ): указывается имя initramfs-файла, который будет создан в каталоге /boot . Ещё раз — рекомендуется использовать стандартную схему именования, упомянутую выше.
Например, команда для ядра версии 4.8:
Копирование System.map
Файл System.map не требуется для загрузки Linux. Это что-то вроде «телефонной книги» со списком функций для конкретной сборки ядра. System.map содержит список символов ядра (т.е. имён функций, переменных и т.п.) и соответсвующих им адресов. Это отображение имён символов на адреса используется:
- Некоторыми процессами вроде klogd, ksymoops и т.д.
- Обработчиком OOPS, когда во время падения ядра на экран выводится информация (например, о том, какая именно функция вызывала падение).
Если ваш каталог /boot использует файловую систему с поддержкой символических ссылок (т.е. не FAT32), скопируйте System.map в /boot , добавив название ядра к итоговому файлу. Затем создайте символическую ссылку /boot/System.map на /boot/System.map- :
В итоге в /boot должно быть 3 файла и 1 символическая ссылка (не считая любых других файлов, находившихся там до этого):
- Ядро: vmlinuz-
- Initramfs: Initramfs- .img
- System Map: System.map-
- Символическая ссылка на System Map.
Настройка загрузчика
Добавьте в файл настроек загрузчика пункт с новым ядром. В статье Процесс загрузки Arch#Сравнение возможностей приведено сравнение доступных загрузчиков; также изучите соответствующие статьи.
Источник