Последнее ядро linux. Собираем своё собственное ядро 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: И все же, собирая ядра, надо быть осторожным. Можно обрушить систему, а делать потом восстановление информации совсем не хочется. Жаль, что носители информации регуларно падают и "падают" без помощи человека (особенно флешки), но востановить можно почти все.

Why would someone want to compile a new kernel? It is often not necessary since the default kernel shipped with Debian handles most configurations. Also, Debian often offers several alternative kernels. So you may want to check first if there is an alternative kernel image package that better corresponds to your hardware. However, it can be useful to compile a new kernel in order to:

Don’t be afraid to try compiling the kernel. It’s fun and profitable.

To compile a kernel the Debian way, you need some packages: , and a few others which are probably already installed (see for the complete list).

This method will make a .deb of your kernel source, and, if you have non-standard modules, make a synchronized dependent .deb of those too. It’s a better way to manage kernel images; will hold the kernel, the System.map, and a log of the active config file for the build.

Note that you don’t have to compile your kernel the “Debian way”; but we find that using the packaging system to manage your kernel is actually safer and easier. In fact, you can get your kernel sources right from Linus instead of , yet still use the compilation method.

Note that you’ll find complete documentation on using under . This section just contains a brief tutorial.

Hereafter, we’ll assume you have free rein over your machine and will extract your kernel source to somewhere in your home directory. We’ll also assume that your kernel version is 3.16. Make sure you are in the directory to where you want to unpack the kernel sources, extract them using and change to the directory that will have been created.

Now, you can configure your kernel. Run if X11 is installed, configured and being run; run otherwise (you’ll need installed). Take the time to read the online help and choose carefully. When in doubt, it is typically better to include the device driver (the software which manages hardware peripherals, such as Ethernet cards, SCSI controllers, and so on) you are unsure about. Be careful: other options, not related to a specific hardware, should be left at the default value if you do not understand them. Do not forget to select “Kernel module loader” in “Loadable module support” (it is not selected by default). If not included, your Debian installation will experience problems.

Clean the source tree and reset the parameters. To do that, do .

Now, compile the kernel: . The version number of “1.0” can be changed at will; this is just a version number that you will use to track your kernel builds. Likewise, you can put any word you like in place of “custom” (e.g., a host name). Kernel compilation may take quite a while, depending on the power of your machine.

Once the compilation is complete, you can install your custom kernel like any package. As root, do . The part is an optional sub-architecture, depending on what kernel options you set. will install the kernel, along with some other nice supporting files. For instance, the will be properly installed (helpful for debugging kernel problems), and will be installed, containing your current configuration set. Your new kernel package is also clever enough to automatically update your boot loader to use the new kernel. If you have created a modules package, you’ll need to install that package as well.

It is time to reboot the system: read carefully any warning that the above step may have produced, then .

For more information on Debian kernels and kernel compilation, see the Debian Linux Kernel Handbook. For more information on , read the fine documentation in .

Если помните, не так давно мы научились собирать из исходников ядро FreeBSD. Спрашивается, почему бы не научиться делать то же самое и с ядром 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-s2>/dev/null ||echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

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

sudo update-grub

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

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

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

sudoapt-get installgitgccmakebc 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.

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

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

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

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

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

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

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

make-j4 bindeb-pkg LOCALVERSION=-custom

Собирается ядро довольно долго. На моем ноутбуке сборка заняла 1 час 15 минут. Однако из этого времени бо льшая часть тратится на сборку гигантского пакета ядра с отладочными символами.

Ручная сборка и конфигурирование ядра Linux

Сборку этого пакета можно отключить, закомментировав в конфиге параметр 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-версии ядра обычным и перезагружаемся. После перезагрузки смотрим на вывод команды. Убеждаемся, что действительно загрузились с новым ядром. Если с новым ядром что-то не так, в загрузчике просто выбираем то, с которым система загружалась до этого. После загрузки со старым ядром поскорее удаляем пакеты нового ядра, и вуаля — система вернулась к прежнему состоянию.

Дополнительно после загрузки нового ядра можно прогнать на нем тесты:

sudomake kselftest
sudomake kselftest-clean

Поздравляю, теперь вы умеете собирать ядро Linux!

Заключение

Материалы по внутреннему устройству ядра Linux:

  • KernelNewbies.org, сайт для новичков в ядре Linux со своим списком рассылки, IRC-каналом, форумом, вики, и так далее;
  • LKML.org, сайт для комфортного чтения мейлинг листа разработчиков ядра Linux через браузер. Будьте внимательны, он нередко портит форматирование писем! В этом смысле архив рассылки на marc.info намного лучше;
  • Linux Cross Reference, сайт для комфортного чтения кода ядра Linux через браузер;
  • Книга Linux Kernel Development, 3rd Edition является наиболее свежей книгой по ядру Linux на английском языке (2010 год, ядро 2.6.x), есть перевод на русский язык;
  • Книга Linux-Treiber entwickeln, 4th Edition более свежая (2015 год, ядро 4.x), но написана на немецком и не имеет перевода;
  • Бесплатная книга Linux Insides за авторством Alexander Kuleshov a.k.a @0xAX выглядит наиболее доступной и актуальной, но на данный момент еще находится в процессе написания;
  • Иногда что-то полезное удается найти в Linux Kernel HTML Documentation, официальной документации из исходников ядра Linux;
  • Примеры к книге Linux Device Drivers, 3rd Edition, которые пытаются поддерживать в актуальном состоянии, плюс исходники к 4-му изданию, которое на данный момент еще пишется;

А собираете ли вы ядро из исходников, и если да, то зачем? 🙂

Дополнение: Вас также может заинтересовать статья Скандальная правда об отладке ядерного кода в Linux.

Метки: Linux, Ring0.

Компиляция ядра linux


Многие считают это бессмысленной тратой времени для того, чтобы показать себя умным и продвинутым «линуксоидом». На самом деле компиляция ядра — это очень важное дело. Допустим, вы купили новый ноутбук, в котором у вас не работает веб-камера. Ваши действия? Вы заглядываете в поисковик и ищите решение проблемы по этому вопросу. Довольно часто может оказаться, что ваша веб-камера работает на ядре более новой версии, чем у вас. Если вы не знаете, какая у вас версия — введите в терминале uname -r, в результате вы получите версию ядра (например, linux-2.6.31-10). Также компиляция ядра широко применяется для увеличения производительности: дело в том, что по умолчанию в дистрибутивах ядра компилируются «для всех», из-за этого в нем включено огромное количество драйверов, которые вам могут не понадобиться. Так что если вы хорошо знаете используемое оборудование, то можете отключить ненужные драйвера на этапе конфигурирования. Также есть возможность включить поддержку более 4х Гигабайт оперативной памяти, не меняя разрядность системы.

Как собрать ядро linux? Сборка ядра Linux

Итак, если вам всё же необходимо иметь своё ядро, приступим к компиляции!


Первое, что необходимо сделать — получить исходный код нужной версии ядра. Обычно необходимо получить самую новую стабильную версию. Все официальные версии ядра доступны на kernel.org.

Если у вас уже установлен X сервер (домашний компьютер), то вы можете перейти на сайт в вашем любимом браузере и скачать нужную версию в архиве tar.gz (сжатый gzip). Если же вы работаете в консоли (например ещё не устанавливали X сервер или конфигурируете сервер), можете воспользоваться текстовым браузером (например elinks).

Также можно воспользоваться стандартным менеджером загрузок wget:


tar -zxvf путь_до_архива

Конфигурация ядра.

Компиляция.
make && make install
Ждем от 20 минут до нескольких часов (в зависимости от мощности компьютера). Ядро установлено. Чтобы оно появилось в списке grub(2), введите (от суперпользователя)
update-grub


Архив статей:
Май 2017
Март 2017
Апрель 2016
Март 2016
Октябрь 2013
Сентябрь 2013
Май 2013
Март 2013
Ноябрь 2012
Июль 2012
Июнь 2012
Апрель 2012
Март 2012
Февраль 2012
Апрель 2011
Март 2011
Февраль 2011
Январь 2011
Декабрь 2010
Ноябрь 2010
Октябрь 2010
Сентябрь 2010
Август 2010
Июль 2010
Июнь 2010
Май 2010
Апрель 2010
Март 2010

Случайные:

Виртуальный планетарий Stellarium: обзор новых возможностей

BOINC: вычисления для науки

Gambas: Разработка на Basic в linux

Последовательные Диаграммы SSH 2.0

Linuxnow.ru: Планы на будущее

Внезапно стало мало свободного места на диске? Возможно, проблема в логах.

Коллеги: все
Linux для всех

Наши баннеры:


Установить баннер

Конфигурирование ядра Linux

Проверка пакетов исходных текстов

Для рекомпиляции ядра необходимы его исходные тексты.

Блог о системном администрировании. Статьи о Linux, Windows, СХД NetApp и виртуализации.

В Red Hat исходные тексты ядра размещаются в одном rpm-пакете, но по умолчанию не устанавливаются. Имя этого пакета:

kernel-source-2.4.2-2.1386.rpm

Кроме исходных текстов, для рекомпиляции ядра нужен компилятор, состоящий из двух компонентов:

утилита make;

собственно компилятор языка С — gсс или egcs.

Создание резервной копии текущего ядра проводится в три этапа:

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

2. Создание резервной копии самого ядра как заведомо работающего средства запуска системы.

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

Создание резервной копии исходных текстов производится путем копирования каталога с исходными кодами ядра на диск. Восстановление производится копированием в обратном направлении.

При рекомпиляции ядра прежнее ядро записывается в файл с расширением.old. Однако эту копию ядра пока нельзя использовать для загрузки системы. Этим объясняется необходимость выполнения перечисленных выше операций.

Загрузчик операционной системы типа LILO, обычно применяемый для загрузки Linux, конфигурируется установкой ссылки на файл ядра в корневой файловой системе.

После создания резервной копии ядра в файл /etc/lilo.conf нужно добавить еще одну запись, позволяющую запустить Linux с прежним ядром:

открыть файл /etc/lilo. conf в текстовом редакторе;

создать копию всего раздела;

поменять в копии две позиции:

имя файла ядра заменить на имя его резервной копии (вместе с расширением);

заменить метку раздела чем-либо, наподобие linux. original (исходный Linux) или linux-previous (прежний Linux).

строки, начинающиеся с initrd, заменить на соответствующие резервные, например, initrd-2 .4.2-2. orig. Img;

записать изменения в файл /etc/lilo. conf.

ввести команду /sbin/lilo, чтобы ввести новую запись в загрузчик. При выполнении команды lilo на экран выводятся метки образов, вводимых в загрузчик операционной системы.

При следующей перезагрузке системы на экране появится идентификатор нового ядра в графической подсказке загрузчика LILO.

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

При конфигурировании решается, какие функции включать в ядро, какие не включать и т.д. Можно выбирать между конфигурированием старого ядра и установкой/конфигурирование нового. Например, используя Red Hat Linux 7.1, можно изменить конфигурацию существующего ядра 2.4.2, задав новые параметры. Можно также загрузить и установить новое ядро версии 2.4.4. Несмотря на то, что детали конфигурирования в этих двух случаях различны, используемые утилиты и сама методика конфигурирования совпадают.

В Linux есть три отдельные конфигурационные утилиты, каждая из которых имеет свои особенности.

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

Утилита с меню текстового режима. Многоуровневое меню этой утилиты позволяет устанавливать и переустанавливать параметры ядра в любом порядке.

Утилита с графическим интерфейсом. Это наиболее привлекательная утилита, но она запускается только в графической системе X Window.

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

Параметры ядра

Просматривая параметры в любой конфигурационной программе (командной строки, с текстовым или графическим интерфейсом), необходимо четко представлять влияние этих параметров на работу ядра.

Идентификация параметров в каждой программе своя, но во всех трех представлен один и тот же их набор. Параметры подразделяются на две основные группы:

модульные;

немодульные.

Если программный блок, соответствующий данному параметру, не загружается как модуль ядра, он может быть одним из двух:

[*] составной частью ядра;

Несоставной частью ядра.

Символы в квадратных скобках (вместе со скобками) соответствуют отметкам параметров в меню конфигурационных программ (кроме утилиты командной строки).

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

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

<*> включается в ядро, так что нет надобности загружать его позже в виде модуля:

<М> Включается как модуль, но не как составная часть ядра. Блок можно устанавливать или удалять из ядра в любой момент.

Иногда значение какого-либо параметра не удается поменять до установки другого параметра. Например, установить поддержку определенного устройства SCSI можно только после общего разрешения поддержки этих устройств.

Когда в системе будут установлены необходимые средства (утилита make и компилятор gсс) и исходные тексты, можно запустить одну из конфигурационных утилит и приступить к конфигурированию ядра.

Конфигуратор с графическим интерфейсом

Запуск конфигурационной утилиты с графическим интерфейсом выполняется в следующей последовательности.

Запустить систему X Windows (с любыми графической средой и рабочим столом).

Открыть окно эмулятора терминала (окно командной строки).

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

Рис. 8. Утилита конфигурирования ядра с графическим интерфейсом: меню-кнопки установки значений параметров

Графическая утилита не слишком отличается от утилиты menuconf ig. Здесь параметры также разбиты на категории; после щелчка на определенной категории открывается диалоговое окно со списком параметров, каждому из которых можно установить значение, определяющее, что соответствующее средство должно задействоваться как составляющая часть ядра, как загружаемый модуль или не задействоваться вообще.

Такое диалоговое окно показано на рис.

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

Ядро 2.4.2 в Red Hat Linux по умолчанию поддерживает симметричную мультипроцессорную архитектуру. Необходимо установить для соответствующей опции значение n, если в вашем компьютере всего один процессор.

Справа от каждого параметра находится кнопка Help (Справка).

Большое преимущество графической конфигурационной утилиты (особенно его оценят те, кто впервые конфигурирует ядро) – отражение в меню зависимости между различными параметрами. Например, в разделе Block Devices (Блочные устройства) нельзя установить поддержку систем RAID, встроенную в ядро, пока не будет включен параметр Multiple Device Driver Support (Поддержка драйверов для нескольких устройств).

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

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

Save and Exit (Выход с сохранением). Создание файла конфигурации ядра и завершение работы утилиты.

Quit Without Saving (Выход без сохранения). Завершение работы утилиты без создания файла конфигурации ядра.

Без создания файла конфигурации ядра при помощи одной из перечисленных утилит рекомпиляция ядра невозможна.

Load Configuration From File (Загрузка конфигурации). Загрузка конфигурационного файла, созданного ранее.

Store Configuration To File (Запись конфигурации). Запись конфигурационных данных в файл с указанным именем (для дальнейшего использования или передачи коллеге). Это не влияет на необходимость выполнения команды Save and Exit, создающей конфигурационный файл для рекомпиляции ядра.

Компиляция и запуск нового ядра

После завершения конфигурирования нужно проверить наличие нового конфигурационного файла (.config), расположенного в каталоге /usr/src/linux-2 .4.2 (в зависимости от номера версии). Если конфигурационный файл.config на месте, можно использовать команду make для рекомпиляции ядра.

Обычно рекомпиляция ядра длится от 15 минут до нескольких часов. Это зависит от скорости процессора, объема оперативной памяти и ряда других факторов, поэтому все команды, вводимые при компиляции, удобно объединить в одну, через точку с запятой, чтобы они выполнялись последовательно.

Запуск процесса рекомпиляции

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

Для рекомпиляции системы введятся следующие команды.

# make dep; make clean; make bzlmage; make modules; make modules__install

Каждую команду make можно вводить отдельно, после завершения предыдущей.

После ввода этих команд на экране начнут мелькать строки с описанием каталогов, к которым обращается программа make, запуска компилятора gcс. для компиляции различных файлов исходного текста и компоновки различных блоков. Каждой из этих команд потребуется для выполнения несколько минут.

Теперь можно создать загрузочный диск для нового ядра с помощью команды

Перед выполнением этой команды следует вставить отформатированную дискету в накопитель. Готовый загрузочный диск необходимо испытать. Перезагрузите компьютер, не вынимая дискету из накопителя.

После выполнения команд компиляции ядра и возврата к командной строке создается новое ядро. Чтобы загрузить систему с новым ядром, его необходимо переместить в стандартный каталог, из которого оно будет запускаться. Это делается вводом команды

# ср /usr/src/linux-2.4.2/arch/i386/boot/bzlmage /boot/vmlinuz-2.4.2-2

В завершение, для обновления карты загрузки выполните команду lilo:

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

Тестирование нового ядра

После перемещения файла нового ядра в стандартный каталог (указанный в файле lilo. conf) систему можно перезагрузить с этим ядром.

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

Сравнение объемов старого и нового ядер. Следует проверить объем памяти, занимаемый операционной системой, введя команду free.

Установка файловой системы или попытка доступа к устройству без загрузки модуля ядра для его поддержки (если поддержка данного устройства встроена в ядро).

Использование сетевых ресурсов (например, алиасов IP), отсутствовавших в прежнем ядре.

Может понадобиться проверка временной метки файла текущего ядра. Для этого введите команду uname. Это позволяет убедиться в том, что в данный момент система работает с рекомпилированным ядром. Метка времени и даты ядра должна совпадать со временем его рекомпиляции.

Если ответ команды uname свидетельствует о том, что система загружена не с новым ядром, разберитесь с системным загрузчиком LILO. Проверьте, правильно ли указано имя загружаемого ядра в файле /etc/lilo.conf.

ПОСМОТРЕТЬ ЕЩЕ:

Компиляция и установка ядра Linux из исходников в Debian

Материал из Bryansk Linux Users Group и www.rm.pp.ru

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

  1. Примечание
  2. Способ первый. Сборка ядра в.deb пакеты
  3. Накладываем патчи
  4. Конфигурирование ядра
  5. Компиляция ядра
  6. Установка нового ядра
  7. Способ второй. "traditional" way
  8. Проблемы
  9. Ссылки

Примечание

Будет описано два способа сборки ядра. Первым будет описан вариант сборки.deb пакетов, которые могут быть установлены в Вашей или другой системе.

Второй метод, так называемый "traditional" путь.

Способ первый. Сборка ядра в.deb пакеты

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

Для начала обновим списки пакетов:

# apt-get update

Установим нужные нам пакеты:

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

Скачиваем исходники ядра

Переходим в каталог /usr/src, идем на www.kernel.org и выбираем нужную версию ядра. В данном случае будет рассмотрена версия linux-2.6.23.1.tar.bz2. Скачиваем:

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

Распакуем исходники и создадим символьную ссылку:

# tar xjf linux-2.6.23.1.tar.bz2 # rm linux (удалим предыдущий симлинк) # ln -s linux-2.6.23.1 linux # cd /usr/src/linux

Накладывание патчей

Опционально и без необходимости не делайте этого!

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

Итак, предположим вы скачали необходимый патч (для примера назовем 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.23.8 ядре, а исходники не содержали необходимой функциональности, но выпущен патч patch-2.6.23.8.bz2. Вы можете применить этот патч к исходникам ядра 2.6.23, но не 2.6.23.1 или 2.6.23.3 и т.д. Подробнее об этом можно прочитать на :

Предъисправления (препатчи) — эквивалентны альфа релизам; патчи должны быть применены к исходникам полного предыдущего релиза с 3-х значной версией (например, патч 2.6.12-rc4 может быть применен к исходникам версии 2.6.11, но не к версии 2.6.11.10.)

Это значит, если мы хотим собрать ядро 2.6.23.8, необходимо скачать исходники версии 2.6.23 (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.tar.gz) применительно во втором способе "traditonal" путь!

Применяем патч patch-2.6.23.8.bz2 к ядру 2.6.23:

# cd /usr/src # wget http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.22.8.bz2 # cd /usr/src/linux # bzip2 -dc /usr/src/patch-2.6.23.8.bz2 | patch -p1 —dry-run # bzip2 -dc /usr/src/patch-2.6.23.8.bz2 | patch -p1

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

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

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

# make menuconfig

после которой загрузится графическое меню конфигурации ядра. Выбираем в меню конфигуратора пункт "Load an Alternate Configuration File" и нажимаем "Оk". Затем (если требуется) сделайте необходимые изменения в конфигурации ядра перемещаясь по меню (подробности конфигурации ядра можно найти в www.google.com ). Когда закончите и нажмете "Exit", будет задан вопрос "Do you wish to save your new kernel configuration?", отвечаем утвердительно "Yes".

Собираем ядро Linux

Компиляция ядра

Сборка ядра выполняется всего в две команды:

# make-kpkg clean # fakeroot make-kpkg —initrd —append-to-version=-cybermind kernel_image kernel_headers

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

Процесс компиляции и сборки.deb пакетов может занят довольно продолжительное время. Все будет зависить от конфигурации ядра и возможностей Вашего процессора.

Решение проблемы с созданием initrd.img

С недавнего времени в Debian появился баг, заключающийся в том, что после установки пакетов с собранными описанным здесь способом ядрами, не создаётся соответствующий им файл /boot/initrd.img. Для исправления применительно к уже установленному ядру, придётся создать initrd.img вручную:

update-initramfs -c -k <полная-версия-ядра>

Для решения проблемы «на будущее» – закомментировать, как показано, вторую из процитированных ниже строк в файле /etc/kernel/postinst.d/initramfs-tools:

# kernel-package passes an extra arg; hack to not run under kernel-package #[ -z "$2" ] || exit 0

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

Когда удачно завершится сборка ядра, в каталоге /usr/src будут созданы два.deb пакета:

# cd /usr/src # ls -l

linux-image-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb - собственно само актуальное ядро и linux-headers-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb - заголовки ядра, необходимые для сборки других модулей (например при сборке модулей драйвера nVidia). Устанавливаем их:

# dpkg -i linux-image-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb # dpkg -i linux-headers-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb

(Эти пакеты теперь могут быть установлены на другой системе и собирать их заново уже не будет необходимости.)

Всё, установка завершена, меню загрузчика, установка нового RAM-диска и ядра будут сделаны автоматически. Остается только перезагрузиться:

Способ второй. "traditional" way

Выполняем все пункты, описанные выше ДО пункта "Компиляция ядра".

# make all # make modules_install # make install

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

Основной недостаток этого метода - если вы часто обновляете ядра, то через некоторое время их накопится большое количество и захочется удалить неиспользуемые. Чтобы это было сделать проще, можно собрать ядро и другие файлы, которые устанавливаются в систему по командам "make modules_install" и "make install" в deb-пакет (а точнее в два начиная с ядра 2.6.27) подобно первому способу, но воспользуемся здесь скриптами самого ядра:

# make all # make deb-pkg

В каталоге на уровень выше каталога исходников появятся два.deb-файла. Я собирал ядро в каталоге /usr/src/linux-2.6.27.10 и у меня в каталоге /usr/src/ появились файлы

# linux-2.6.27.10_2.6.27.10-1_amd64.deb # linux-firmware-image_2.6.27.10-1_all.deb

Ядро устанавливается командой

# dpkg -i linux-2.6.27.10_2.6.27.10-1_amd64.deb

Старые ядра можно удалять, например, из synaptic’a

Следующие шаги

Ядро собрано и установлено, но еще теперь необходимо создать RAM-диск (без которого ядро просто не загрузится) и необходимо обновить загрузчик GRUB. Для этого выполним следующее:

# depmod 2.6.23.1 # apt-get install yaird

Установим RAM-диск:

# mkinitrd.yaird -o /boot/initrd.img-2.6.23.1 2.6.23.1

Обновим легко и безболезненно загрузчик:

Всё, загрузчик и новое ядро готовы, остается только перезагрузиться:

Проблемы

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

Компиляция ядра linux

Зачем вообще самому компилировать ядро?
Пожалуй, главный вопрос, который задают по поводу компиляции ядра: «А зачем мне это делать?».
Многие считают это бессмысленной тратой времени для того, чтобы показать себя умным и продвинутым «линуксоидом». На самом деле компиляция ядра — это очень важное дело. Допустим, вы купили новый ноутбук, в котором у вас не работает веб-камера. Ваши действия? Вы заглядываете в поисковик и ищите решение проблемы по этому вопросу. Довольно часто может оказаться, что ваша веб-камера работает на ядре более новой версии, чем у вас. Если вы не знаете, какая у вас версия — введите в терминале uname -r, в результате вы получите версию ядра (например, linux-2.6.31-10). Также компиляция ядра широко применяется для увеличения производительности: дело в том, что по умолчанию в дистрибутивах ядра компилируются «для всех», из-за этого в нем включено огромное количество драйверов, которые вам могут не понадобиться. Так что если вы хорошо знаете используемое оборудование, то можете отключить ненужные драйвера на этапе конфигурирования.

Также есть возможность включить поддержку более 4х Гигабайт оперативной памяти, не меняя разрядность системы. Итак, если вам всё же необходимо иметь своё ядро, приступим к компиляции!

Получение исходного кода ядра.
Первое, что необходимо сделать — получить исходный код нужной версии ядра. Обычно необходимо получить самую новую стабильную версию. Все официальные версии ядра доступны на kernel.org. Если у вас уже установлен X сервер (домашний компьютер), то вы можете перейти на сайт в вашем любимом браузере и скачать нужную версию в архиве tar.gz (сжатый gzip). Если же вы работаете в консоли (например ещё не устанавливали X сервер или конфигурируете сервер), можете воспользоваться текстовым браузером (например elinks). Также можно воспользоваться стандартным менеджером загрузок wget:
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.1.tar.gz
Но учтите, что вы должны знать точный номер нужной версии.

Распаковка архива исходного кода.
После того как вы получили архив с исходным кодом, вам необходимо распаковать архив в папку. Это можно сделать из графических файловых менеджеров (dolphin,nautilus и т.п) или через mc. Либо воспользуйтесь традиционной командой tar:
tar -zxvf путь_до_архива
Теперь у вас есть папка и исходным кодом, перейдите в неё, используя команду cd каталог_исходного_кода_ядра (чтобы просмотреть список каталогов в папке, используйте команду ls).

Конфигурация ядра.
После того как вы перешли в каталог с исходным кодом ядра, необходимо выполнить «20 минутную» конфигурацию ядра. Цель её — оставить только нужные драйвера и функции. Все команды уже нужно исполнять от имени суперпользователя.

make config — консольный режим конфигуратора.

make menuconfig — консольный режим в виде списка.

make xconfig — графический режим.

После внесения нужных изменений, сохраните настройки и выйдите из конфигуратора.

Компиляция.
Пришло время завершающего этапа сборки — компиляция. Это делается двумя командами:
make && make install
Первая команда скомпилирует в машинный код все файлы, а вторая установит новое ядро в вашу систему.
Ждем от 20 минут до нескольких часов (в зависимости от мощности компьютера).

Конфигурирование и компиляция ядра Linux

Ядро установлено. Чтобы оно появилось в списке grub(2), введите (от суперпользователя)
update-grub
Теперь после перезагрузки нажмите «Escape», и вы увидите новое ядро в списке. Если же ядро не включается, то просто загрузитесь со старым ядром и конфигурируйте более аккуратно.

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

Архив статей:
Май 2017
Март 2017
Апрель 2016
Март 2016
Октябрь 2013
Сентябрь 2013
Май 2013
Март 2013
Ноябрь 2012
Июль 2012
Июнь 2012
Апрель 2012
Март 2012
Февраль 2012
Апрель 2011
Март 2011
Февраль 2011
Январь 2011
Декабрь 2010
Ноябрь 2010
Октябрь 2010
Сентябрь 2010
Август 2010
Июль 2010
Июнь 2010
Май 2010
Апрель 2010
Март 2010

Случайные:

Aurorae: движок декораций окон для KDE

Sblog будет переписан на.NET

Linuxnow.ru: Планы на будущее

Bolgenos. Опровержение «Телекона»

Быстрое восстановление GRUB 2

Фонд свободного программного обеспечения и копилефт.

Коллеги: все
Linux для всех

Наши баннеры:


Установить баннер

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

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

Если вам нужна более подробная информация об изменениях в какой-то определенной версии ядра смотрите ее Changelog на kernel.org, а в этой статье мы рассмотрим обновление ядра Linux до самой новой версии. Я попытаюсь не привязывать инструкцию к определенной версии ядра, новые ядра выходят достаточно часто и она будет актуальна для каждого из них.

Рассмотрим обновление ядра Ubuntu и CentOS. Сначала давайте рассмотрим как обновить ядро в Ubuntu 16.04.

Давайте сначала посмотрим какое ядро у вас установлено. Для этого откройте терминал и выполните:

Например, у меня сейчас используется версия 4.3, и я могу обновиться к самой новой версии. Разработчики Ubuntu уже позаботились о том чтобы их пользователи не собирали ядро вручную и сделали deb пакеты новой версии ядра. Их можно скачать с официального сайта Canonical.

Я мог привести здесь команды wget для загрузки, если была бы известна версия ядра, но в нашем случае лучше будет использовать браузер. Откройте сайт http://kernel.ubuntu.com/~kernel-ppa/mainline/. Здесь находятся все, собираемые командой Ubuntu ядра. Ядра собираются как для определенных дистрибутивов, с кодовым именем дистрибутива, так и общие. Причем ядра от Ubuntu 16.10, скорее всего, будут работать в 16.04, а вот от 9.04 в Ubuntu 16.04 ставить ядро не стоит.

Пролистайте в низ, именно там находятся более новые версии ядер:

Кроме того, в самом верху есть папка daily/current, в которой находятся самые свежие, ночные сборки ядер. Выберите нужную версию ядра и скачайте два файла linux-headers и linux-image для своей архитектуры:

После завершения загрузки можно переходить к установке. Для этого выполните в терминале следующие действия:

Перейдите в папку с установочными пакетами, например, ~/Downloads:

Запустите установку:

Если эта команда не сработала, можно пойти другим путем. Установите утилиту gdebi:

sudo apt-get install gdebi

Затем с помощью нее установите ядро:

sudo gdebi linux-headers*.deb linux-image-*.deb

Ядро установлено, осталось обновить загрузчик:

sudo update-grub

Теперь можно перезагружать компьютер и смотреть что получилось. После перезагрузки убедимся, что обновление ядра Linux до самой новой версии прошло успешно:

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

Автоматическое обновление ядра Linux в Ubuntu

Выше мы рассмотрели как установить нужную версию ядра вручную. Раньше у Ubuntu было PPA, для ежедневных сборок ядер, но теперь оно закрыто. Поэтому обновить ядро можно только скачав deb пакет и установив его. Но все это можно упростить с помощью специального скрипта.

Устанавливаем скрипт:

cd /tmp
$ git clone git://github.com/GM-Script-Writer-62850/Ubuntu-Mainline-Kernel-Updater
$ bash Ubuntu-Mainline-Kernel-Updater/install

Проверяем наличие обновлений:

KernelUpdateChecker -r yakkety

Опция -r позволяет указать ветку дистрибутива, для которой нужно искать ядра. Для xenial ядра больше не собираются, но здесь будут отлично работать ядра от следующей версии. Кроме того, опцией -no-rc можно указать утилите не использовать кандидаты в релизы, а опция -v задает точную версию ядра, которую нужно установить. Если вам неважно для какого дистрибутива ядро, лишь бы самое новое, используйте опцию --any-release. Скрипт выдаст такой результат:

Перед тем как устанавливать ядро, можно посмотреть подробности открыв файл /tmp/kernel-update:

Здесь мы видим, что выполнялся поиск для yakkety, а также на данный момент доступна версия ядра 4.7-rc6. Можем устанавливать:

sudo /tmp/kernel-update

Скрипт покажет нам версию текущего ядра, а также версию ядра, которая будет установлена, дату ее сборки и другие подробности. Также будет задан вопрос, нужно ли вести лог изменений. Дальше пойдет установка:

Старые ядра, на всякий случай не удалять (n):

Готово, обновление ядра до самой новой версии завершено, теперь перезагрузите компьютер (y):

Проверяем действительно ли обновление ядра Ubuntu сработало:

Более того, скрипт был добавлен в автозагрузку и теперь будет проверять автоматически обновления через 60 секунд после входа в систему. Ярлык автозагруки находится в файле:

vi ~/.config/autostart/KernelUpdate.desktop

Вы можете изменить его как вам нужно или удалить. Если хотите удалить скрипт полностью из системы, выполните:

rm ~/.config/autostart/KernelUpdate.desktop
$ sudo rm /usr/local/bin/KernelUpdate{Checker,ScriptGenerator}

Не загружается

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

А чтобы восстановить работу системы выберите пункт Advanced options for Ubuntu в меню Grub:

И запустите предыдущее работающее ядро:

После загрузки останется удалить неверно установленное ядро и еще раз обновить Grub, подставьте нужную версию ядра вместо 4.7:

sudo apt remove linux-header-4.7* linux-image-4.7*

sudo update-grub

Теперь ваша система вернулась к прежнему состоянию. Вы можете попробовать устанавливать более старую версию ядра или попробовать еще раз.

Обновление ядра Linux до 4.4 в CentOS

А теперь давайте рассмотрим как обновить ядро Linux самой новой версии в CentOS. Инструкция проверена на CentOS 7, но скорее всего, будет работать и на RedHat 7, Fedora и других подобных дистрибутивах.

Как правило, новые ядра не включены в официальные репозитории CentOS, поэтому чтобы получить последнюю стабильную версию нам необходимо будет добавить репозиторий ELRepo. Это репозиторий коммерческих пакетов (Enterprise Linux Packages) он также поддерживается в RedHat и Fedora.

Для добавления репозитория выполните следующие действия:

Сначала необходимо импортировать ключ:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

Добавляем репозиторий и необходимые компоненты в RHEL/Scientific Linux/CentOS-7:

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

yum install yum-plugin-fastestmirror

В Fedora 22 и выше:

Ядро (англ. kernel ) – то, вокруг чего строится всё остальное. Именно оно и называется Linux. Сейчас словом Linux в быту называют построенную на нём операционную систему, хотя по-хорошему она называется GNU/Linux (ядро Linux и ПО от проекта GNU, многие десятилетия находящейся в разработке).

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

Каждый релиз Ubuntu имеет собственную версию ядра. LTS -релизы начиная с 10.04 получили возможность обновить ядро до версий, входящих в состав более новых релизов.

Версия Ubuntu Версия ядра
4.10 2.6.9
5.04 2.6.11
5.10 2.6.13
6.06 LTS 2.6.15
6.10 2.6.18
7.04 2.6.19
7.10 2.6.20
8.04 LTS 2.6.24
8.10 2.6.27
9.04 2.6.28
9.10 2.6.31
10.04 LTS 2.6.32
10.10 2.6.35
11.04 2.6.38
11.10 3.0.4
12.04 LTS 3.2
12.10 3.5
13.04 3.8
13.10 3.11
14.04 LTS 3.13
14.10 3.16
15.04 3.19

Форки

Нумерация версий ядра Ubuntu и на сайте kernel.org не совпадает, так как для обозначения добавленных патчей разработчики из Canonical добавляют микроверсию. Например, версия 3.2.0-23 будет означать, что ядро базируется на ветке 3.2, на которую было наложено 23 патча.

В репозитории Ubuntu поддерживаются следующие типы ядер:

generic-pae ядро позволяет 32-битной системе использовать до 64ГБ общего объёма оперативной памяти, выделяя под нужды конкретного процесса не более 4ГБ, в то время как простое ядро generic работает не более чем с 4ГБ ОЗУ.

64-битное ядро позволяет адресовать до 1ТБ памяти, потребляемой процессами.

Если требуется обновить ядро на более новую мажорную версию (обычно это связано с тем, что в новых версиях добавляется поддержка нового оборудования, устраняются регрессии) можно воспользоватся официально поддерживаемым архивом http://kernel.ubuntu.com/~kernel-ppa/mainline/ .

Компиляция ядра

Сборка ядра из исходных кодов требует некоторых навыков и знаний о работе ОС.

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

Build-essential fakeroot ncurses-dev libssl-dev

Все дальнейшие действия необходимо выполнять от лица суперпользователя :

sudo su

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

Исходный код ядра, используемого в Ubuntu можно получить установив пакет linux-source:

apt-get install linux-source

После установки в директории /usr/src появится архив называющийся linux-source-верися_ядра.tar.bz2 .

Так же можно скачать архив и с исходным кодом ядра с сайта kernel.org .

Скачивая ядро с сайта kernel.org, вам придётся наложить на него патчи

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

Распакуйте полученый архив и, для удобства, создайте символическую ссылку на полученую в результате директорию:

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

Для упрощения процесса конфигурации ядра можно скопировать настройки текущего.

В данном пошаговом руководстве вы узнаете, как правильно собрать и установить ядро ветвей >2.6 в семействе ОС Ubuntu.

Шаг 1. Получение исходного кода ядра

Исходники ядра Ubuntu можно получить двумя способами :

    Установив архив из репозитория, с автоматическим наложением последних официальных патчей. При этом скачается пакет размером ~150 Мб в текущую папку. Чтобы получить исходники ядра, версия которого установлена на компьютере выполните команду: apt-get source linux-image-`uname -r`

    Или вместо `uname -r` можно указать конкретную версию из имеющихся в репозитории.

Список имеющихся в репозитории версий можно увидеть набрав команду: «apt-get source linux-image-» и, не нажимая Enter , нажать два раза клавишу Tab .

Не забудьте включить общий доступ к исходникам в репозитории (Параметры системы → Программы и обновления → Программное обеспечение Ubuntu → Исходный код). Из консоли это сделать можно раскомментировав строки начинающиеся с deb-src в файле /etc/apt/sources.list, а затем выполнить обновление командой: «sudo apt-get update».

    Самая свежая версия ядра доступна по git . Размер скачиваемого пакета ~500-800 Мб. 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 приложение может вообще не поддерживать.

    Архив с базовой версий без патчей, т.е. например «4.8.0», «4.8.10»: 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 - файл конфигурации, создающийся автоматически, в который включается только то, что нужно данному конкретному устройству. При вызове данной команды большая часть ядра будет замодулирована

В случае, если вы хотите использовать 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 выполните следующую команду:

До Ubuntu 12.04: 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), тогда выполните следующую команду для распаковки содержимого архива:

Gunzip patch-2.6.x.y.gz

Если скачанный вами файл был в формате Bzip2 (*.bz2), тогда выполните следующую команду для распаковки содержимого архива:

Bunzip2 patch-2.6.x.y.bz2

где 2.6.x.y - версия патча ядра. Соответствующие команды распакуют файл патча в папку с исходным кодом ядра. Прежде чем применить патч, необходимо удостовериться, что он заработает без ошибкок. Для этого выполните команду:

Patch -p1 -i patch-2.6.x.y --dry-run

где 2.6.x.y - версия патча ядра. Эта команда сымитирует применение патча, не изменяя сами файлы.

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

Patch -p1 -i patch-2.6.x.y

где 2.6.x.y - версия патча ядра. Если не было никаких ошибок, значит к исходному коду был успешно применён патч.

Внимание! Перед тем, как применять патч, проведите следующие действия: 1. Скачайте с http://www.kernel.org патч той же версии, что и ваших исходников. 2. Выполните следующую команду: patch -p1 -R

где 2.6.x.y - версия патча и ваших исходников

Шаг 4. Конфигурация будущей сборки ядра

Перейдите в папку, куда вы распаковали ядро, выполнив команду

Cd ~/linux-2.6.x.y

где 2.6.x.y - версия загруженного вами ядра.

На данный момент вы уже должны были определиться с методом конфигурации ядра (если нет, то ознакомьтесь с ними в разделе «Получение необходимых для сборки пакетов». В зависимости от этого, выполните следующую команду для запуска выбранного вами способа конфигурации:

    config - традиционный способ конфигурирования. Программа выводит параметры конфигурации по одному, предлагая вам установить для каждого из них свое значение. Вызывается командой make config

    oldconfig - файл конфигурации создаётся автоматически, основываясь на текущей конфигурации ядра. Рекомендуется для начинающих. Вызывается командой make oldconfig

    defconfig - файл конфигурации создаётся автоматически, основываясь на значениях по-умолчанию для данной конкретной архитектуры. Вызывается командой make defconfig

    menuconfig - псевдографический интерфейс ручной конфигурации, не требует последовательного ввода значений параметров. Рекомендуется для использования в терминале. Вызов: make menuconfig

    gconfig и xconfig - графические конфигураторы для ручной настройки. Вызов: make gconfig

    Make xconfig

    соответственно

    localmodconfig и localyesconfig - автоматические конфигураторы. Конфиг создается на основе вызванных в данных момент модулей и запущенного ядра. Разница между этими двумя конфигураторами в количестве модулей. В первом случае их будет не менее 50% ядра, а во-втором не больше 2 модулей. Вызов: make localmodconfig

    Make localyesconfig

    соответственно

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

Шаг 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

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

Sudo update-grub

Файл menu.lst (для GRUB версии 1) или grub.cfg (для GRUB версии 2) обновится в соответствии с наличием установленных операционных систем и образов ядер.

Шаг 9. Проверка ядра

Сборка и установка ядра успешно выполнены! Теперь перезагрузите компьютер и попробуйте загрузить систему с новым ядром. Чтобы удостовериться, что система запущена с новым ядром, выполните команду

Uname -r

Она выведет на экран используемую версию ядра.

Если всё сделано правильно, то вы можете удалить архивы с исходным кодом и весь каталог linux-2.6.x.y в вашей домашней папке. Это освободит около 5 ГБ на вашем жёстком диске (размер освобождаемого пространства зависит от параметров сборки).

На этом процесс сборки и установки завершён, поздравляю!