- HOW-TO: Сборка ядра Linux
- Шаг 1. Получение исходного кода ядра
- Шаг 2. Получение необходимых для сборки пакетов
- Шаг 3. Применение патчей
- Шаг 4. Конфигурация будущей сборки ядра
- Шаг 5. Сборка ядра
- Шаг 6. Установка образов и заголовков ядра
- Шаг 7. Генерация начального RAM-диска
- Шаг 8. Обновление конфигурации загрузчика GRUB
- Шаг 9. Проверка ядра
- Ссылки
- ToDo
- 🐧 Вывод информации о загруженных модулях ядра
- Команда lsmod
- Заключение
HOW-TO: Сборка ядра Linux
В данном пошаговом руководстве вы узнаете, как правильно собрать и установить ядро ветвей >2.6 в семействе ОС Ubuntu.
Шаг 1. Получение исходного кода ядра
Исходники ядра Ubuntu можно получить двумя способами:
Установив архив из репозитория, с автоматическим наложением последних официальных патчей. При этом скачается пакет размером ~150 Мб в текущую папку. Чтобы получить исходники ядра, версия которого установлена на компьютере выполните команду:
apt-get source linux-image-`uname -r`
Список имеющихся в репозитории версий можно увидеть набрав команду: «apt-get source linux-image-» и, не нажимая Enter , нажать два раза клавишу Tab .
Не забудьте включить общий доступ к исходникам в репозитории ( Параметры системы → Программы и обновления → Программное обеспечение Ubuntu → Исходный код ). Из консоли это сделать можно раскомментировав строки начинающиеся с deb-src в файле /etc/apt/sources.list, а затем выполнить обновление командой: «sudo apt-get update».
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-.git
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-xenial.git
Другие ядра
Также существуют ядра, работоспособность которых в Ubuntu не гарантируется. Например, известна проблема с рядом популярных системных приложений (в частности драйвера NVidia, VirtualBox), которые при своей установке компилируются под установленное ядро. Поэтому для их установки на ядро, нестандартное для данной версии Ubuntu (например, Ubuntu 16.04 идёт с ядром 4.4.0), может потребоваться их отдельная компиляция вручную или специальные патчи, а последние версии ядер с kernel.org приложение может вообще не поддерживать.
sudo apt-get install linux-source
Распакуйте полученный архив, используя команды:
cd ~/ tar -xjf linux-2.6.x.y.tar.bz2
Или в случае с linux-source:
cd /usr/src tar -xjf linux-source-2.6.x.y.tar.bz2
Шаг 2. Получение необходимых для сборки пакетов
Выполните следующие команды для установки основных пакетов:
sudo apt-get update sudo apt-get build-dep linux sudo apt-get install kernel-package
Далее всё зависит от того, каким способом вы хотите произвести конфигурацию ядра. Это можно сделать несколькими способами.
config — традиционный способ конфигурирования. Программа выводит параметры конфигурации по одному, предлагая вам установить для каждого из них свое значение. Не рекоммендуется для неопытных пользователей.
oldconfig — файл конфигурации создаётся автоматически, основываясь на текущей конфигурации ядра. Рекомендуется для начинающих.
defconfig — файл конфигурации создаётся автоматически, основываясь на значениях по-умолчанию.
menuconfig — псевдографический интерфейс ручной конфигурации, не требует последовательного ввода значений параметров. Рекомендуется для использования в терминале.
xconfig — графический (X) интерфейс ручной конфигурации, не требует последовательного ввода значений параметров.
gconfig — графический (GTK+) интерфейс ручной конфигурации, не требует последовательного ввода значений параметров. Рекомендуется для использования в среде GNOME.
localmodconfig — файл конфигурации, создающийся автоматически, в который включается только то, что нужно данному конкретному устройству. При вызове данной команды большая часть ядра будет замодулирована
localyesconfig — файл конфигурации, похожий на предыдущий, но здесь большая часть будет включена непосредственно в ядро. Идеальный вариант для начинающих.
В случае, если вы хотите использовать config, oldconfig, defconfig, localmodconfig или localyesconfig, вам больше не нужны никакие дополнительные пакеты. В случае же с оставшимися тремя вариантами необходимо установить также дополнительные пакеты.
Для установки пакетов, необходимых для использования menuconfig выполните следующую команду:
sudo apt-get install libncurses5-dev
Для установки пакетов, необходимых для использования gconfig выполните следующую команду:
sudo apt-get install libgtk2.0-dev libglib2.0-dev libglade2-dev
Для установки пакетов, необходимых для использования xconfig выполните следующую команду:
sudo apt-get install qt3-dev-tools libqt3-mt-dev
sudo apt-get install libqt4-dev
Шаг 3. Применение патчей
Официальные патчи уже наложены на исходники, если ядро получалось описанной выше командой:
apt-get source linux-image-`uname -r`
Если вы никогда до этого не применяли патчей к исходному коду, то выполните следующую команду:
sudo apt-get install patch
Эта команда установит программу patch, необходимую для, как можно догадаться, применения патчей. Теперь скачайте файл патча в папку, куда вы распаковали ядро. Это может быть либо архивный файл (напр. Bzip2 или Gzip), либо несжатый patch-файл.
На данный момент подразумевается, что вы уже сохранили файл в ту папку, куда ранее распаковали ядро, и установили программу patch.
Если скачанный вами файл был в формате Gzip (*.gz), тогда выполните следующую команду для распаковки содержимого архива:
Если скачанный вами файл был в формате Bzip2 (*.bz2), тогда выполните следующую команду для распаковки содержимого архива:
где 2.6.x.y — версия патча ядра. Соответствующие команды распакуют файл патча в папку с исходным кодом ядра. Прежде чем применить патч, необходимо удостовериться, что он заработает без ошибкок. Для этого выполните команду:
patch -p1 -i patch-2.6.x.y --dry-run
где 2.6.x.y — версия патча ядра. Эта команда сымитирует применение патча, не изменяя сами файлы.
Если при её выполнении не возникнет ошибок, то изменения можно смело внедрять в сами файлы. Для этого выполните команду:
где 2.6.x.y — версия патча ядра. Если не было никаких ошибок, значит к исходному коду был успешно применён патч.
Внимание! Перед тем, как применять патч, проведите следующие действия: 1. Скачайте с http://www.kernel.org патч той же версии, что и ваших исходников. 2. Выполните следующую команду:
где 2.6.x.y — версия патча и ваших исходников
Шаг 4. Конфигурация будущей сборки ядра
Перейдите в папку, куда вы распаковали ядро, выполнив команду
где 2.6.x.y — версия загруженного вами ядра.
На данный момент вы уже должны были определиться с методом конфигурации ядра (если нет, то ознакомьтесь с ними в разделе «Получение необходимых для сборки пакетов». В зависимости от этого, выполните следующую команду для запуска выбранного вами способа конфигурации:
config — традиционный способ конфигурирования. Программа выводит параметры конфигурации по одному, предлагая вам установить для каждого из них свое значение. Вызывается командой
oldconfig — файл конфигурации создаётся автоматически, основываясь на текущей конфигурации ядра. Рекомендуется для начинающих. Вызывается командой
defconfig — файл конфигурации создаётся автоматически, основываясь на значениях по-умолчанию для данной конкретной архитектуры. Вызывается командой
menuconfig — псевдографический интерфейс ручной конфигурации, не требует последовательного ввода значений параметров. Рекомендуется для использования в терминале. Вызов:
gconfig и xconfig — графические конфигураторы для ручной настройки. Вызов:
localmodconfig и localyesconfig — автоматические конфигураторы. Конфиг создается на основе вызванных в данных момент модулей и запущенного ядра. Разница между этими двумя конфигураторами в количестве модулей. В первом случае их будет не менее 50% ядра, а во-втором не больше 2 модулей. Вызов:
После вызова соответствующая программа конфигурации будет запущена. Произведите необходимые настройки в соответствии с вашими потребностями, сохраните файл конфигурации и переходите к следующему шагу.
Шаг 5. Сборка ядра
Итак, приготовления завершены. Теперь можно запустить процесс сборки ядра. Чтобы это сделать, выполните команду:
fakeroot make-kpkg -j 5 --initrd --append-to-version=-custom kernel_image kernel_headers #-j +1
Сборка ядра может занимать от 20 минут до нескольких часов в зависимости от конфигурации ядра и технических параметров компьютера. Сборка при многодерном процессоре может быть в несколько раз быстрее
Шаг 6. Установка образов и заголовков ядра
Когда сборка ядра подошла к концу, в вашей домашней папке появятся два deb-пакета. Их и необходимо установить. Для этого выполните команды:
cd ~/ sudo dpkg -i linux-image-2.6.x.y-custom_2.6.x.y-custom-10.00.Custom_arc.deb sudo dpkg -i linux-headers-2.6.x.y-custom_2.6.x.y-custom-10.00.Custom_arc.deb
где 2.6.x.y — версия собранного ядра, arc — архитектура процессора (i386 — 32-бит, amd64 — 64-бит).
Если вы не знаете точного названия пакета, выведите список файлов в домашнем каталоге командой
и найдите эти самые два пакета.
Шаг 7. Генерация начального RAM-диска
Для корректной работы Ubuntu требует наличия образа начального RAM-диска. Чтобы его создать, выполните команду:
sudo update-initramfs -c -k 2.6.x.y-custom
где 2.6.x.y — версия собранного ядра.
Шаг 8. Обновление конфигурации загрузчика GRUB
Для того, чтобы новая версия ядра была доступна для выбора при загрузке компьютера, выполните следующую команду:
Файл menu.lst (для GRUB версии 1) или grub.cfg (для GRUB версии 2) обновится в соответствии с наличием установленных операционных систем и образов ядер.
Этот шаг тоже можно пропустить, потому что во время установки ядра команда update-grub вызывается postinst-скриптом
Шаг 9. Проверка ядра
Сборка и установка ядра успешно выполнены! Теперь перезагрузите компьютер и попробуйте загрузить систему с новым ядром. Чтобы удостовериться, что система запущена с новым ядром, выполните команду
Она выведет на экран используемую версию ядра.
Если всё сделано правильно, то вы можете удалить архивы с исходным кодом и весь каталог linux-2.6.x.y в вашей домашней папке. Это освободит около 5 ГБ на вашем жёстком диске (размер освобождаемого пространства зависит от параметров сборки).
На этом процесс сборки и установки завершён, поздравляю!
Ссылки
ToDo
Исправить дублирование списка команд make config в двух разделах этой справки (перенести из «Шаг 2: пакеты для компиляции» в «Шаг 4: конфигурация»)
🐧 Вывод информации о загруженных модулях ядра
lsmod – это инструмент командной строки, используемый для отображения модулей ядра, которые загружены в данный момент.
Модули ядра – это части кода, которые могут быть загружены и выгружены в ядро по запросу.
Они расширяют функциональность ядра во время его выполнения.
Наиболее распространенные функциональные возможности модулей ядра – это приводы устройств для поддержки нового оборудования, поддержка файловой системы, системные вызовы и многое другое.
Модули ядра загружаются либо автоматически (с помощью udev), либо вручную. Вы можете загрузить модули вручную с помощью команды modprobe. Модули, явно перечисленные в /etc/modules-load.d/.conf для загрузки при загрузке.
Пакет kmod предоставляет инструменты для ручной работы с модулями ядра.
Модули ядра хранятся в каталоге /lib/modules/.
Для поиска версии ядра используйте команду uname -r.
Команда lsmod
Команда lsmod выводит содержимое папки /proc/modules.
Чтобы перечислить загруженные в данный момент модули ядра, введите:
Module Size Used by vboxvideo 49152 0 rfkill 28672 3 intel_rapl_msr 20480 0 intel_rapl_common 28672 1 intel_rapl_msr intel_pmc_core_pltdrv 16384 0 intel_pmc_core 45056 0 intel_powerclamp 20480 0 ghash_clmulni_intel 16384 0 joydev 28672 0 hid_generic 16384 0 snd_intel8x0 49152 2 snd_ac97_codec 180224 1 snd_intel8x0 aesni_intel 368640 0 ac97_bus 16384 1 snd_ac97_codec usbhid 65536 0 hid 147456 2 usbhid,hid_generic libaes 16384 1 aesni_intel crypto_simd 16384 1 aesni_intel snd_pcm 135168 2 snd_intel8x0,snd_ac97_codec snd_timer 49152 1 snd_pcm cryptd 24576 2 crypto_simd,ghash_clmulni_intel
Вывод показывает три колонки: Module, Size и Used by.
- 1-й столбец – имена загруженных в данный момент модулей.
- 2-й столбец – объем памяти для каждого модуля в килобайтах.
- 3-я колонка – показывает общее количество использованной памяти, а также имена модулей.
Для поиска конкретных модулей в выводе lsmod используйте команду grep для фильтрации.
Используйте команду modinfo для получения дополнительной информации о модулях ядра, такой как абсолютный путь к объектному файлу ядра .ko, зависимость, автор, описание и лицензия.
Заключение
В этом руководстве мы изучили команду lsmod, которая выводит список загруженных в данный момент модулей ядра в Linux.