Какой простой способ перекомпилировать ядро?

Вопрос или проблема

Я заинтересован в компиляции нового ядра под Ubuntu 12.04 x86 64 бит.

Я нашел эту страницу вики, которая фактически является зеркалом для этого блога, и там много шагов (git и т.д.), которые кажутся мне бесполезными.

С более ранними версиями/дистрибутивами я обычно создавал файл .config и изменял Makefile, если это было необходимо, затем просто запускал make и всё было готово.

Есть ли простой способ сделать это в Ubuntu?

1. Используйте apt-get source, чтобы скачать версию ядра Ubuntu

apt-get source linux-image-$(uname -r)

создает папку, содержащую, например:

linux-3.2.0                linux_3.2.0-26.41.dsc
linux_3.2.0-26.41.diff.gz  linux_3.2.0.orig.tar.gz

Выделенный жирным шрифтом diff включает все кастомизации Ubuntu/Debian.

2. Чтобы собрать стандартное ядро с вашим собственным .config, используйте метод «по-старинке» Debian make-kpkg.

Это альтернативный старомодный способ, описанный в вики:

sudo apt-get install kernel-package

Если вы компилируете ядро в первый раз:

sudo apt-get build-dep linux-image-$(uname -r)

Затем cd в исходную директорию (здесь linux-3.2.0), и либо запустите make oldconfig, чтобы создать файл .config с вашей текущей конфигурацией ядра, либо скопируйте файл .config от третьих лиц в эту директорию.

В зависимости от того, хотите ли вы текстовую или графическую конфигурацию, установите:

(Текст)

sudo apt-get install libncurses5 libncurses5-dev

(Графика)

sudo apt-get install qt3-dev-tools libqt3-mt-dev

И затем выполните:

(Текст)

make menuconfig

(Графика)

make xconfig

Когда закончите, просто выполните:

fakeroot make-kpkg -j N --initrd --append-to-version=my-very-own-kernel kernel-image kernel-headers

где N – это количество задач для параллельного выполнения (обычно это количество ваших процессоров), а my-very-own-kernel – это пользовательская строка для идентификации этой сборки.

Когда закончите, файлы образа ядра и заголовков будут готовы в виде deb-пакетов в родительской директории; вы можете установить их с помощью sudo dpkg -i, что также позаботится о добавлении записей в GRUB и т.д.

Вот шаги. Эта процедура основана на nixCraft‘s Как: Компиляция ядра Linux 2.6—но значительно модернизирована.

Скачайте и распакуйте исходный код ядра, которое вы хотите собрать.

Вы можете получить входящий в основной поток исходный код ядра на kernel.org. Здесь будет использована версия 3.16.1 (самое последнее стабильное ядро на момент написания). Поэтому вам может понадобиться изменить эти команды, если вы используете другую версию.

Исходный код ядра предоставляется в архивах .tar.xz, поэтому нажмите на ссылку “tar.xz” рядом с версией, которую вы хотите:

скриншот с kernel.org, показывающий архивы исходного кода ядра, доступные для загрузки

После cd в директорию, куда вы скачали архив, вы можете его распаковать с помощью tar:

tar xf linux-3.16.1.tar.xz

Установите необходимые инструменты сборки и выполните конфигурацию ядра.

Чтобы получить инструментальную цепочку Ubuntu (gcc, make и т.п.), установите метапакет build-essential Установить build-essential:

sudo apt-get update
sudo apt-get install build-essential

Два достаточно удобных способа настроить, что входит в ваше ядро, предоставляются целями make xconfig и menuconfig.

xconfig запускает графический инструмент конфигурации, в то время как menuconfig является текстовым (то есть его интерфейс полностью отображается в вашем терминале). Для каждого из них требуется дополнительное программное обеспечение, которое не предоставляется build-essential Установить build-essential.

Для графической конфигурации установите libqt4-dev Установить libqt4-dev и pkg-config Установить pkg-config и выполните make xconfig:

sudo apt-get install libqt4-dev pkg-config
make xconfig

Для конфигурации в терминале установите libncurses5-dev (спасибо Hannu за эту информацию) и выполните make menuconfig:

sudo apt-get install libncurses5-dev
make menuconfig

Соберите настроенное ядро.

Сначала выполните это для компиляции ядра и создания vmlinuz:

make

vmlinuz это “ядро”. В частности, это образ ядра, который будет распакован и загружен в память GRUB или другим загрузчиком, который вы используете.

Затем соберите загружаемые модули ядра:

make modules

Установите ваше вновь созданное ядро.

Предполагая, что команды make успешно завершились, пришло время установить новое ядро. Сначала установите модули:

sudo make modules_install

Затем установите само ядро:

sudo make install

Это помещает vmlinuz-3.16.1 (копию vmlinuz), config-3.16.1 (текстовый файл, содержащий параметры конфигурации ядра) и System.map-3.16.1 (таблица поиска символов ядра) в /boot. Подробности см. в этом посте comp.os.linux.misc от Hadron и man installkernel.

Финальная настройка, чтобы ядро могло загружаться и запускать систему:

Этот раздел частично основан на информации из Kernel/Compile.

С ядром, которое теперь находится, где должно быть, необходимо:

Создайте ваш initramfs с помощью mkinitramfs:

cd /boot
sudo mkinitramfs -ko initrd.img-3.16.1 3.16.1

Когда вы обновляете конфигурацию загрузчика GRUB2—которая является по умолчанию в Ubuntu с версии 9.10—должна автоматически обнаружить новое ядро и добавить опцию для загрузки с него.

sudo update-grub

Попробуйте ваше ядро.

Теперь вы можете перезагрузиться, чтобы протестировать ваше новое ядро. Возможно, надо будет удерживать клавишу Shift или нажать Esc во время загрузки, чтобы увидеть меню загрузчика GRUB, где можно выбрать между различными установленными ядрами.

Чтобы сделать ваше ядро (или другое) по умолчанию, смотрите Как изменить порядок загрузки GRUB?

Быстрые инструкции по сборке Ubuntu ядра (в отличие от чистого) можно найти здесь: https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel.

Я не буду копировать всю вики, но перечислю минимальные шаги для компиляции версии Ubuntu ядра, которая у вас установлена. (Чтобы получить последнюю версию, клонируйте репозиторий ядра предстоящего релиза Ubuntu.) Протестировано на Ubuntu 16.04.

# Получите исходный код
apt-get source linux-image-$(uname -r)

# Установите зависимости
sudo apt-get build-dep linux-image-$(uname -r)

# Скомпилируйте
cd linux-4.4.0
fakeroot debian/rules clean
fakeroot debian/rules binary

# Установите (очевидно, версии будут разные)
cd ..
sudo dpkg -i linux-image-4.4.0-38-generic_4.4.0-38.57_amd64.deb linux-headers-4.4.0-38_4.4.0-38.57_all.deb linux-headers-4.4.0-38-generic_4.4.0-38.57_amd64.deb

Git репозиторий ядра Ubuntu

Следуя идеям из https://help.ubuntu.com/community/Kernel/Compile и с большей ясностью, почему я думаю, что конфигурация выглядит правильно по адресу Где я могу получить файл конфигурации ядра 11.04?:

git clone git://kernel.ubuntu.com/ubuntu/ubuntu-bionic.git linux
cd linux
git checkout Ubuntu-4.15.0-36.39
fakeroot debian/rules clean
debian/rules updateconfigs
fakeroot debian/rules build-generic
cp debian/build/build-generic/.config .
make -j `nproc`

Протестировано в Ubuntu 18.04.

Ответ Александра Дубинского поучителен, но в моем случае требовались очень незначительные изменения. Я добавляю другой ответ, так как у меня нет прав на комментарии, извините.

apt-get source linux-image-unsigned-$(uname -r)

sudo apt-get build-dep linux-image-unsigned-$(uname -r)

.

Ответ или решение

Компиляция ядра Linux – это задача, которая может потребоваться для достижения определенной настройки системы или обновления ядра до новой версии. Ваша задача – скомпилировать новое ядро под Ubuntu 12.04 x86 64-бит. Рассмотрим процесс компиляции ядра с использованием дистрибутива Ubuntu.

Теория

Компиляция ядра – это процесс перевода исходного кода в исполняемую программу, которая выполняется на вашем компьютере. В современных Linux-дистрибутивах, таких как Ubuntu, доступны многочисленные инструменты и методы для компиляции ядра, включая использование инструментов пакетов, таких как make и make-kpkg. Эти инструменты упрощают процесс компиляции, автоматизируя многие этапы ручной работы.

Пример

Рассмотрим процесс компиляции ядра Linux на примере метода, который использует Debian-компонент "make-kpkg". Это более традиционный метод компиляции ядра, который остается эффективным и удобным, особенно для пользователей старых версий Ubuntu, таких как Ubuntu 12.04.

  1. Установка необходимых инструментов и исходников:

    • Начните с установки необходимых пакетов, которые помогут в компиляции и сборке ядра:
      sudo apt-get update
      sudo apt-get install build-essential kernel-package libncurses5-dev bzip2
  2. Загрузка исходного кода ядра:

    • Используйте apt-get source для загрузки исходного кода текущего ядра:
      apt-get source linux-image-$(uname -r)
    • Команда создаст каталог с исходным кодом и необходимыми файлами.
  3. Создание конфигурации ядра:

    • Перейдите в каталог с исходным кодом:
      cd linux-3.2.0    # пример
    • Настройте параметры ядра с помощью текстового интерфейса:
      make menuconfig
    • Здесь вы можете настроить все необходимые опции ядра под свои нужды. Также можно использовать уже существующий файл конфигурации make oldconfig.
  4. Компиляция ядра:

    • Запустите процесс компиляции и создания пакета с использованием make-kpkg:
      fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
    • Здесь -custom – это произвольное имя, которое обозначает вашу спецификацию ядра.
  5. Установка нового ядра:

    • После завершения компиляции пакеты .deb будут созданы в каталоге выше:
      cd ..
      sudo dpkg -i linux-image-3.2.0-custom_3.2.0-custom_amd64.deb
      sudo dpkg -i linux-headers-3.2.0-custom_3.2.0-custom_amd64.deb
  6. Обновление загрузчика GRUB:

    • Нужно обновить конфигурацию GRUB, чтобы он знал о вашем новом ядре:
      sudo update-grub
  7. Перезагрузка и тестирование:

    • Перезагрузите систему, и во время загрузки выберите новое ядро для загрузки.

Применение

Этот метод подходит для пользователей, которые работают со старыми версиями Ubuntu, где использование более современных методов может не поддерживаться или быть сложным из-за отсутствия документации и автоматизированных инструментов. Данный метод также предоставляет больше контроля над компиляционным процессом и конфигурацией, что позволяет оптимизировать ядро для специфических нужд, таких как производительность или безопасность.

Следует помнить, что процесс компиляции ядра требует понимания как процесса настройки, так и возможных последствий при выполнении изменений конфигурации ядра. В случае ошибок, всегда можно загрузиться с помощью старого ядра, если возникает необходимость восстановления системы.

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

Капча загружается...