Конфигурирование и компиляция ядра Linux в Ubuntu. Linux статьи

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

47

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

Установка утилит

Для настройки и сборки ядра Linux вам потребуется установить несколько пакетов, которые понадобятся для сборки и настройки ядра: kernel-package, build-essential, libncurses-dev. Сделать это можно командой:

sudo apt-get install build-essential kernel-package libncurses-dev

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


Теперь нужно скачать исходный код ядра. Мы будем скачивать ядро для Ubuntu. Вы можете скачать определенную версию ядра, например, ту, которую вы в данный момент используете или же скачать самую последнюю версию. Для того, чтобы определить версию ядра Linux, которую вы используете, выполните команду uname с параметром -r:

uname -r

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

$uname -r
2.6.27-11-generic

Имя пакета, содержащего исходные коды ядра обычно имеет следующий вид: linux-source-Версия. Например, для ядра версии 2.6.24: linux-source-2.6.24. Самая последняя версия ядра в репозиториях Ubuntu называется просто linux-source, без указания версии на конце. Для установки исходных кодов последней версии ядра Ubuntu Linux, выполните команду:

sudo apt-get install linux-source

Эта команда скачивает исходники ядра и размещает их в директории /usr/src. На момент написания заметки последняя версия ядра, которая была скачана — 2.6.27, ее мы и будем использовать. Если мы теперь перейдем в директорию /usr/src и выполним команду ls, то увидим, что среди файлов присутствует файл linux-source-2.6.27.tar.bz2. Это и есть исходные коды ядра Linux (ядра Ubuntu).

Распаковываем исходный код ядра

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

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

Для удобства мы создали символьную ссылку с именем linux, которая указывает на директорию с исходниками.

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

Теперь перейдем к конфигурированию ядра. Чтобы не создавать конфигурацию с нуля, возьмем за основу конфигурацию ядра, которая в данный момент используется. Получить текущую конфигурацию можно выполнив команду make oldconfig. Выполните в терминале:

cd /usr/src/linux
sudo make oldconfig

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

Получить справку по всем параметрам make для ядра Linux вы можете, выполнив команду make help.

Для изменения конфигурации ядра мы воспользуемся консольной утилитой menuconfig. Для ее запуска выполните:

sudo make menuconfig

Перед вами появится интерфейс, в котором вы можете включать или отключать определенные опции ядра:

Утилита Menuconfig

Для примера я включу опцию «NTFS write support». Для этого, нажимая кнопку Вниз, найдите пункт «File systems» и нажмите Enter.

Настройка ядра Linux - File systems

Вы окажетесь в меню настройки файловых систем. Найдите в этом списке пункт «DOS/FAT/NT Filesystems» и нажмите Enter.

Настройка ядра Linux - DOS/FAT/NT Filesystems

Перейдите к пункту «NTFS write support» и нажмите Пробел, рядом с пунктом появится звездочка, означающая, что данная опция будет включена в ядро.

Настройка ядра Linux - NTFS write support

Теперь выберите «Exit» (нажав кнопку Вправо и затем Enter) и выйдите из утилиты. Перед выходом из утилиты выскочит сообщение с вопросом — сохранить проделанные изменения, выберите Yes.

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

Пришло время скомпилировать ядро с теми изменениями, которые мы внесли на предыдущем шаге. Для начала выполним команду, которая удалит файлы (если они имеются), оставшиеся от предыдущей компиляции:

sudo make-kpkg clean

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

sudo make-kpkg --initrd --append-to-version=-mykernel kernel_image kernel_headers

Ключ -append-to-version используется, чтобы добавить к имени файла образа ядра, который мы получим после компиляции, строку -mykernel, чтобы было проще идентифицировать свое ядро. Вместо -mykernel вы можете использовать любой префикс.

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

Установка (инсталляция) ядра

После компиляции ядра вы получили на выходе два файла: linux-image-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00.Custom_i386.deb, linux-headers-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00.Custom_i386.deb. Мы воспользуемся командной dpkg -i, которая автоматически установит ядро и пропишет его в ваш загрузчик GRUB (в файл /boot/grub/menu.lst). Отмечу, что ядро будет установлено, как ядро по умолчанию, поэтому если оно у вас не загрузится вам нужно будет загрузиться, используя ваше предыдущее ядро (оно должно быть в списке меню GRUB при загрузке компьютера) и вручную изменять файл menu.lst. Итак, для установки ядра выполните команды:

dpkg -i linux-image-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00.Custom_i386.deb
dpkg -i linux-headers-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00.Custom_i386.deb

Запуск системы с новым ядром

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

Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
47

Комментарии

Drevoborod
06.07.2010, 12:45
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Жаль только, что эта статья - дебиан-специфическая. Например, make-kpkg - команда для создания именно пакета .deb с ядром, а не универсальная команда компиляции. В универсальном случае надо было бы просто указать команду make, после чего получившийся файл ядра, лежащий по умолчанию в папке arch/<архитектура>/boot скопировать в /boot и добавить в загрузочное меню. Но для убунтушников очень удобная статья :) Сам воспользовался с удовольствием :)
Гость
05.06.2010, 14:23
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
>После компиляции ядра вы получили на выходе два файла

А где эти два файла лежат я их чтото не нашел
alex
11.08.2010, 13:24
Постоянная ссылка на комментарийРодительский комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
В /usr/src нет? Я еще не пробовал, но вопрос аналогичный...
Гость
11.04.2010, 11:26
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
У меня имеются исходники Linux 0.01 и еще там вместе с исходниками есть файлы makefile у меня система Windows так вот как мне скомпилировать эти исходники из makefile какие команды и куда надо писать
G R S
05.05.2010, 20:05
Постоянная ссылка на комментарийРодительский комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Спасибо поржал.
mad
08.10.2010, 22:07
Постоянная ссылка на комментарийРодительский комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
+1 улыбнуло
kosiak
08.12.2011, 17:58
Постоянная ссылка на комментарийРодительский комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
мочат люди, не по-детски мочат =)
Сергей
02.09.2016, 11:03
Постоянная ссылка на комментарийРодительский комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Тебе нужно установить bash на windows 10 и в этой проге ты все откомпилируешь и линух и андроид и для 86 и для arm
Роман
31.03.2010, 09:23
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Большое спасибо, очень конкретно сформулированная статья.
0 o
02.02.2010, 02:58
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
все это конечно хорошо ))) но вот как быть с вай-фай картой broadcom bcm-4312 ? модуль ядра упорно не желает устанавливатся на самосборное ядро; пробовал на дебиане и убунте, пишет "неизвестная ошибка" какие есть варианты решения проблемы?
yuriyАктивный
02.02.2010, 08:14
Постоянная ссылка на комментарийРодительский комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Как решать не подскажу. Вот несколько ссылок, может быть, поможет, хотя, возможно, вы их уже видели:
How to Setup Broadcom Wireless BCM4312 (rev 02) for Ubuntu Hardy
No wireless in 9.10 with Broadcom BCM4312
Настройка BCM4312 в Fedora Core 8
VadimAndyАктивный
02.09.2016, 22:40
Постоянная ссылка на комментарийРодительский комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
рискну предположить, что это Dell, если так, то дрова берете с kernel.org и закидываете их в директорию, которая определяется как locate * .расширение скачанного вами файла.
Annulen
12.01.2010, 16:56
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
>перевод параметров ядра
Господа, будьте милосердны! Стоит только ввести такую возможность, и сразу же набигут такие же как вы, не понимающие смысла настроек, но жаждущие перевода. В результате получим русско-английскую кашу, в которой не разберутся ни те, кто знаком с ядром и английским, ни начинающие.
viruoz
20.11.2009, 20:00
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
А можно сделать перевод параметров ядра, а то я английский не знаю, учил немецкий. В гугл переводчике перевожу но там переводит криво и не понятно все?
Гость
19.11.2009, 20:30
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Коротко, ясно, то что надо.
hellhammer
16.11.2009, 10:15
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Хотелось бы добавить, что для ускорения компиляции на многоядерных процессорах можно изменить переменную CONCURRENCY_LEVEL, это позволяет запускать несколько процессов компиляции.

Например
CONCURRENCY_LEVEL=5 make-kpkg --initrd kernel_image

Цифра 5 означает запуск 5-ти одновременных компиляций. Рекомендуется выбирать цифру из расчета количество ядер + 1( цифра 5 будет актуальна для 4-ядерных процессоров).
wanx
05.07.2011, 17:16
Постоянная ссылка на комментарийРодительский комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
для 4-х ядерных лучше ставить CONCURRENCY_LEVEL=8 (если поддерживается многопоточность HyperThreading, например на Core i3)
Гость
30.10.2009, 19:08
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Огромное спасибо
alex
16.10.2009, 14:24
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Красиво-четко мне понравилось!
Обязательно попробую!
Hinkloyd
05.09.2009, 20:52
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Все очень понятно. Пересобирал ядро по этой инструкции.
Если бы еще и был перевод параметров ядра - было бы вообще супер...
k4m454k
15.07.2009, 13:04
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Спасибо, всё предельно понятно и просто. Пишите ещё, и даже желательно поподробнее.
Так же хочется увидеть всё о совсеменных возможностях ядер в такой-же понятной форме
Язь
29.07.2010, 08:45
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Какой перевод параметров ядра=) вы чё, дуплите тех. англ, это очень полезно я с помощью линукса его выучил, так что это для вас ток плюс
Дмитрий
08.12.2010, 15:11
Постоянная ссылка на комментарийРодительский комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Естественно, перевод совсем ни к чему, а вот описание параметров - вещь полезная. Если кто еще не нашел, то вот, к примеру:
www.kryukov.biz/wiki/Параметры_ядра_Linux
Пользуйтесь на здоровье. Там все понятно и просто.
Аноним
26.03.2011, 06:28
Постоянная ссылка на комментарийРодительский комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Лучей добра тебе
VadimAndyАктивный
02.09.2016, 22:42
Постоянная ссылка на комментарийРодительский комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
точнява та же история =))
nessАктивный
04.09.2016, 13:32
Постоянная ссылка на комментарийРодительский комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
я с помощью убуки курить бросил, уже шестой год пошел как')).
Алексей
06.08.2010, 23:13
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
скажите а как добавить драйвер сетевой карты в ядро
nikitos_karАктивный
29.12.2010, 00:26
Постоянная ссылка на комментарийРодительский комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Параметры большинства сетевыз карт уже содержатся среди исходников ядра, надо только поискать. И кстати компилить их в составе ядра крайне не советую, оставьте в виде модуля. Модули рузятся после ядра, но работают так же хорошо, не загружая самого ядра.

А уж если у вас очень специфичный драйвер, то сия операция производится из уже загруженной системы. Щас расскажу как.
Разархивируете исходники ядра в любую папку, например /usr/tmp и набираете команду от имени root:
#make
для Убунтовцев отлично подойдет команда #sudo su, после чего вывводите свой пароль и получаете на 10 минут доступ суперпользователя. Если драйвер собрался, в папке появится файл с расширением .ko . Это файл модуля, скомпилированный под вашу систему. Следующее что вы делаете:
#modprobe .ko
система должна тут же включить модуль и прописать его в системе. Если не получилось, попробуйте:
#insmod .ko
Модуль подгрузится, правда при перезапуске снова будет выгружен. Тут уж вам поможет скрипт.
Вот как то так
nikitos_karАктивный
29.12.2010, 00:35
Постоянная ссылка на комментарийРодительский комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
поправка
#modprobe имя_модуля.ko
#insmod имя_модуля.ko
Максим
24.08.2010, 12:29
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Отличная статья, всё очень подробно, буду на днях пересобирать ядро.
Пересобираю ядро чтобы потом установить драйвера intel для видеокарточки (драйвера беру отсюда http://intellinuxgraphics.org/2010Q2.html).

Подскажите, я должен пересобирать всё поочереди - сперва ядро linux, потом x-server (для дров нужна новая версия), а потом собственно дрова, я правильно понимаю этот процесс?
Павел
26.08.2010, 22:10
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Страшновато это делать. Я, простите, туп в программировании, поэтому не обижайтесь на вопрос - а могу ли я отредактировать уже работающее ядро?
Андрей
29.08.2010, 02:07
Постоянная ссылка на комментарийРодительский комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Читайте внимательней.

"Выполните в терминале:

cd /usr/src/linux
sudo make oldconfig

В результате выполнения команды make oldconfig создастся файл .config, содержащий параметры конфигурации ядра."
Андрей
06.12.2010, 12:19
Постоянная ссылка на комментарийРодительский комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
так убунту ставится и сносится из под винды,угробить если че не страшно)) очень хорошая ос для начинающих линуксоидов,для экспериментов. а за статью огромное спасибо, все очень понятно)
Юрий
22.10.2010, 16:57
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Через 2 часа после начала компиляция появилась ошибка. Ошибка в makefile

:(((
Миша
06.12.2010, 00:54
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Хорошая статься, но почему то не грузиться ядро после компиляции..((
ivan
25.12.2010, 13:49
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Как-нибудь можно удалить потом папки с распакованным ядром и вот ту символьную linux? Мне пишет нет доступа.
VolandАктивный
28.12.2010, 19:57
Постоянная ссылка на комментарийРодительский комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Рут может все =)
nikitos_karАктивный
29.12.2010, 00:31
Постоянная ссылка на комментарийРодительский комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Во первых рут конечно может все :) но, проще переназначить ссылку.
#sudo su
набираете свой пароль
#cd /usr/src/
#ls linux*
Выведется на экран список из ваших исходников ядра. Выбираете новейший и делаете следующее:
#rm linux
удалили ссылку
#ln -s linux
все, ссылка заточена под ваше новое ядро.
nikitos_karАктивный
29.12.2010, 00:33
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
поправка ln -s linux-версия_ядра linux

Редактор воспринимает угловые скобки как тэги и не отображает. извините
deburgerАктивный
17.01.2011, 18:45
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
спасибо, очень помогло
гость
17.04.2011, 01:19
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
куда сохраняются 2 файла после компиляции? в /usr/src/linux их нет
VolandАктивный
08.07.2011, 22:34
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Я делаю это так. Скачиваю сорцы ядра, к примеру, с http://kernel.org "ваниль".

(я делаю гентушно: # emerge gentoo-sources)

распаковываю сорцы в /usr/src/2.6.***, делаю симлинк

# rm /usr/src/linux ; mkdir /usr/src/linux ; ln -s /usr/src/2.6.*** /usr/src/linux

(я делаю гентушно: # eselect kernel ядро)

далее
# cd /usr/src/linux
# cp /boot/config`uname-r` .config
# make oldconfig
# make menuconfig

и конечно же

# make bzImage ; make modules ; make modules_install ; make_install

Компилится, копируется в нужные директории и все. Если вы не нашли пакеты *.deb, значит что-то у вас с ошибкой во время компиляции вылетело. Внимательнее вывод смотрите.
VolandАктивный
08.07.2011, 22:38
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Опечатка:
# cp /boot/config-`uname-r` .config
Анатолий
19.07.2011, 16:08
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Товарищи, Присоединяйтесь к описанию опций ядра Linux. Мне одному тяжело тащить эту ношу. Вместе мы сможем описать все параметры. Подробности на сайте dvd-linux.ru
sergei9
30.08.2013, 13:47
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
у кого нибудь была вот эта ошибка и как ёе исправить?
root@debian:/usr/src/linux-headers-3.2.0-4-686-pae# make oldconfig
/usr/src/linux-headers-3.2.0-4-common/scripts/Makefile.build:44: /usr/src/linux-headers-3.2.0-4-common/scripts/basic/Makefile: Нет такого файла или каталога
make[3]: *** Нет правила для сборки цели `/usr/src/linux-headers-3.2.0-4-common/scripts/basic/Makefile'. Останов.
make[2]: *** [scripts_basic] Ошибка 2
make[1]: *** [sub-make] Ошибка 2
make: *** [all] Ошибка 2
VolandАктивный
30.08.2013, 20:42
Постоянная ссылка на комментарийРодительский комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Что это? Это же не каталог с исходниками ядра.
sergei9
30.08.2013, 22:26
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
точно,спс,вот я тупанул

Написать комментарий

Ваше имя:
Текст комментария: