Свое ядро в *ubuntu, или Зачем и как компилировать ядро в Linux. Где скачать Linux Простая сборка ядра без применения патчей

Ядро (англ. 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

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

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

1. Установка исходников ядра

Вначале нам нужны будут исходники ядра. Для Ubuntu 7.04 в репозитарии они уже есть, нужно найти пакет linux-source-тратата (в нашем случае это будет linux-source-2.6.20 ), и установить его (все это можно сделать через Synaptic ). После установки данного пакта, в каталоге /usr/src появится файл с именем linux-source-2-6-20.tar.bz2 .

Делаем под sudo команду

chmod 777 /usr/src

Заходим обычным пользователем в каталог /usr/src и распаковываем этот файл

tar -jxvf linux-source-2-6-20.tar.bz2

Появится каталог с исходниками /usr/src/linux-source-2-6-20 . Архивный файл удаляем (нужны будут права рута).

2. Установка сопроводительных пакетов

Для сборки понадобятся еще пакеты kernel-package , libncurses5-dev , fakeroot . Устанавливаем их через Synaptic . Само собой, в системе также должен быть установлен компилятор gcc и dev -пакеты для системных библиотек, такие например как libc6-dev .

3. Создание файла конфигурации ядра

Теперь нам нужен конфиг ядра, с которым собиралось ядро для убунты. Заходим в каталог /boot , и видим там файл типа config-2.6.20-15-generic . Он нам и нужен. Копируем его в каталог с исходниками /usr/src/linux-source-2-6-20 и переименовываем его в .config . Обратите внимание, что имя файла начинается с точки, это не опечатка.

Теперь, находясь в каталоге /usr/src/linux-source-2-6-20 , даем под обычным пользователем команду

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

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

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

В конце конфигурирования выбираем пункт "Save тратата кофигурацию", указываем имя файла, отличного от .config , например .config_my_01 . Выходим.

Теперь переименовываем .config в .config_ubuntu . И у вас получается два файла - .config_ubuntu и .config_my_01 . Вы можете посмотреть различия между стандартной и вашей конфигурацией, например так

diff .config .config_my_01

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

4. Компиляция

Перед компиляцией обязательно проверяем наличие свободного пространства (на том разделе, где лежат исходники). Хорошо бы меть 4-5Gb (!) в запасе. При компиляции размер каталога с исходниками может разрастись до 3,5Gb . Проверить свободное пространство можно командой

Теперь, находясь под обычным пользователем в каталоге /usr/src/linux-source-2-6-20 , даем команду, которая удалит в исходниках скомпилированные кем-то объектники, которые остались от предыдущей компиляции и находились в архиве.

Потом через sudo получаем права рута и запускаем компиляцию.

make-kpkg --initrd --revision=mybuild.1.0 kernel_image kernel_headers

Где вместо "mybuild.1.0 " пишите что вам нужно. Допустимы английские буквы, цифры, точки. Символы подчеркивания и тире не допускаются.

Вообще-то, по-хорошему, компиляцию ядра надо делать под правами обычного пользователя. Формально, создание бинарника ядра ничем не отличается от компилирования бинарника любой другой программы. Но мы делаем компиляцию не в ручном режиме (через команды типа make bzImage modules ), а в полуавтоматическом (через make-kpkg ). А эта программа, после прохождения компиляции, будет запускать из-под себя программу dpkg-deb чтобы получить deb -пакет с ядром. Вот в этот момент и потребуются права рута.

Теперь давайте разберемся, что же делает вышеприведенная команда. Она запускает компиляцию ядра, и затем создает deb -пакет с именем linux-image-версия.deb , в котором будут находиться бинарник ядра и модули ядра (это сделается благодаря цели kernel_image ). А так же будет создан deb -пакет с именем linux-headers-версия.deb , в нем будут находиться заголовочные файлы ядра (это сделается благодаря цели kernel_headers ). Полученные пакеты будут лежать в каталоге /usr/src .

Посмотреть, какие файлы находятся в этих deb -пакетах, можно в konqueror (в Kubuntu), щелкнув правой клавишей по на интересуемом deb -файле и выбрав "Kubuntu package menu " -> "Show package info ". Информация будет формироваться довольно медленно, около минуты, так как пакеты большие.

5. Установка ядра

Теперь устанавливаем ядро. Находясь с правами суперпользователя в каталоге /usr/src , даем команду

dpkg -i linux-image-версия.deb

после которой ваше ядро (файл vmlinuz-2.6.20.3-ubuntu1 ) будет помещено в каталог /boot (все предыдущие ядра тоже никуда не денутся, останутся на своих местах), а в каталоге /lib/modules , рядом с каталогом с модулями обычного ядра (в Ubuntu 7.04 называется /lib/modules/2.6.20-15-generic ) появится каталог с модулями вашего нового ядра (в нашем случае это будет /lib/modules/2.6.20.3-ubuntu1 ). Новое ядро будет автоматически прописано в /boot/grub/menu.lst .

Впринципе, уже можно перегрузиться, и в экране загрузки Grub появится новый пункт с вашим ядром. Новое ядро появится в начале списка. Но пока не спешим, а дадим еще команду

dpkg -i linux-headers-версия.deb

которая установит хедеры ядра в каталог /usr/src/linux-headers-версия , в нашем случае это будет каталог /usr/src/linux-headers-2.6.20.3-ubuntu1 . Эти хедеры нам понадобятся, например, для перекомпиляции драйверов nVidia для нового ядра.

6. Перезапуск

Перегружайтесь, и в меню Grub вы увидите два новых пункта - обычная загрузка с вашим ядром, и загрузка в минимальном консольном режиме. Выбирайте первый пункт. Если ядро сразу не выпало в Kernel panic , то это хороший признак. Ждите конца загрузки. Если вам повезет, то Ubuntu загрузится в графический режим и покажет графическое приглашение входа в систему. В этом случае дальше можете не читать.

Но для пользователей карт nVidia , которые пользовали драйвера, установленными через "Менеджер проприетарных драйверов" или пользовали драйвера из пакета nvidia-glx (или там nvidia-glx-new ), даю 99% гарантии, что вам не повезет! И графики под новым ядром вы не увидите!

7. Установка драйверов nVidia с сайта nvidia.com

Чтобы получить работающие иксы под новым ядром, первое что приходит в голову - это установить под новым ядром драйвера с сайта nvidia.com. И это неправильное решение! Как только установятся дрова под новым ядром, графика в вашем старом проверенном ядре работать перестанет (по причине того, что файлы драйверов nVidia жестко завязаны на версию и название ядра). А так как работоспособность нового ядра вы еще толком не проверили, вы можете получить систему "с родным ядром, но без графики" и "глючным ядром, зато с графикой". Думаю, никого такая ситуация не устроит.

В популярной статье "Ядерная физика для домохозяек", есть рекомендации, как получить графику под обоими ядрами. Предлагается следующий путь - иметь на готове установочный пакет дров с nvidia.com, и при желании загрузиться под конкретным ядром, надо сначала загрузиться в консольном режиме этого ядра, установить дрова, и потом загрузиться уже нормально. Думаю, такой подход тоже мало кого обрадует.

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

Краткий план действий - ставим дрова с сайта nvidia.com для стандартного ядра в полном объеме. Убеждаемся что они работают. Потом из этого же пакета ставим дрова для самодельного ядра, но в режиме "только графический модуль".

8. Установка драйверов nVidia под обычное ядро

Все, что ниже написано, подходит и для тех, кто просто решил установить новые дрова nVidia под стандартное ядро!

Качаем с сайта nvidia.com дрова под линух. Я себе качал дрова версии 96.43 . Файл называется NVIDIA-Linux-x86-96.43.01-pkg1.run . Но вы можете попробовать другие стабильные релизы, которые присутствуют на сайте nVidia .

Для установки, создаем в каталоге /usr/src подкаталог с именем nvidia , копируем туда этот файл. Находясь в этом подкаталоге, даем файлу разрешение на выполнение

chmod 777 NVIDIA-Linux-x86-96.43.01-pkg1.run

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

  • aptitude. Это интерфейсная оболочка над пакетным менеджером для text-mode.
  • linux-headers-2.6.20-15. Это заголовочные файлы (хедеры) вашего стандартного ядра.
  • linux-headers-2.6.20-15-generic. Точно не скажу на кой хрен этот пакет, но пусть будет.

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

Перегружаемся в консольный режим обычного ядра (в Grub есть такой пункт). В Ubuntu вы автоматически получите права рута, даже пароль вводить ненадо. Теперь надо удалить дрова nVidia , которые есть в системе. Если вы устанавливали дрова через "Менеджер проприетарных драйверов" (или путем установки пакета nvidia-glx или nvidia-glx-new ), то пакет nvidia-glx/nvidia-glx-new нужно удалить из системы, причем не просто деинсталлировать, а деинсталлировать в режиме purge .

Я достаточно тупой пользователь, и вместо того, чтобы разбираться с опциями dpkg , в консоли пользуюсь программой aptitude . Наберите команду

и вы попадете в оболочку, оталенно напоминающую Synaptic . Вверху будет подсказка по клавишам. Чтобы попасть в меню, нажимаем Ctrl+t (неудобно, но что делать). В меню
стрелками и клавишей Enter находим и выбираем пункт "Find ". Пишем строку поиска - nvidia-glx . Засветка попадет на нужный пакет. Снова вызываем меню, и находим там пункт "Purge ". Нажимаем его, и пакет, на котором стоит засветка, будет помечен для полного деинсталлирования всех его файлов из системы (сам пакет останется в кеше, его можно будет заново установить при необходимости). Внизу появится подсказка - "e - Examine, ! - remove ". Нажимаем "e " - и видим какие пакеты будут удалены. Если от nvidia-glx будут зависеть пакеты, то они тоже будут деинсталлированы. Обычно это пакет nvidia-glx-dev . Ничего страшного, что он удалится тоже.

Теперь нажимаем "! " (для особо одаренных - Shift+1 ), тем самым мы соглашаемся с нашими изменениями. Потом нажимаем "q " (выход). При выходе программа удалит отмеченные нами пакеты.

Теперь такой момент. Мы сейчас находимся на уровне init 1 (только консоль, куча сервисов не запущена). Если запустить инсталляцию драйвера nVidia , то она будет ругаться, что возможно у вас не запущен сервис devfs , который обычно запускается на уровне 3 . Поэтому даем команду

telinit 3

и система догрузит нужные сервиса, а заодно выйдет из однопользовательского режима (появится несколько консолей, которые можно переключать клавишами ALT+F1 ...ALT+F6 ). Для дальнейшей работы нам как раз понадобится две консоли. Кстати, система попробует загрузить графику, ей это не удасться, т.к. драйвер мы только что удалили. И она останется в 7 -й консоли с пустым экраном. Не паникуем, нажимаем ALT+F1 , видим первую консоль, там вводим логин, пароль так же как и в графическом входе (только после логина и пароля нажимаем Enter а не TAB ).

Залогинившись, вызываем mc под суперпользователем

Заходим в каталог /usr/src/nvidia

./NVIDIA-Linux-x86-96.43.01-pkg1.run -e

Опция "-e " позволит нам видеть отчет о действиях и увидеть конфликтующие файлы. Начинаем установку. Соглашаемся с лицензией. Отказываемся от докачки исходников с ftp нвидии. Говорим OK что будут создаваться модули нами. На вопросы ввода путей просто нажимаем Enter .

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

/usr/lib/xorg/modules/extensions/libGLcore.so
/usr/lib/xorg/modules/extensions/libglx.so
/usr/lib/libGL.so
/usr/lib/libGL.so.1
/usr/lib/libGL.so.1.2
/lib/modules/2.6.20-15-generic/volatile/nvidia.ko
/usr/include/GL/glext.h
/usr/include/GL/gl.h
/usr/include/GL/glxext.h
/usr/include/GL/glx.h

Это файлы от пакета nvidia-restricted-modules . Дело в том, что если просто удалить этот пакет, то вместе с данными файлами удалятся и все файлы для nVidia -чипсетов (nVidia ведь не только видеокарточки делает). А так же потребуется удаление зависимых пакетов linux-restricted-modules-2.6.20-15-generic , linux-restricted-modules-generic и linux-generic . Поэтому удалять данный пакет нежелательно. Поэтому мы поступим по-другому.

Как только увидите такой список, логинтесь во вторую консоль (переход - ALT+F2 ), запускайте

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

После того, как удалили все файлы, предназначенные для Backup , возвращайтесь в первую консоль. Прерывайте установку (Ctrl+c ) и запускайте ее заново. Если "Backup file ... " больше не будет, то завершайте установку. Все должно пройти гладко. Можете согласиться с исправлением xorg.conf , всеравно содасться резервный файл.

Теперь внимание! Самое главное, в этот момент не перегрузиться! А зайти в файл /etc/default/linux-restricted-modules-common , и добавить в опцию DISABLED_MODULES модули nv и nvidia_new . У меня это сделано так

DISABLED_MODULES="nv nvidia_new"

Если этого не сделать, то при следующей загрузке файл (который вы удалили!) /lib/modules/2.6.20-15-generic/volatile/nvidia.ko будет автоматически восстановлен из пакета nvidia-restricted-modules . А ваш файл, который вы скомпилировали при установке драйверов, называется /lib/modules/2.6.20-15-generic/kernel/drivers/video/nvidia.ko . Так вот, при запуске иксов будет найден первый файл. А до вашего файла дело не дойдет. И иксы не смогут загрузиться.

Перегружаемся в стандарное ядро в полный режим. Если все сделали правильно, иксы запустяться. Радуйтесь, как минимум у вас осталась работоспособная система.

9. Установка драйверов nVidia под самодельное ядро

Теперь остался последний шаг - заставить работать графику в новом ядре. Тут все достаточно просто. Загружаемся в консольном режиме самодельного ядра. Даем команду

логинимся, и в первой консоли запускаем

Заходим в каталог /usr/src/nvidia и начинаем установку дров командой

./NVIDIA-Linux-x86-96.43.01-pkg1.run -Ke

Опции "-Ke " позволяют собрать только графический модуль nvidia.ko под текущее ядро (и файл будет помещен в каталог /lib/modules/имя_текущего_ядра/kernel/drivers ). Никаких других общих файлов, которые например были бы размещены в /usr/lib... как при компиляции с опцией "-e", создаваться не будет.

Точно так, же как и при компиляции в стандартном ядре, соглашаемся с путями нажатием Enter . Доходим до экрана, где будут перечислены файлы, которые будут установлены. Если в начале этого списка есть конфликтущие файлы "Backup file ... ", переключаемся в соседнюю консоль и удаляем (переносим) эти файлы.

После удаления конфликтующих файлов, в первой консоли прерывайте установку (Ctrl+c ), и снова ее запускайте (с опцией "-Ke " естественно). После завершения установки перегружайтесь, выбрав в меню Grub в полный режим с вашим ядром.

Иксы должны запуститься. Вы можете радоваться второй раз - вы имеете систему с самодельным ядром и работащей графикой.

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

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

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

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

Самое первое что нужно сделать - это скачать исходники ядра. Исходники лучшие брать с сайта вашего дистрибутива, если они там есть или официального сайта ядра: kernel.org. Мы рассмотрим загрузку исходников с kernel.org.

Перед тем как скачивать исходники нам нужно определиться с версией ядра которую будем собирать. Есть две основных версии релизов - стабильные (stable) и кандидаты в релизы (rc), есть, конечно, еще стабильные с длительным периодом поддержки (longterm) но важно сейчас разобраться с первыми двумя. Стабильные это, как правило, не самые новые, но зато уже хорошо протестированные ядра с минимальным количеством багов. Тестовые - наоборот, самые новые, но могут содержать различные ошибки.

Итак когда определились с версией заходим на kernel.org и скачиваем нужные исходники в формате tar.xz:

В этой статье будет использована самая новая на данный момент нестабильная версия 4.4.rc7.

Получить исходники ядра Linux можно также с помощью утилиты git. Сначала создадим папку для исходников:

mkdir kernel_sources

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

git clone https://github.com/torvalds/linux

Распаковка исходников ядра

Теперь у нас есть сохраненные исходники. Переходим в папку с исходниками:

cd linux_sources

Или если загружали ядро linux с помощью браузера, то сначала создадим эту папку и скопируем в нее архив:

mkdir linux_sources

cp ~/Downloads/linux* ~/linux_sources

Распаковываем архив с помощью утилиты tar:

И переходим в папку с распакованным ядром, у меня это:

cd linux-4.4-rc7/

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

Перед тем как начнется сборка ядра linux, нам придется его настроить. Как я и говорил, сначала рассмотрим автоматический вариант настройки сборки ядра. В вашей системе уже есть собранное, настроенное производителем дистрибутива, и полностью рабочее ядро. Если вы не хотите разбираться с тонкостями конфигурации ядра, можно просто извлечь уже готовые настройки старого ядра и сгенерировать на их основе настройки для нового. Нам придется лишь указать значения для новых параметров. Учитывая, что в последних версиях не было и не намечается серьезных изменений можно отвечать на все эти параметры как предлагает скрипт настройки.

Параметры используемого ядра хранятся в архиве по адресу /proc/config.gz. Распакуем конфиг и поместим его в нашу папку утилитой zcat:

В процессе его работы нужно будет ответить на несколько вопросов. Это новые параметры, которые изменились или были добавлены в новое ядро и поддержка нового оборудования, в большинстве случаев можно выбирать вариант по умолчанию. Обычно есть три варианта y - включить, n - не включать, m - включить в качестве модуля. Рекомендованный вариант написан с большой буквы, для его выбора просто нажмите Enter.

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

Ручная настройка ядра Linux

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

Начнем. Для запуска меню настроек ядра linux наберите:

Откроется вот утилита с интерфейсом ncurses:

Как видите, некоторые обязательные опции уже включены, чтобы облегчить вам процесс настройки. Начнем с самых основных настроек. Чтобы включить параметр нажмите y, чтобы включить модулем - m, для перемещения используйте клавиши стрелок и Enter, возвратиться на уровень вверх можно кнопкой Exit Откройте пункт General Setup .

Здесь устанавливаем такие параметры:

Local Version - локальная версия ядра, будет увеличиваться при каждой сборке на единицу, чтобы новые ядра при установке не заменяли собой старые, устанавливаем значение 1.

Automatically append version information to the version string - добавлять версию в название файла ядра.

Kernel Compression Mode - режим сжатия образа ядра, самый эффективный lzma.

Default Hostname - имя компьютера, отображаемое в приглашении ввода

POSIX Message Queues - поддержка очередей POSTIX

Support for paging of anonymous memory - включаем поддержку swap

Control Group support - поддержка механизма распределения ресурсов между группами процессов

Kernel .config support и Enable access to .config through /proc/config.gz - включаем возможность извлечь конфигурацию ядра через /proc/config.gz

Здесь все, возвращаемся на уровень вверх и включаем Enable loadable module support, эта функция разрешает загрузку внешних модулей,дальше открываем его меню и включаем:

поддержка отключения модулей

принудительное отключение модулей

Опять возвращаемся назад и открываем Processor type and features:

Processor family (Opteron/Athlon64/Hammer/K8) - выбираем свой тип процессора.

Опять возвращаемся и переходим в раздел File systems , тут установите все нужные галочки.

Обязательно включите The Extended 3 (ext3) filesystem и The Extended 4 (ext4) filesystem - для поддержки стандартных ext3 и ext4 файловых систем

Возвращаемся и идем в Kernel hacking.

Здесь включаем Magic SysRq key - поддержка магических функций SysRq, вещь не первой необходимости, но временами полезная.

Остался еще один пункт, самый сложный, потому что вам его придется пройти самому. Device Drivers - нужно пройтись по разделам и повключать драйвера для своего оборудования. Под оборудованием я подразумеваю нестандартные жесткие диски, мышки, USB устройства, веб-камеры, Bluetooth, WIFI адаптеры, принтеры и т д.

Посмотреть какое оборудование подключено к вашей системе можно командой:

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

Чтобы выйти нажмите пару раз кнопку Exit .

Сборка ядра Linux

После завершения всех приготовлений может быть выполнена сборка ядра linux. Для начала процесса сборки выполните:

make && make modules

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

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

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

cp arch/x86_64/boot/bzImage /boot/vmlinuz

А можно просто выполнить установочный скрипт, сразу установив заодно и модули:

sudo make install && sudo make modules_install

После установки не забудьте обновить конфигурацию загрузчика Grub:

grub-mkconfig -o /boot/grub/grub.cfg

И перезагружаем компьютер чтобы увидеть новое ядро в работе:

Выводы

Вот и все. В этой статье мы подробно рассмотрели как собрать ядро 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 для всех

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


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

В продолжение темы:
Ленточный фундамент

Спагетти с соусом из рыбной консервы — этот недорогой рецепт мы увидели на пачке купленных нами спагетти. Рецепт показался нам очень простым, ну и мы решили попробовать...

Новые статьи
/
Популярные