- Пошаговое руководство как собрать ядро Linux с нуля
- Сборка ядра Linux
- Шаг 1. Загрузите исходный код
- Шаг 2: извлеките исходный код
- Шаг 3: Установите необходимые пакеты
- Шаг 4: Настройте ядро
- Шаг 5: Соберите ядро
- Шаг 6. Обновите загрузчик (необязательно)
- Шаг 7: перезагрузите и проверьте версию ядра
- Итог
- Записки программиста
- Настраиваем загрузчик
- Ставим зависимости
- Получаем исходники
- Собираем и устанавливаем ядро
- Заключение
Пошаговое руководство как собрать ядро Linux с нуля
Ядро Linux является основой Unix-подобных операционных систем. Ядро отвечает за связь между оборудованием и программным обеспечением и за распределение доступных ресурсов.
Все дистрибутивы Linux основаны на предопределенном ядре. Но если вы хотите отключить несколько параметров и драйверов или попробовать экспериментальные исправления, вам необходимо собрать ядро Linux.
В этом пошаговом руководстве вы узнаете, как собрать и скомпилировать ядро Linux с нуля.
Сборка ядра Linux
Процесс создания ядра Linux состоит из семи простых шагов. Однако процедура требует значительного времени для завершения, в зависимости от скорости системы.
Примечание. Если версия на веб-сайте ядра не совпадает с версией из приведенных ниже шагов, используйте эти команды и замените номер версии ядра.
Шаг 1. Загрузите исходный код
1. Посетите официальный сайт ядра www.kernel.org и загрузите последнюю версию. Загруженный файл содержит сжатый исходный код.
2. Откройте терминал и используйте команду wget для загрузки исходного кода ядра Linux:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.6.tar.xz
По завершении загрузки в выходных данных отображается сообщение «saved».
Шаг 2: извлеките исходный код
Когда файл будет готов, запустите команду tar , чтобы извлечь исходный код:
Вывод отображает извлеченный исходный код ядра:
Шаг 3: Установите необходимые пакеты
Перед сборкой ядра установите дополнительные пакеты. Для этого запустите эту команду:
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
Команда, которую мы использовали выше, устанавливает следующие пакеты:
- git — отслеживает и записывает все изменения исходного кода во время разработки. Это также позволяет отменить изменения.
- fakeroot — упаковочный инструмент, создающий фальшивую корневую среду.
- build-essential — Устанавливает инструменты разработки, такие как C, C++, gcc и g++.
- ncurses-dev — Библиотека программирования, предоставляющая API для текстовых терминалов.
- xz-utils — обеспечивает быстрое сжатие и распаковку файлов.
- libssl-dev — поддерживает SSL и TSL, которые шифруют данные и делают интернет-соединение безопасным.
- bc (Basic Calculator) — математический язык сценариев, поддерживающий интерактивное выполнение операторов.
- flex (Fast Lexical Analyzer Generator) — генерирует лексические анализаторы, преобразующие символы в токены.
- libelf-dev — выдает общую библиотеку для управления файлами ELF (исполняемые файлы, дампы ядра и объектный код)
- bison — генератор парсера GNU, который преобразует описание грамматики в программу на языке C.
Шаг 4: Настройте ядро
Исходный код ядра Linux поставляется с конфигурацией по умолчанию. Однако вы можете настроить его под свои нужды. Для этого выполните следующие действия:
1. Перейдите к каталогу linux-5.9.6. с помощью команды cd :
2. Скопируйте существующий файл конфигурации с помощью команды cp :
cp -v /boot/config-$(uname -r) .config
3. Чтобы внести изменения в файл конфигурации, выполните команду make :
Команда запускает несколько скриптов, которые затем открывают меню конфигурации:
4. Меню конфигурации включает в себя такие параметры, как прошивка, файловая система, сеть и параметры памяти. Используйте стрелки, чтобы сделать выбор, или выберите HELP, чтобы узнать больше о вариантах. Когда вы закончите вносить изменения, выберите SAVE, а затем выйдите из меню.
Примечание. Изменение настроек некоторых параметров может привести к тому, что ядро не будет работать. Если вы не знаете, что изменить, оставьте настройки по умолчанию.
Шаг 5: Соберите ядро
1. Начните сборку ядра, выполнив следующую команду:
Процесс сборки и компиляции ядра Linux занимает некоторое время.
Терминал перечисляет все компоненты ядра Linux: управление памятью, драйверы оборудования, драйверы файловой системы, сетевые драйверы и управление процессами.
2. Установите необходимые модули с помощью этой команды:
sudo make modules_install
3. Наконец, установите ядро, набрав:
Вывод показывает готово, когда закончено:
Шаг 6. Обновите загрузчик (необязательно)
Загрузчик GRUB — это первая программа, которая запускается при включении системы.
Команда make install выполняет этот процесс автоматически, но вы также можете сделать это вручную.
1. Обновите initramfs до установленной версии ядра:
sudo update-initramfs -c -k 5.9.6
2. Обновите загрузчик GRUB с помощью этой команды:
Терминал выведет процесс и подтверждающее сообщение:
Шаг 7: перезагрузите и проверьте версию ядра
Когда вы выполните описанные выше действия, перезагрузите компьютер.
Когда система загрузится, проверьте версию ядра с помощью команды uname :
Терминал покажет текущую версию ядра Linux.
Итог
В этом пошаговом руководстве вы узнали, как собрать ядро Linux с нуля и установить необходимые пакеты.
Записки программиста
Если помните, не так давно мы научились собирать из исходников ядро FreeBSD. Спрашивается, почему бы не научиться делать то же самое и с ядром Linux? Причины собирать ядро Linux из исходников, в общем то, те же — получение самой свежей версии ядра, срочное применение security-патчей, оптимизация под конкретные задачи и конкретное железо, а также желание принятие участие в разработке ядра.
Важно! Следование инструкциям из этого поста может привести к потере ваших данных. Делайте бэкапы и помните, что делаете вы все исключительно на свой страх и риск. Все описанное ниже было проверено на Ubuntu 14.04 LTS. Но на других версиях Ubuntu, а также других дистрибутивах Linux, отличия должны быть минимальными.
Настраиваем загрузчик
Правим /etc/default/grub примерно таким образом:
GRUB_DEFAULT = 0
# GRUB_HIDDEN_TIMEOUT=10
# GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT = 10
GRUB_DISTRIBUTOR = ` lsb_release -i -s 2 > / dev / null || echo Debian `
GRUB_CMDLINE_LINUX_DEFAULT = «quiet splash»
GRUB_CMDLINE_LINUX = «»
В результате перед загрузкой системы в течение 10 секунд будет предлагаться выбрать ядро, с которым вы хотите загрузиться. Очень удобно, если вы что-то напутали с конфигурацией ядра и хотите загрузиться с предыдущей версией!
Ставим зависимости
Нам понадобятся как минимум следующие пакеты:
На многих системах все они, впрочем, уже будут присутствовать.
Получаем исходники
Исходники ядра можно скачать по ссылке на главной странице kernel.org. На момент написания этих строк последней стабильной версией ядра была 4.6.4:
wget https: // www.kernel.org / pub / linux / kernel / v4.x / linux-4.6.4.tar.xz
tar —xz -xvf linux-4.6.4.tar.xz
cd linux-4.6.4
Или, если вам нужен самый-самый свежак, можно взять исходники прямо из Git:
# Mirror: https://github.com/torvalds/linux
git clone ‘git://git.kernel.org/pub/scm/linux/kernel/git/’ \
‘torvalds/linux.git’
cd linux
Судя по тому, что тэга v4.6.4 в Git’е мне найти не удалось, релизы ядра Linux оформляются исключительно в форме сжатых tar-архивов.
Если же вместо ванильного ядра вы хотели бы собрать ядро с патчами от компании Canonical:
git clone git: // kernel.ubuntu.com / ubuntu / ubuntu-trusty.git
cd ubuntu-trusty
git tag | less
git checkout Ubuntu-lts-4.4.0- 31.50 _14.04.1
По своему опыту скажу, что если вы пользуетесь Ubuntu, то можете смело использовать ванильное ядро. Вряд ли у вас возникнут с ним какие-то проблемы.
Примечание: Интересно, что из существующих сравнительно популярных дистрибутивов Linux ядро без собственных патчей, похоже, используют только Gentoo, Slackware и Arch Linux.
Так или иначе, теперь у вас есть исходники.
Собираем и устанавливаем ядро
Выбираем опции, с которыми будет собрано ядро:
В случае необходимости меняем настройки, жмем Save, затем Exit. В результате будет создан файл .config , содержащий выбранные нами параметры.
При обновлении ядра (вы же по-любому уже используете какое-то ядро?) удобно взять конфиг текущего ядра, и выставить новым опциям значения по умолчанию:
Собирается ядро довольно долго. На моем ноутбуке сборка заняла 1 час 15 минут. Однако из этого времени большая часть тратится на сборку гигантского пакета ядра с отладочными символами. Сборку этого пакета можно отключить, закомментировав в конфиге параметр CONFIG_DEBUG_INFO. Только учтите, что этот пакет требуется SystemTap и другим полезным инструментам.
Помимо самого ядра также можно собрать и документацию:
# еще есть `make pdfdocs` и другие, см `make help`
make htmldocs
chromium-browser Documentation / DocBook / index.html
По окончании сборки в дочернем каталоге видим что-то вроде:
linux-firmware-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-headers-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom-dbg_4.4.13-custom-1_amd64.deb
linux-libc-dev_4.4.13-custom-1_amd64.deb
Ставим все deb-пакеты кроме dbg-версии ядра обычным sudo dpkg -i и перезагружаемся. После перезагрузки смотрим на вывод команды uname -a . Убеждаемся, что действительно загрузились с новым ядром. Если с новым ядром что-то не так, в загрузчике просто выбираем то, с которым система загружалась до этого. После загрузки со старым ядром поскорее удаляем пакеты нового ядра, и вуаля — система вернулась к прежнему состоянию.
Дополнительно после загрузки нового ядра можно прогнать на нем тесты:
Поздравляю, теперь вы умеете собирать ядро Linux!
Заключение
Материалы по внутреннему устройству ядра Linux:
- KernelNewbies.org, сайт для новичков в ядре Linux со своим списком рассылки, IRC-каналом, форумом, вики, и так далее;
- LKML.org, сайт для комфортного чтения мейлинг листа разработчиков ядра Linux через браузер. Будьте внимательны, он нередко портит форматирование писем! В этом смысле архив рассылки на marc.info намного лучше;
- Linux Cross Reference, сайт для комфортного чтения кода ядра Linux через браузер;
- Книга Linux Kernel Development, 3rd Edition является наиболее свежей книгой по ядру Linux на английском языке (2010 год, ядро 2.6.x), есть перевод на русский язык;
- Книга Linux-Treiber entwickeln, 4th Edition более свежая (2015 год, ядро 4.x), но написана на немецком и не имеет перевода;
- Бесплатная книга Linux Insides за авторством Alexander Kuleshov a.k.a @0xAX выглядит наиболее доступной и актуальной, но на данный момент еще находится в процессе написания;
- Иногда что-то полезное удается найти в Linux Kernel HTML Documentation, официальной документации из исходников ядра Linux;
- Примеры к книге Linux Device Drivers, 3rd Edition, которые пытаются поддерживать в актуальном состоянии, плюс исходники к 4-му изданию, которое на данный момент еще пишется;
А собираете ли вы ядро из исходников, и если да, то зачем? 🙂
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.