Поиск по сайту:

Как скомпилировать ядро — путь Debian


На этой странице

  1. 1 Предварительное примечание
  2. 2 Сборка пакета ядра .deb
    1. 2.1 Установка необходимых пакетов для компиляции ядра
    2. 2.2 Загрузка исходных кодов ядра
    3. 2.3 Применение исправлений к исходным кодам ядра (необязательно)
    4. 2.4 Настройка ядра
    5. 2.5 Сборка ядра
    6. 2.6 Установка нового ядра

    1. 3.1 Установка необходимых пакетов для компиляции ядра
    2. 3.2 Загрузка исходных кодов ядра
    3. 3.3 Применение исправлений к исходным кодам ядра (необязательно)
    4. 3.4 Настройка ядра
    5. 3.5 Сборка и установка ядра
    6. 3.6 Действия после установки

    В каждом дистрибутиве есть определенные инструменты для сборки собственного ядра из исходников. Эта статья посвящена компиляции ядра в системе Debian (Etch). В нем описывается, как собрать собственное ядро с использованием последних немодифицированных исходных кодов ядра из ванильного ядра), чтобы вы были независимы от ядер, поставляемых вашим дистрибутивом. Также показано, как исправить исходные коды ядра, если вам нужны функции, которых там нет.

    Я не даю никаких гарантий, что это сработает для вас!

    1 Предварительное примечание

    Я опишу два способа компиляции нового ядра. Используя первый метод, вы получите пакет ядра .deb, который можно установить в системе, а также поделиться им с другими и установить в других системах Debian Etch.

    Второй метод состоит в том, чтобы скомпилировать ядро «традиционным» способом. Этот способ работает в любом дистрибутиве Linux, но, конечно, вы не получите пакет ядра .deb.

    2 Сборка пакета ядра .deb

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

    2.1 Установите необходимые пакеты для компиляции ядра

    Сначала мы обновляем нашу базу данных пакетов:

    apt-get update

    Затем мы устанавливаем все необходимые пакеты следующим образом:

    apt-get install kernel-package ncurses-dev fakeroot wget bzip2 build-essential

    2.2 Загрузите исходники ядра

    Далее мы загружаем желаемое ядро в /usr/src. Перейдите на http://www.kernel.org/pub/linux/kernel/v2.6/). Затем вы можете загрузить его в /usr/src следующим образом:

    cd /usr/src
    wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2

    Затем распаковываем исходники ядра и создаем симлинк linux на каталог исходников ядра:

    tar xjf linux-2.6.21.3.tar.bz2
    ln -s linux-2.6.21.3 linux
    cd /usr/src/linux

    2.3 Применение патчей к исходным кодам ядра (необязательно)

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

    Теперь давайте предположим, что вы загрузили нужный патч (в данном примере я называю его patch.bz2) в /usr/src. Вот как вы применяете его к своим исходным кодам ядра (вы все еще должны находиться в каталоге /usr/src/linux):

    bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch.bz2 | patch -p1

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

    Вы также можете применять предварительные исправления ядра к исходным кодам ядра. Например, если вам нужна функция, которая доступна только в ядре 2.6.22-rc3, но для этого ядра еще не выпущены полные исходники. Вместо этого доступен patch-2.6.22-rc3.bz2. Вы можете применить этот патч к исходным кодам ядра 2.6.21, но не к ядру 2.6.21.1 или 2.6.21.2 и т. д. Это объясняется на http://kernel.org/patchtypes/pre.html:

    Prepatches эквивалентны альфа-версиям для Linux; они живут в каталогах тестирования в архивах. Их следует применять с помощью утилиты patch(1) к исходному коду предыдущей полной версии с трехчастным номером версии (например, предварительный патч 2.6.12-rc4 следует применять к исходным кодам ядра 2.6.11, а не , например, 2.6.11.10.)

    Так что если вы хотите скомпилировать ядро 2.6.22-rc3, вы должны скачать исходники ядра 2.6.21 (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21. tar.bz2) на шаге 3 вместо ядра 2.6.21.3!

    Вот как вы применяете патч 2.6.22-rc3 к ядру 2.6.21:

    cd /usr/src 
    wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
    cd /usr/src/linux
    bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1

    2.4 Настройка ядра

    Хорошей идеей будет использовать конфигурацию вашего текущего работающего ядра в качестве основы для вашего нового ядра. Поэтому копируем существующую конфигурацию в /usr/src/linux:

    make clean && make mrproper
    cp /boot/config-`uname -r` ./.config

    Затем мы бежим

    make menuconfig

    который вызывает меню конфигурации ядра. Перейдите к разделу «Загрузить альтернативный файл конфигурации» и выберите .config (который содержит конфигурацию вашего текущего работающего ядра) в качестве файла конфигурации:

    Затем просмотрите меню конфигурации ядра и сделайте свой выбор. Когда вы закончите и выберите «Выход», ответьте на следующий вопрос (Вы хотите сохранить новую конфигурацию ядра?) Да:

    2.5 Сборка ядра

    Чтобы собрать ядро, выполните следующие две команды:

    make-kpkg clean
    fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

    После --append-to-version= вы можете написать любую строку, которая поможет вам идентифицировать ядро, но она должна начинаться с минуса (-) и не должна содержать пробелов.

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

    2.6 Установите новое ядро

    После успешной сборки ядра вы можете найти два пакета .deb в каталоге /usr/src.

    cd /usr/src
    ls -l

    В моей тестовой системе они назывались linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb (который содержит фактическое ядро) и linux-headers-2.6.21.3-custom_2.6.21.3- custom-10.00.Custom_i386.deb (который содержит файлы, необходимые, если вы хотите скомпилировать дополнительные модули ядра позже). Я устанавливаю их так:

    dpkg -i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
    dpkg -i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb

    (Теперь вы даже можете перенести два файла .deb в другие системы Debian Etch и установить их точно таким же образом, что означает, что вам не нужно снова компилировать ядро там.)

    Вот и все. Файл конфигурации загрузчика GRUB /boot/grub/menu.lst был изменен автоматически, и в /boot был создан RAM-диск для нового ядра.

    Теперь перезагрузите систему:

    shutdown -r now

    В приглашении загрузки выберите новое ядро (должно быть выбрано по умолчанию):

    Если все пойдет хорошо, должно появиться новое ядро. Вы можете проверить, действительно ли оно использует ваше новое ядро, запустив

    uname -r

    Это должно отображать что-то вроде

    2.6.21.3-custom

    Если система не запускается, перезапустите ее и выберите старое ядро в приглашении загрузки. Теперь вы можете попытаться снова скомпилировать работающее ядро. Не забудьте удалить строфы неработающего ядра из /boot/grub/menu.lst.

    3. Сборка ядра традиционным способом

    В этой главе описывается другой подход, который можно использовать в любой системе Linux (за исключением таких деталей, как создание виртуального диска или обновление загрузчика). Конечно, вы не получите пакет ядра .deb.

    3.1 Установите необходимые пакеты для компиляции ядра

    Сначала мы обновляем нашу базу данных пакетов:

    apt-get update

    Затем мы устанавливаем все необходимые пакеты следующим образом:

    apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential

    3.2 Загрузите исходники ядра

    Далее скачиваем нужное нам ядро в /usr/src. Перейдите на http://www.kernel.org/pub/linux/kernel/v2.6/). Затем вы можете загрузить его в /usr/src следующим образом:

    cd /usr/src
    wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2

    Затем распаковываем исходники ядра и создаем симлинк linux на каталог исходников ядра:

    tar xjf linux-2.6.21.3.tar.bz2
    ln -s linux-2.6.21.3 linux
    cd /usr/src/linux

    3.3 Применение исправлений к исходным кодам ядра (необязательно)

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

    Теперь давайте предположим, что вы загрузили нужный патч (в данном примере я называю его patch.bz2) в /usr/src. Вот как вы применяете его к своим исходным кодам ядра (вы все еще должны находиться в каталоге /usr/src/linux):

    bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch.bz2 | patch -p1

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

    Вы также можете применять предварительные исправления ядра к исходным кодам ядра. Например, если вам нужна функция, которая доступна только в ядре 2.6.22-rc3, но для этого ядра еще не выпущены полные исходники. Вместо этого доступен patch-2.6.22-rc3.bz2. Вы можете применить этот патч к исходным кодам ядра 2.6.21, но не к ядру 2.6.21.1 или 2.6.21.2 и т. д. Это объясняется на http://kernel.org/patchtypes/pre.html:

    Prepatches эквивалентны альфа-версиям для Linux; они живут в каталогах тестирования в архивах. Их следует применять с помощью утилиты patch(1) к исходному коду предыдущей полной версии с трехчастным номером версии (например, предварительный патч 2.6.12-rc4 следует применять к исходным кодам ядра 2.6.11, а не , например, 2.6.11.10.)

    Так что если вы хотите скомпилировать ядро 2.6.22-rc3, вы должны скачать исходники ядра 2.6.21 (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21. tar.bz2) на шаге 3 вместо ядра 2.6.21.3!

    Вот как вы применяете патч 2.6.22-rc3 к ядру 2.6.21:

    cd /usr/src 
    wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
    cd /usr/src/linux
    bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1

    3.4 Настройка ядра

    Хорошей идеей будет использовать конфигурацию вашего текущего работающего ядра в качестве основы для вашего нового ядра. Поэтому копируем существующую конфигурацию в /usr/src/linux:

    make clean && make mrproper
    cp /boot/config-`uname -r` ./.config

    Затем мы бежим

    make menuconfig

    который вызывает меню конфигурации ядра. Перейдите к разделу «Загрузить альтернативный файл конфигурации» и выберите .config (который содержит конфигурацию вашего текущего работающего ядра) в качестве файла конфигурации:

    Затем просмотрите меню конфигурации ядра и сделайте свой выбор. Когда вы закончите и выберите «Выход», ответьте на следующий вопрос (Вы хотите сохранить новую конфигурацию ядра?) Да:

    3.5 Сборка и установка ядра

    Чтобы собрать ядро, выполните следующие команды:

    make all
    make modules_install
    make install

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

    3.6 Действия после установки

    Теперь новое ядро установлено, но нам все еще нужен ramdisk для нашего нового ядра (иначе система, скорее всего, не загрузится!), и нам нужно сообщить загрузчику GRUB о нашем новом ядре.

    Сначала делаем так:

    depmod 2.6.21.3
    apt-get install yaird

    Затем мы создаем виртуальный диск с помощью следующей команды:

    mkinitrd.yaird -o /boot/initrd.img-2.6.21.3 2.6.21.3

    Настройка GRUB в Debian Etch очень проста. Все, что нам нужно сделать, это запустить

    update-grub

    Это обнаружит новое ядро и виртуальный диск и обновит /boot/grub/menu.lst для нас.

    Теперь перезагрузите систему:

    shutdown -r now

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

    uname -r

    Это должно отображать что-то вроде

    2.6.21.3

    Если система не запускается, перезапустите ее и выберите старое ядро в приглашении загрузки. Теперь вы можете попытаться снова скомпилировать работающее ядро. Не забудьте удалить строфы неработающего ядра из /boot/grub/menu.lst.

    4 ссылки

    • Debian: http://www.debian.org
    • Архивы ядра Linux: http://www.kernel.org.