Самое стабильное ядро линукс. Собираем ядро Linux

Ядро - нечто центральное и самое важное, часто круглое.
Линус Торвальдс (17 сентября 1991 года)

Многие из вас слышали, что линуксоиды часто собирают ядро. Прям забава какая-то... Давайте разберемся, что это такое, зачем его собирать, и попробуем собрать собственное ядро для Ubuntu. Начнем с определений.
В linux-системах ядро - это основная программа ОС, которая обеспечивает доступ к аппаратной части, распределяет ресурсы, управляет файловыми системами и памятью и т.д. и т.п. Т.е. ядро управлет абсолютно ВСЕМ в системе.
Наибольшее распространение в linux получили два типа ядер:

  • монолитное ядро
  • модульное ядро

А мы очень кратко рассмотрим 2 вышеуказанных типа ядер.

В монолитном ядре все его компоненты являются единым целым и работают в одном адресном пространстве, используя одни структуры данных. Такие ядра хороши для повышения безопасности, но страдают в устойчивости и гибкости. В наши дни монолитные ядра практически не используются, но первая версия ядра linux версии 0.01 была монолитной.
Модульное ядро состоит из большого количества модулей (программ управления ресурсами) или драйверов, которые подгружаются в память по мере необходимости. Например, в большинстве дистрибутивов в ядро включена поддержка процессоров как Intel, так и AMD.

Ядра большинства современных дистрибутивов хороши тем, что они определяют практически любое оборудование и подгружают соответствующие модули/драверы. Именно поэтому такие дистрибутивы как Ubuntu, Fedora, SuSE и многие другие нормально работают "из коробки". Но в этом и кроется их недостаток.

Производители дистрибутивов включают в свои сборки ядра максимально возможное количество модулей, чтобы охватить как можно больше разнообразных систем. Но ядро в линукс - это единственная часть системы, которая полностью загружается в оперативную память и никогда не переносится в swap. Конечно, модульность убунтийского ядра несколько спасает ситуацию: не загружаются модули оборудования, которое отсутствует в системе (например, поддержка ленточных накопителей информации, которые можно найти лишь в некоторых дата-центрах). Но многие модули включены в ядро по умолчанию. Например, упомянутые выше процессоры. Все это приводит к тому, что ядро получается сильно "раздутым". Это не принципиально, если у вас много оперативки и достаточно продвинутый компьютер, но и его можно заставить работать быстрее и лучше.

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

Многих пользователей слова "собрать ядро" очень пугают, и они даже не пытаются это сделать. Но все (как всегда) на много проще, чем кажется. Сейчас мы соберем новое ядро для своего дистрибутива Ubuntu (для других дистрибутивов все делается точно также за исключением использования sudo ).

Пошаговая инструкция по сборке ядра в Ubuntu.

Поиск и подготовка ядра

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

В gconfig состояние пакета отмечается галочкой в одном из 3х столбцов: N - не устанавливать, M - установить модулем, Y - установить в основное ядро.

Какую утилиты выбрать - это дело каждого, но я предпочитаю xconfig.

Отмечаем нужные нам параметры для установки.

  1. Перед сборкой нового ядра убедитесь, что абсолютно все устройства вашей текущей конфигурации работаю нормально (это очень сильно облегчит вам жизнь).
  2. При первом запуске конфигуратор будет использовать файл настроек вашего текущего ядра, т.к. обнаружит файла.config в папке с новым ядром. Поэтому, если все устройства в системе работают нормально, то НЕ ДОБАВЛЯЙТЕ ни какие пакеты, т.к. они ТОЧНО не будут использоваться в системе.
  3. Если вы не уверены в необходимости того или иного модуля/драйвера, выбирайте "установить модулем". Тогда есть шанс, что он не будет мешать системе, даже если он не требуется.
  4. Внимательно вчитывайтесь в описание модулей (и учите английский), если там есть рекомендации, то прислушайтесь к ним.
  5. Удаляйте только то, что вы уверены вам не пригодится. Например, если у вас процессор от Intel, то все связанное с процессорами AMD можно удалять (и наоборот).
  6. Используйте поиск. Сначала включите в меню Show all для отображения скрытых элементов (вложенные элементы, родитель которых не помечен для установки). Например, у меня ноутбук Asus, поэтому я ввел название марки в поиск и последовательно включил все, касающееся ноутбуков Asus. Аналогичным образом можно исключать модули, которые вам не нужны. Например, я нашел все модули для ноутбуков Dell, Compaq, Toshiba и др. и убрал их из конфигурации.
  7. Не поленитесь прогнать поиском все модули, которые вы нашли с помощью и убедитесь, что они включены в ядро (полностью включены, а не как модули), это даст прирост в производительности компьютера.

Я думаю, что для начала этого хватит. В идеале, конечно же, внимательно прочитать информацию о каждом модуле и определить для себя, нужен ли он. Но для этого нужно хорошее знание английского, глубокое понимание принципов работы компьютера, знание железа и не меньше суток свободного времени, чтобы все это прочитать и осознать. Я рекомендую начинать с реализации пп.1-7, и лишь потом (если все нормально) начинать эксперементировать с оставшимися модулями. Лично у меня ушел месяц на сборку ядра, которое мне нравится, но и в нем еще много лишнего (думаю, что еще полгода я буду его вычищать).
Теперь можно переходить к сборке ядра. Все, что для этого нужно - сохранить полученный конфигурационный файл.config и закрыть конфигуратор. Скрипт автоматически выполнит очистку системы и запустит процесс сборки ядра. Ядро с параметрами по умолчанию от Ubuntu у меня собирается за 1,5 часа, а оптимизированное под мои нужды - 30 мин.

В результате работы скрипта build-kernel.sh в папке, где лежит папка с ядром (у меня /home/user/temp/) должны появиться два файла:

linux-headers-2.6.32.6_бла-бла-бла.deb
linux-image-2.6.32.6_бла-бла-бла.deb

Это заголовки и образ ядра. Теперь устанавливаем эти.deb пакеты привычным способом (лучше сначала установите headers).
Теперь можно перезагружаться.В меню grub вы увидите свое ядро. Скорее всего оно не подцепит графику, поэтому драйверы видеокарты придется ставить заново (это если вы пользуетесь проприетарными драйверами). Вот теперь все. Поздравляю - вы собрали свое ядро с нуля!
Но не радуйтесь сильно, даже если все завелось с первой попытки (так тоже бывает - мне рассказывали).

  1. Не кидайтесь сразу еще раз собирать ядро, урезав его еще сильнее. Подождите 2-3 дня усиленной работы на компьютере, фиксируя все сбои и нестандартное/непривычное поведение системы. Когда же вы дозреете до следующего этапа сборки, то сохраняйте конфигурационный файл.config, чтобы всегда иметь возможность откатиться к рабочей версии.
  2. Не стоит держать большое количество собранных ядер, поэтому не забывайте очищать систему от ядерного переизбытка.
  3. При выходе новой версии ядра, смело кидайте ему свой.config, тогда вам придется лишь внимательно просмотреть изменения в новом ядре и выбрать нужное модули.
  4. Перед сборкой нового ядра сделайте бэкап файла.config (он в папке с ядром). И выполните в папке с ядром команду sudo make mrproper , чтобы удалить все файлы, оставшиеся от предыдущей компиляции.

Вот так все просто!

PS: И все же, собирая ядра, надо быть осторожным. Можно обрушить систему, а делать потом восстановление информации совсем не хочется. Жаль, что носители информации регуларно падают и "падают" без помощи человека (особенно флешки), но востановить можно почти все.

В середине марта после почти двух месяцев разработки и семи release candidate Линус Торвальдс представил новую версию ядра 4.5. Кроме исправлений, в релизе действительно много нового. Изменения затронули все подсистемы - дисковую, работу с памятью, системные и сетевые сервисы, безопасность, и, конечно же, добавлены драйверы для новых устройств. Попробуем разобраться с некоторыми наиболее интересными.

О релизе

Релиз ядра 4.4 вышел относительно недавно, в начале января 2016-го, но за это короткое время накопилось большое количество дополнений. И хотя Линус назвал новый релиз «нормальным», можно увидеть, что по сравнению с версией 4.4 размер патча вырос почти на треть - 70 Мбайт против 49 Мбайт. В разработке участвовало примерно 1528 человек, которые внесли около 13 тысяч исправлений . В более чем 11 тысяч файлов были добавлены 1 146 727, удалено 854 589 строк кода. В 4.4 было соответственно 714 106 и 471 010 строк. Почти половина (45%) всех изменений связана с драйверами устройств, 17% затрагивают код аппаратных архитектур, 14% касаются сетевого стека, 4% - файловых систем, и 3% затронули внутренние подсистемы ядра. Наибольшее количество строк внесли Даг Ледфорд (Doug Ledford) из Red Hat, занимавшийся в основном чисткой кода (7,7%), Томи Валкейнен (Tomi Valkeinen) из Texas Instruments, работавший над поддержкой субархитектуры OMAP (5,3%), три разработчика сосредоточили внимание на драйверах графических карт AMD: Эрик Хуан (Eric Huang) - 3,3%, Алекс Дойхер (Alex Deucher) - 2,4% и yanyang1 - 1,6%. Лидеры по чейнджсетам - Линус Валлей (Linus Walleij) из Linaro, реализовавший множество низкоуровневых изменений, в том числе к поддерживаемому им GPIO (2,0%), Арнд Вергман (Arnd Bergmann), проделавший большую работу для поддержки ARM (1,9%), и Лео Ким (Leo Kim), занимавшийся драйвером wilc1000 (1,7%). Как и ранее, многие корпорации заинтересованы в развитии ядра. Работу над версией 4.5 поддержали более 200 компаний, среди которых Red Hat, Intel, AMD, Texas Instruments, Linaro, Linux Foundation, Samsung, IBM, Google. Большинство из них развивают поддержку своих устройств и связанных подсистем и инструментов, но, например, Google традиционно вносит очень много изменений в сетевую подсистему Linux.

Ядро и драйверы

Продолжился перенос сложного и плохо поддерживаемого кода, написанного на ассемблере (x86/asm) на С, начатый еще в 4.0. Ядро теперь можно собирать с параметром -fsanitize=undefined. Сам параметр появился два года назад в GCC 4.9+ и активирует отладочный режим UBSan (Undefined Behavior Sanitizer), который детектирует неопределенное поведение, присущее языкам C и C++: использование нестатических переменных до инициализации, деление на ноль, целочисленное переполнение и так далее. Компилятор обычно предполагает, что такие операции никогда не произойдут, а в случае наступления результат может быть любой и зависит от самого компилятора. Теперь компилятор обнаруживает такие ситуации, выдает «runtime error:» (можно отключить -fno-sanitize-recover) и продолжает выполнение. По умолчанию в каждой сборке ОС все библиотеки загружаются в определенные адреса, что позволяет легко реализовать атаку. Для увеличения безопасности используется ряд технологий, одна из них - случайное смещение при вызове mmap(), реализованное в виде ASLR (Address Space Layout Randomization). Впервые технология ASLR появилась в Linux в 2005 году в ядре 2.6 и выдавала для 32-битных систем 8-битное смещение (то есть 256 вариантов адресов, хотя на самом деле меньше), а для x64 - смещение уже 28-битное. Для x64 вариантов вполне достаточно, а вот для 32-битных систем, среди которых Android, этого на сегодня явно мало. Уже известны эксплоиты, умеющие подбирать адрес. В результате поиска решения проблемы написан патч, позволяющий устанавливать большую хаотичность для ASLR, через /proc/sys/vm/mmap_rnd_bits и /proc/sys/vm/mmap_rnd_compat_bits (в системах x64 для x86-процессов). Для каждой архитектуры указываются минимальные и максимальные значения с учетом доступного адресного пространства. Для x86 значение может находиться в диапазоне от 8 до 16 бит или 28–32 (для x64-версии). Параметры по умолчанию можно задавать при сборке ядра.
Настройка ASLR в новом ядре Расширены возможности DRM-драйвера для видеокарт NVIDIA (Nouveau) и Intel (поддержка будущего поколения чипов Kaby Lake), добавлена поддержка новых звуковых карт, USB-контроллеров, криптоускорителей. Производители графических карт Intel и NVIDIA уже давно отказались от использования режима UMS (Userspace Mode Setting) в своих open source драйверах в пользу KMS (Kernel Mode Setting), теперь пришла очередь драйвера ATI Radeon, в котором убран код режима UMS. С 3.9 было возможно его включать параметром DRM_RADEON_UMS или установкой radeon.modeset=0 в GRUB. Теперь остался только KMS (Kernel Mode Setting). Это нужно учитывать, если необходимо использовать старые драйверы или режим UMS (UMS иногда показывает большую производительность). В драйвер AMDGPU добавлена экспериментальная поддержка технологии динамического управления питанием PowerPlay, позволяющая повысить производительность GPU для GPU Tonga и Fiji и интегрированных Carrizo и Stoney. В режиме PowerPlay GPU запускается в режиме низкого энергопотребления, но в случае возрастания нагрузки на графическую подсистему автоматически увеличивает частоту. По умолчанию PowerPlay отключен, для включения следует передать ядру параметр amdgpu.powerplay=1 . Новая версия Media controller API расширяет поддержку устройств Video4Linux и позволяет использовать функциональность мультимедиаконтроллера в других подсистемах, таких как DVB, ALSA и IIO. В KVM (Kernel-Based Virtual Machine) много сделано для поддержки архитектуры s390 (теперь она может использовать до 248 vCPU), ARM/ARM64 и улучшения работы x86 в Hyper-V.

Установка ядра 4.5 в Ubuntu

Самый простой способ познакомиться с новым ядром - использовать сборку от Ubuntu Kernel Team. После всестороннего тестирования новое ядро попадает в ppa:canonical-kernel-team/ppa , но обычно на это уходит время. $ wget -с http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.5-wily/linux-headers-4.5.0-040500-generic_4.5.0-040500.201603140130_amd64.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.5-wily/linux-headers-4.5.0-040500_4.5.0-040500.201603140130_all.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.5-wily/linux-image-4.5.0-040500-generic_4.5.0-040500.201603140130_amd64.deb $ sudo dpkg -i linux*.deb После перезагрузки можем работать.

Поддержка ARM

ARM-компьютеры используются как мини-серверы под определенные задачи или в качестве контроллеров автоматизации, что делает их очень популярными и востребованными. ARM-сообщество Linux за последние пять лет превратилось в одно из наиболее активных, проведя колоссальную работу по поддержке 32-разрядных ARM-платформ, занимающих серьезную долю рынка, и эта работа в общем завершилась к выходу ветки 4.5. Ранее для каждого ARM-устройства необходимо было собрать собственное ядро, обеспечивающее поддержку только определенных устройств. Но проблема в том, что устройства становились сложнее, появилась возможность изменения конфигурации, да и сами пользователи на ARM-устройствах хотели использовать без лишних телодвижений обычные дистрибутивы. Но в итоге мы имели несколько сотен вариантов сборки ядра, что очень затрудняет использование Linux. Результатом очистки и рефакторинга большого количества кода стало возможным включение в ядро кода поддержки ARMv6 и ARMv7, то есть теперь можем собрать универсальное ядро, способное загружаться на обеих системах. Здесь, наверное, нужно вспомнить и о продвигаемой в последнее время спецификации Device Tree , возникшей как часть разработок Open Firmware. Device Tree позволяет конфигурировать оборудование во время загрузки при помощи специальных dts-файлов, хранящихся в /boot/dtbs, и менять установки без пересборки ядра. Использование Device Tree становится обязательным для всех новых разработок ARM и не только устройств. Все это вместе дает уверенность, что дистрибутивы Linux в будущем можно будет спокойно запускать на любом ARM-устройстве. Параллельно Грег Кроу-Хартман (Greg Kroah-Hartman) из Linux Foundation выпустил патч, реализующий подобную возможность для ранних версий ядра. В arch/arm64 найдем код, обеспечивающий поддержку новой 64-битной архитектуры ARM (ARMv8). Добавлены новые функции для всех популярных архитектур ARM - Allwinner, Amlogic, Samsung, Qualcomm и поддержка новых ARM-плат различных разработчиков.

Системные сервисы

Для доступа к данным прошивок UEFI (Unified Extensible Firmware Interface) в Linux используется специальная псевдофайловая система efivars (настраивается EFIVAR_FS), которая монтируется в /sys/firmware/efi/efivars . В некоторых реализациях при выполнении команды rm -rf /* удалялось содержимое и этого каталога, что приводило к разрушению прошивки. Компании - разработчики устройств не считают это серьезным недостатком, ведь ситуация, конечно, не самая распространенная, да и вряд ли какому-то пользователю придет в голову это проверить. Тем не менее проблема есть, и писатели вирусов вполне реально могут воспользоваться такой возможностью. Теперь в ядре 4.5 добавлена специальная защита каталога /sys/firmware/efi/efivars , не позволяющая удалять файлы внутри.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «сайт», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score!

Спрашивается, почему бы не научиться делать то же самое и с ядром Linux? Причины собирать ядро Linux из исходников, в общем то, те же — получение самой свежей версии ядра, срочное применение security-патчей, оптимизация под конкретные задачи и конкретное железо, а также желание принятие участие в разработке ядра, пусть даже в роли QA.

Важно! Следование инструкциям из этого поста может привести к потере ваших данных. Делайте бэкапы и помните, что делаете вы все исключительно на свой страх и риск. Все описанное ниже было проверено на 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 =""

После правки говорим:

sudo update-grub

В результате перед загрузкой системы в течение 10 секунд будет предлагаться выбрать ядро, с которым вы хотите загрузиться. Очень удобно, если вы что-то напутали с конфигурацией ядра и хотите загрузиться с предыдущей версией!

Ставим зависимости

Нам понадобятся как минимум следующие пакеты:

sudo apt-get install git gcc make bc fakeroot dpkg-dev \
libncurses5-dev libssl-dev

На многих системах все они, впрочем, уже будут присутствовать.

Получаем исходники

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 .

Так или иначе, теперь у вас есть исходники.

Собираем и устанавливаем ядро

Выбираем опции, с которыми будет собрано ядро:

make menuconfig

В случае необходимости меняем настройки, жмем Save, затем Exit. В результате будет создан файл .config , содержащий выбранные нами параметры.

При обновлении ядра (вы же по-любому уже используете какое-то ядро?) удобно взять конфиг текущего ядра, и выставить новым опциям значения по умолчанию:

zcat / proc/ config.gz > ./ .config
make olddefconfig

Наконец, собираем:

make -j4 bindeb-pkg LOCALVERSION =-custom

Собирается ядро довольно долго. На моем ноутбуке сборка заняла 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 обладает минимальными возможностями и поддержкой оборудования, но при необходимости мы можем расширить возможности ядра с помощью kernel modules (модулей ядра) . Для чего может понадобиться сборка или пересборка собственного ядра? Например для включения/отключения каких-либо новых возможностей, или обновление старого ядра на более новое с поддержкой новых возможностей, или просто для опытов как в нашем примере.

Получение исходников ядра и подготовка к конфигурированию

Можно несколькими путями получить исходники :

    1. Получить оригинальные архивы кода с The Linux Kernel Archives , в виде gzip или bzip2 архивов, с помощью команды:
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.1.tar.bz2 cp linux-2.6.36.1.tar.bz2 /usr/src/
  1. Получить исходники из репозиториев дистрибутивов (например: , CentOS i386) в виде бинарного пакета deb или rpm (src.rpm) с патчами от производителя дистрибутива. Например: kernel-server:/tmp/123# apt-cache search source | grep linux ketchup - update utility for linux-kernel sources linux-patch-grsecurity2 - grsecurity kernel patch - new major upstream version linux-wlan-ng-source - linux-wlan-ng driver linuxdoc-tools - convert LinuxDoc SGML source into other formats linux-patch-lustre - Linux kernel patch for the Lustre Filesystem libcorelinux-dev - Foundation Classes, Design Patterns, IPC and Threads libcorelinux-doc - Foundation Classes, Design Patterns, IPC and Threads libcorelinux-examples - Foundation Classes, Design Patterns, IPC and Threads libcorelinuxc2a - Foundation Classes, Design Patterns, IPC and Threads linux-patch-openswan - IPSEC Linux kernel support for Openswan selinux-policy-src - Source of the SELinux reference policy for customization user-mode-linux-doc - User-mode Linux (Documentation) linux-patch-xenomai - Linux kernel patches for Xenomai linux-patch-debian-2.6.26 - Debian patches to version 2.6.26 of the Linux kernel linux-source-2.6.26 - Linux kernel source for version 2.6.26 with Debian patches linux-tree-2.6.26 - Linux kernel source tree for building Debian kernel images Print-server:~# apt-get install linux-source-2.6.26 Чтение списков пакетов... Готово Построение дерева зависимостей Чтение информации о состоянии... Готово Будут установлены следующие дополнительные пакеты: binutils bzip2 cpp cpp-4.3 gcc gcc-4.3 libc6-dev libgmp3c2 libgomp1 libmpfr1ldbl linux-libc-dev make Предлагаемые пакеты: binutils-doc bzip2-doc cpp-doc gcc-4.3-locales gcc-multilib manpages-dev autoconf automake1.9 libtool flex bison gdb gcc-doc gcc-4.3-multilib libmudflap0-4.3-dev gcc-4.3-doc libgcc1-dbg libgomp1-dbg libmudflap0-dbg glibc-doc libncurses-dev ncurses-dev kernel-package libqt3-mt-dev make-doc НОВЫЕ пакеты, которые будут установлены: binutils bzip2 cpp cpp-4.3 gcc gcc-4.3 libc6-dev libgmp3c2 libgomp1 libmpfr1ldbl linux-libc-dev linux-source-2.6.26 make обновлено 0, установлено 13 новых пакетов, для удаления отмечено 0 пакетов, и 5 пакетов не обновлено. Необходимо скачать 50,2MB/63,2MB архивов. После данной операции, объём занятого дискового пространства возрастёт на 89,4MB. Хотите продолжить [Д/н]? y Получено:1 http://ftp.debian.org lenny/main linux-libc-dev 2.6.26-26 Получено:2 http://ftp.debian.org lenny/main linux-source-2.6.26 2.6.26-26 Получено 50,2MБ за 1min49s (460kБ/c) Выбор ранее не выбранного пакета binutils. (Чтение базы данных... на данный момент установлено 16621 файлов и каталогов.) Распаковывается пакет binutils (из файла.../binutils_2.18.1~cvs20080103-7_i386.deb)... Выбор ранее не выбранного пакета bzip2. ..... Распаковывается пакет make (из файла.../archives/make_3.81-5_i386.deb)... Обрабатываются триггеры для man-db ... Настраивается пакет binutils (2.18.1~cvs20080103-7) ... ..... Настраивается пакет linux-source-2.6.26 (2.6.26-26) ... Настраивается пакет make (3.81-5) ... kernel-server:~# ls /usr/src/ linux-source-2.6.26.tar.bz2

Хочу отметить, что имя архива с исходниками или пакета, имеет примерно следующий вид: linux-source-2.6.26 либо kernel-source-2.6.18. Из листинга второго примера, видно что при установке исходников из репозитория, apt нам предлагает установить и остальные сопутствующие пакеты, без которых ядро собрать не получиться.

Итак. После получения исходников одним из вышеуказанных путей (копировании архива (в первом случае) и установки пакета (во втором случае)), мы получаем в каталоге /usr/src/ - архив с именем, аналогичным linux-source-2.6.26.tar.bz2 . Далее нам необходимо распаковать дынный архив командой: tar -xjf linux.tar.bz2 . В результате, получаем дерево каталогов исходников ядра, расположенные в каталоге /usr/src/linux-2.6.36.1/. Так же рекомендуется создать символьную ссылку /usr/src/linux на вышеуказанный каталог:

Kernel-server:~# cd /usr/src/ kernel-server:/usr/src# ln -s linux-2.6.36.1 linux kernel-server:/usr/src# ls -l lin* lrwxrwxrwx 1 root src 14 Дек 3 16:31 linux -> linux-2.6.36.1 -rw-r--r-- 1 root src 70236745 Дек 3 15:57 linux-2.6.36.1.tar.bz2

Прежде чем приступать к попытке сборки и конфигурированию, необходимо просмотреть файл Changes , расположенный в каталоге Documentation. Он, среди прочего, содержит список пакетов, необходимых для сборки ядра , с указанием номеров версий. Убедитесь, что эти пакеты установлены (если установка исходников производилась с помощью пакетного менеджера, то скорее всего нужные пакеты уже установлены).

В распакованном дереве подкаталогов содержится файл Makefile . make-файл содержит различные цели сборки для конфигурирования опций ядра, сборки ядра и его модулей, установки модулей и сборки пакетов RPM или deb. Наиболее свежие версии исходников ядра позволяют использовать make help для получения краткой справки для каждой цели. В более старых системах было необходимо обращаться к документации или просматривать make-файл. Ниже показана часть вывода make help:

Kernel-server:/usr/src/linux-2.6.36.1# make help Cleaning targets: clean - Remove most generated files but keep the config and enough build support to build external modules mrproper - Remove all generated files + config + various backup files distclean - mrproper + remove editor backup and patch files Configuration targets: config - Update current config utilising a line-oriented program nconfig - Update current config utilising a ncurses menu based program menuconfig - Update current config utilising a menu based program xconfig - Update current config utilising a QT based front-end gconfig - Update current config utilising a GTK based front-end oldconfig - Update current config utilising a provided .config as base .......

Далее, если по каким либо причинам на ядро необходимо наложить патч, то его следует скачать заранее и положить в каталог /usr/src . Если патчить ядро не нужно, можно смело переходить к конфигурированию. Патчится ядро следующим образом:

Kernel-server:/usr/src/linux-2.6.36# gzip -cd ../patch-2.6.xx.gz | patch -p1 #или Print-server:/usr/src/linux-2.6.36# bzip2 -dc ../patch-2.6.xx.bz2 | patch -p1

Конфигурирование

Текущая конфигурация ядра хранится в файле .config . Данный файл формируется при помощи одной из конфигурационных целей (цель - это, говоря простым языком, команда выполняемая в виде make цель ):

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

cloneconfig

Копирование настроек текущего ядра в файл.config. Данная цель устарела и в новых ядрах заменена . (удобно для добавления новых функция текущего ядра)

Цель menuconfig использует программу с меню-интерфейсом, построенную на базе ncurses, для создания или обновления файла.config. Вы должны только ответить на вопросы для элементов, которые хотите изменить. Этот подход заменил старую цель config. Выполняется в окне терминала удаленно или локально.

Цель nconfig использует программу с меню-интерфейсом, построенную на базе ncurses, для создания или обновления файла.config. Данная версия основана на , но имеет более современный внешний вид. Добавлена после релиза Linux-ядра 2.6.35. Вы должны только ответить на вопросы для элементов, которые хотите изменить. Выполняется в окне терминала удаленно или локально.

Цель xconfig использует систему графического меню, основанную на QT front-end, используемом в KDE desktop.

Цель gconfig использует систему графического меню, основанную на GTK front-end, используемом в GNOME desktop.

oldconfig

Цель oldconfig позволяет создать конфигурацию с использованием существующего файла.config, созданного ранее или взятого из другой системы. Например, вы можете скопировать конфигурационный файл для вашей системы из /lib/modules/$(uname -r)/build/.config в /usr/src/linux. Сделав это, можно использовать одну из целей меню конфигурации, чтобы при необходимости внести изменения. Так же при выполнении данной команды, если в новом ядре добавлено много новых возможностей - будет задано много вопросов по настройке новых параметров. (удобно для добавления новых функция текущего ядра)

Повторяю, что список всех целей команд можно увидеть, введя make help. Итак, начнем конфигурирование. Самая удобная для консоли, имхо - .

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

Kernel-server:/usr/src/linux-2.6.36.1# make menuconfig *** Unable to find the ncurses libraries or the *** required header files. *** "make menuconfig" requires the ncurses libraries. *** *** Install ncurses (ncurses-devel) and try again. *** make: *** Ошибка 1 make: *** Ошибка 2

Чего-то не хватает, подумал Штирлиц (С)... Наверно пакета,содержащего имя ncurses и раз уж это libraries, то скорее всего, пакет начинается на lib. Я полез в репозиторий:

Kernel-server:/usr/src/linux-2.6.36.1# apt-cache search ncurses | grep ^lib libcunit1-ncurses-dev - Unit Testing Library for C (ncurses) -- development files libcunit1-ncurses - Unit Testing Library for C (ncurses) libncurses-gst - Ncurses bindings for GNU Smalltalk libkaya-ncurses-dev - Ncurses binding for kaya libkaya-ncursesw-dev - Ncurses binding for kaya libcurses-perl - Curses interface for Perl libcurses-widgets-perl - Curses widget interface for Perl libruby-extras - a bundle of additional libraries for Ruby libruby1.8-extras - a bundle of additional libraries for Ruby 1.8 libtexttools-dev - Ada and C++ library for writing console applications libtexttools2.0.5 - Ada and C++ library for writing console applications libncurses-ruby1.8 - ruby Extension for the ncurses C library libncurses-ruby1.9 - ruby Extension for the ncurses C library libncurses-ruby - ruby Extension for the ncurses C library lib64ncurses5-dev - developer"s libraries for ncurses (64-bit) lib64ncurses5 - shared libraries for terminal handling (64-bit) libncurses5-dbg - debugging/profiling libraries for ncurses libncurses5-dev - developer"s libraries and docs for ncurses libncursesw5-dbg - debugging/profiling libraries for ncurses libncursesw5-dev - developer"s libraries for ncursesw libcurses-ocaml-dev - OCaml bindings for the ncurses library libcurses-ocaml - OCaml bindings for the ncurses library libggi-target-terminfo - General Graphics Interface TermInfo display target libncurses5 - разделяемые библиотеки для управления терминалом libncursesw5 - библиотеки для управления терминалом (поддержка двухбайтовых символов)

Эта строка: libncurses5-dev - developer"s libraries and docs for ncurses мне показалась нужной. Давайте установим:

Kernel-server:/usr/src/linux-2.6.36.1# apt-get install libncurses5-dev Чтение списков пакетов... Готово Построение дерева зависимостей Чтение информации о состоянии... Готово НОВЫЕ пакеты, которые будут установлены: libncurses5-dev обновлено 0, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 5 пакетов не обновлено. Необходимо скачать 1546kБ архивов. После данной операции, объём занятого дискового пространства возрастёт на 6599kB. Получено:1 http://ftp.debian.org lenny/main libncurses5-dev 5.7+20081213-1 Получено 1546kБ за 4s (344kБ/c) Выбор ранее не выбранного пакета libncurses5-dev. (Чтение базы данных... на данный момент установлено 18098 файлов и каталогов.) Распаковывается пакет libncurses5-dev (из файла.../libncurses5-dev_5.7+20081213-1_i386.deb)... Обрабатываются триггеры для man-db ... Настраивается пакет libncurses5-dev (5.7+20081213-1) ...

Готово, пробуем :

Ура! Мы видим заветное меню конфигурирования ядра. Ниже показаны различные опции, позволяющие включать компоненты в ядро или создавать модули. Когда опция подсвечена, при помощи клавиши пробела можно перемещаться между возможными вариантами для данного компонента. Чтобы активировать опцию, нажмите y , чтобы отключить -- n , чтобы создать, если это возможно, модуль, нажмите m . Выход из меню: Esc Esc.

  • [*] Компонент будет включен в ядро.
  • Компонент не будет включен в ядро.
  • [M] Компонент будет оформлен в виде модуля.
  • < > Компонент не будет включен в ядро, но может быть оформлен в виде модуля.

Ниже приведу описание основных разделов конфигурирования сменю (со временем будет пополняться):

Раздел Пареметр Описание
General setup Этот раздел позволяет добавить идентификационную строку к вашему ядру, а также ряд атрибутов, которые не имеют отношения к каким-либо разделам, но тем не менее должны быть описаны.
Enable loadable module support Этот раздел содержит опции, определяющие, будет ли ваше ядро поддерживать модули и будут ли они подгружаться и выгружаться автоматически. Опцию "Enable loadable module support" следует включить.
Processor type and features Этот раздел содержит специфичные для данного типа процессора конфигурационные опции. Здесь вы можете выбрать процессор и семейство процессора, которые будут поддерживаться вашим ядром. Вы можете включать или отключать поддержку ядром различных возможностей, предоставляемых данным процессором. Убедитесь, что вы включили поддержку многопроцессорных систем (symmetric multi-processing support), если в вашем системе установлено более одного процессора или процессор поддерживает технологию hyperthreading. Кроме того, для получения большей производительности графической подсистемы в системах с AGP или PCI видеокартами следует включить поддержку MTRR.
Power management options В этом разделе помещены опции, касающиеся управления питанием. Особенно они важны для ноутбуков. Кроме контроля состояния питания, вы сможете найти там средства для контроля и мониторинга таких параметров как температура или состояние охлаждающего вентилятора.
Bus options (PCI etc.) Этот раздел содержит опции для компьютерных шин, поддерживаемых вашей системой, таких как PCI, PCI Express и PC Card. Здесь вы можете включить поддержку файловой системы /proc/pci, которой можно пользоваться вместе с обычно используемой командой lspci.
Executable file formats / Emulations Этот раздел содержит опции, касающиеся поддержки различных форматов бинарных файлов. Следует включить поддержку "ELF binary". Кроме того, можно включить поддержку DOS binaries для запуска их под DOSEMU, также как и других поддерживаемых соответствующими wrapper"ами бинарных файлов, таких как Java™, Python, Emacs-Lisp и т.д. Наконец, для 64-битных систем, поддерживающих 32-битную эмуляцию, вы, возможно, захотите включить поддержку 32-битных приложений.
Networking Секция, касающаяся настроек сети, довольно велика. Здесь вы можете включить базовую поддержку сокетов, сетей TCP/IP, фильтрацию, маршрутизацию и bridging сетевых пакетов, а также поддержку различных протоколов, таких как IPV6, IPX, Appletalk и X.25. Кроме того, вы можете включить поддержку wireless, infrared и amateur radio.
Device drivers Этот раздел также очень велик. Здесь вы можете включить поддержку большого числа аппаратных устройств, включая IDE/ATAPI или SCSI диски, или flash-диски. Включите DMA для ваших IDE устройств; иначе они будут работать в более медленной PIO-моде. Если вы хотите иметь поддержку multiple devices, таких как RAID или LVM, соответствующие опции также надо включить. Здесь вы также можете включить поддержку параллельного порта для работы с принтером через этот интерфейс. Здесь происходит конфигурирование широкого набора поддерживаемых сетевых устройств для различных сетевых протоколов, которые мы конфигурировали ранее. Кроме того, здесь вы найдете опции поддержки устройств аудио- и видео-захвата, устройств USB и IEEE 1384 (Firewire), а также различного рода устройств аппаратного мониторинга. В разделе управления символьными устройствами (Character Devices) вы, возможно, захотите включить поддержку печати через параллельный порт и поддержку direct rendering.
Firmware drivers Этот раздел содержит несколько опций, относящихся к установке и обновлению BIOS, таких как использование функций Dell System Management на некоторых системах производства компании Dell.
File systems Этот раздел предназначен для конфигурирования файловых систем, поддержку которых вы хотите иметь в вашем ядре, скомпилированных в виде модулей или нет. Также вы сможете найти здесь файловые системы для съемных дисковых устройств (дискеты, CD и DVD устройства), а также сетевых файловых систем, таких как NFS, SMB или CIFS. Поддержка различных типов разделов и национальных кодировок Native Language Support также располагаются в этом разделе.
Kernel hacking Этот раздел позволяет включать режим отладки ядра и выбирать, какие дополнительные функции будут включены.
Security options Этот раздел предназначен для конфигурирования опций защиты, а также включения и конфигурирования SELinux (Security Enhanced Linux).
Cryptographic options В это разделе можно сконфигурировать поддержку различных алгоритмов шифрования, таких как MD4, DES и SHA256.
Library routines Здесь вы можете указать ряд алгоритмов вычисления контрольных сумм (CRC), которые будут включены в ядро или собраны как модули.

Я привел очень краткое описание разделов конфигурирования ядра. Конкретно по выбору настроек, я наверно, сделаю отдельный пост, ибо текущий вырос до огромных размеров. Самое лучшее описание настроек make menuconfig я нашел тут Gentoo Handbook . От себя скажу, что логичным будет выполнить make oldconfig (тем самым скопировав текущий.config установленной ОС), а потом запустить make menuconfig и отключить все ненужные функции (допустим я отключил поддержку WiFi, ненужных мне файловых систем jfs и т.п.). И в общем, я сторонник такого мнения, что заниматься оптимизацией ядра необходимо в очень крайних случаях, когда производительность ОС упирается в возможности железа. Соответственно, уменьшив размер ядра (отключив ненужные модули, включив их в состав ядра + отключив ненужные возможности), можно прибавить в производительности 1-2%. А на современных серверах, думаю это (переконфигурирование ядра) не особо актуально.

Сборка Ядра

Теперь, когда мы сконфигурировали ядро, мы готовы к его сборке. Если вы не знаете, каково состояние дерева для сборки, прежде чем приступать к конфигурированию нового ядра выполните make clean . Для более полной очистки выполните make mrproper (при этом - make mrproper - будет удален файл.config, а также некоторые другие файлы, используемые в процессе сборки).

В ходе пробы конфигурирования, желательно дать новому ядру специальное название, которое позволит вам легко его идентифицировать. Чтобы сделать это, необходимо установить значение Local version и активировать опцию Automatically append version information to the version string в соответствующей строке раздела General setup.

В принципе, для сборки ядра не требуются полномочия root, несмотря на то, что для установки нового ядра эти полномочия необходимы.

Чтобы начать сборку ядра 2.6, необходимо выполнить make .

Чтобы начать сборку ядра 2.4, необходимо выполнить 3 команды:
make dep
make bzImage
make modules
Первая создает файлы необходимых зависимостей. Вторая собирает ядро. И последняя собирает модули.

Установка нового ядра

После окончания сборки ядра, его необходимо установить. Перед установкой, необходимо выполнить make modules_install для установки модулей ядра в новый подкаталог /lib/modules. После установки модулей, необходимо выполнить make install для установки нового ядра и стартового RAM-диска (initial RAM disk) в каталог /boot и обновления конфигурации загрузчика.

Хочу обратить внимание, что в процессе сборки автоматически создается необходимый стартовый RAM-диск (initial RAM disk или initrd). Если у вас возникнет необходимость создать его вручную, это можно сделать при помощи команды mkinitrd .

После выполнения make install должен обновиться конфигурационный файл загрузчика. Но у меня он почему-то обновился после команды update-grub .

На этом и закончу. Очень большая статья получилась. В ближайшем будущем постараюсь ее ужать.

Когда мне говорят о жесточайших тормозах Линукса по сравнению с виндой, установленной на одной и той же машине, я задаю один единственный вопрос: «У вас ядро самосборное или то раздутое до невозможности, что поставляется в дистрибутиве по умолчанию?» Обычно ответ: «Естественно, то что в дистрибутиве!»

Кроме того, при этом воспринимается с огромным удивлением, что для улучшения работы системы не мешало бы пересобрать ядро под свой конкретный компьютер, дабы отключить в нем огромное количество того, что абсолютно не нужно для вашего железа, а лишь тормозит его работу… Сразу возникает резонный вопрос, зачем же разработчики дистрибутива включили в него настолько тормозное ядро, что обычный пользователь, установивший себе этот дистрибутив, должен сам перекомпилировать его?.. И вопрос вроде бы логичен, да не совсем…

Разработчики дистрибутивов обычно включают в него такое ядро, которое могло бы без проблем распознать максимально возможное железо, как на компьютере, который покупал еще ваш дедушка, дабы в свободное от просмотра новостей по телеку порезаться в «Call of duty», так и новейшую систему, купленную для выжимания максимума из возможностей компьютера. Естественно, при этом ядро получается раздутым донельзя, и при работе жутко тормозит, ибо системе приходится каждый раз «ковыряться» в большой куче записей и драйверов внутри ядра, что не может радовать ни вас, ни ваш компьютер… А компиляция собственного ядра позволяет отключить все ненужное, оставив только необходимую функциональность… Дело в том, что при работе операционной системы Linux, ядро - единственный участок памяти, который не свопуется, поэтому вполне логично сделать его как можно меньше. Надеюсь, я научно-популярно объяснил абсолютную необходимость пересобрания ядра?..

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

Итак, как и обещал ранее, расскажу о процессе настройки и компиляции собственного ядра… Поехали!

Первое, что нам понадобится, - это собственно исходники нового ядра, под управлением которого скоро будет работать ваш Линукс. Скачать можно совершенно свободно на http://www.kernel.org . Качать необходимо последнее стабильное ядро (оно обычно первое в списке, там где написано «The latest stable version of the Linux kernel is…»). Советую брать архив tar.bz2, но всего лишь потому, что он меньше по размеру. Если вы уже собирали ядро, то вам можно будет просто докачать заплатки, то есть патчи, чтобы не качать довольно большое по объему ядро целиком… На самом деле, я рекомендую использовать полное ядро, ибо читал, что при заплаточном собирании ядра могут возникать различные проблемы, зачастую напрямую связанные с простой кривизной рук, однако, без соответствующих знаний лучше не рисковать…

Итак, ядро скачано… Задаем команду:

sudo chmod 777 /usr/src

После этого, забрасываем его (скачанный архив) в папку /usr/src. Распаковываем архив командой:

tar -jxvf xxxxx.tar.bz2

В этой команде xxxxx.tar.bz2 - это название файла архива с ядром… Как только закончится распаковка, ваши исходники будут находиться в каталоге /usr/src/xxxxx.

Прежде, чем приступить к настройке ядра, точно выяснить спецификации вашего компьютера:
1) тип процессора,
2) чипсет материнской платы,
3) тип видеокарты,
4) тип сетевой платы,
5) тип саунд-карты,
6) тип жестких дисков,
7) usb-устройства и прочее…

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

Заходим в директорию /boot, и видим там файл примерно такого названия config-2.6.24-19-generic. Он нам и нужен. Копируем его в каталог с исходниками /usr/src/xxxxx и переименовываем его в.config.

Также предварительно открываем файл Makefile, и в строчке "EXTRAVERSION=" дописываем свое название для ядра, например, EXTRAVERSION=-mykernel. Никакой другой функции эта строчка не несет, кроме, как удобства в опознании собственного ядра.

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

Есть еще вариант консольной настройки:

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

Если вы хотите, чтобы ядро работало стабильно и максимально быстро, ответственно подойдите к вопросу настройки. Внимательно читайте каждый пункт. Если чего-то не понимаете, то ищите ответы в интернете. Например, можно найти описание многих настроек и советы по оптимальному их использованию. Кстати, там же в разделе "3.4 Пример настройки ядра" имеется и несколько советов по оптимизации ядра.

После настройки выбираем пункт "Сохранить конфигурацию в новый файл", где указываем имя файла, отличного от.config, например.config_mykernel. Затем переименовываем.config в.config_old. И у вас получается два файла - .config_old и.config_mykernel. Кстати, есть возможность посмотреть различия между стандартной и вашей конфигурацией так:

diff .config .config_mykernel

Теперь копируем вашу конфигурацию.config_mykernel как.config. Т.е. у вас получится три файла конфигурации. При компиляции будет использоваться файл.config. Файлы.config_ubuntu и.config_mykernel нам помогут в будущем для новой компиляции. Это на тот случай, если новое ядро окажется неработоспособным.

Компиляцию ядра стоит делать под суперпользователем. Для чего становимся рутом и запускаем процесс сборки ядра:

sudo -s -H
make-kpkg --initrd --revision=mykernel.1 kernel_image kernel_headers

в этой строчке mykernel.1 обозначает название ядра. Можно писать все что душе угодно.

Операция компиляции занимает довольно продолжительное время, зависящее от мощности компьютера, у меня оно обычно занимало около получаса…

По окончании процесса создадутся два deb-файла с ядром, сконфигурированным конкретно под ваши нужды. Поздравляю, ядро готово.

Теперь необходимо установить собранное ядро в систему:

sudo dpkg -i linux-image-xxxxx.deb
sudo dpkg -i linux-headers-xxxxx.deb

Замените на точные названия созданных вами deb-файлов. Далее перегружаемся и видим, в меню свое ядро. Если у вас все загрузилось как положено, я думаю, вы сразу ощутите прирост производительности. Однако, если у вас установлена, например, карточка от nVidia, скорее всего на этом все и закончится… У меня, например, после запуска моей версии ядра просто был черный экран и ноль эмоций…

Исправилось это установкой проприетарных драйверов от nVidia. Есть два варианта их установки: под новое ядро (при этом графический сервер будет работать только под вашим ядром (рекомендуется, если вы не планируете работать ни в каком ядре, кроме своего) и под несколько существующих у вас ядер (в таком случае система будет грузиться как в новом, созданном вами ядре, так и в предыдущем). Но это уже совсем другая история…