Компиляция ядра · 8 min read · Nov 27, 2025
Как скомпилировать ядро - по методу Debian

Каждое дистрибутив имеет свои специфические инструменты для сборки пользовательского ядра из исходников. Эта статья посвящена компиляции ядра на системе Debian (Etch). Она описывает, как собрать пользовательское ядро, используя последние немодифицированные исходники ядра с www.kernel.org (ванильное ядро), чтобы вы были независимы от ядер, поставляемых вашим дистрибутивом. Также показано, как патчить исходники ядра, если вам нужны функции, которых в них нет.
Я не даю никаких гарантий, что это сработает для вас!
1 Предварительная заметка
Я опишу два способа компиляции нового ядра. Используя первый метод, вы получите пакет kernel.deb, который можно установить на систему и которым можно поделиться с другими и установить на другие системы Debian Etch.
Второй метод — это компиляция ядра «традиционным» способом. Этот способ работает на любом дистрибутиве Linux, но, конечно, вы не получите пакет kernel.deb.
2 Создание пакета .deb ядра
Эта глава показывает, как создать ядро и получить пакет .deb, который вы можете установить и поделиться с другими.
2.1 Установка необходимых пакетов для компиляции ядра
Сначала обновим нашу базу данных пакетов:
apt-get updateЗатем установим все необходимые пакеты следующим образом:
apt-get install kernel-package ncurses-dev fakeroot wget bzip2 build-essential2.2 Загрузка исходников ядра
Далее мы загружаем желаемое ядро в /usr/src. Перейдите на www.kernel.org и выберите ядро, которое хотите установить, например, linux-2.6.21.3.tar.bz2 (все ядра 2.6 можно найти здесь: 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/linux2.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, но полные исходники еще не были выпущены для этого ядра. Вместо этого доступен патч-2.6.22-rc3.bz2. Вы можете применить этот патч к исходникам ядра 2.6.21, но не к ядру 2.6.21.1 или 2.6.21.2 и т.д. Это объясняется на http://kernel.org/patchtypes/pre.html:
Предпатчи эквивалентны альфа-релизам для 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 -p12.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 был автоматически изменен, и для нового ядра был создан ramdisk в /boot.
Теперь перезагрузите систему:
shutdown -r nowНа экране загрузки выберите ваше новое ядро (должно быть выбрано по умолчанию):

Если все пройдет хорошо, система должна загрузиться с новым ядром. Вы можете проверить, действительно ли используется ваше новое ядро, выполнив
uname -rЭто должно отобразить что-то вроде
2.6.21.3-customЕсли система не запускается, перезагрузите ее и выберите ваше старое ядро на экране загрузки. Теперь вы можете снова попробовать скомпилировать рабочее ядро. Не забудьте удалить строки неработающего ядра из /boot/grub/menu.lst.
3 Сборка ядра традиционным способом
Эта глава описывает другой подход, который можно использовать на любой системе Linux (за исключением деталей, таких как создание ramdisk или обновление загрузчика). Конечно, вы не получите пакет kernel.deb.
3.1 Установка необходимых пакетов для компиляции ядра
Сначала обновим нашу базу данных пакетов:
apt-get updateЗатем установим все необходимые пакеты следующим образом:
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential3.2 Загрузка исходников ядра
Далее, мы загружаем желаемое ядро в /usr/src. Перейдите на www.kernel.org и выберите ядро, которое хотите установить, например, linux-2.6.21.3.tar.bz2 (все ядра 2.6 можно найти здесь: 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/linux3.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, но полные исходники еще не были выпущены для этого ядра. Вместо этого доступен патч-2.6.22-rc3.bz2. Вы можете применить этот патч к исходникам ядра 2.6.21, но не к ядру 2.6.21.1 или 2.6.21.2 и т.д. Это объясняется на http://kernel.org/patchtypes/pre.html:
Предпатчи эквивалентны альфа-релизам для 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 -p13.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Затем мы создаем ramdisk с помощью следующей команды:
mkinitrd.yaird -o /boot/initrd.img-2.6.21.3 2.6.21.3Конфигурация GRUB очень проста в Debian Etch. Все, что нам нужно сделать, это выполнить
update-grubЭто обнаружит новое ядро и ramdisk и обновит /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
Get new posts in your inbox
No spam. Unsubscribe anytime.