Последнее ядро linux. Собираем ядро Linux

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

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

Apt-cache search linux-source

Команда выведет список доступных пакетов:


Как видите, у меня есть только пакет с текущей версией и пакет с версией 3.5 (на самом деле текущая версия ядра тоже 3.5). Расширить список ядер, доступных таким образом, стоит подключить дополнительные репозитории. Получить ядро мы можем командой: sudo apt-get install linux-source

linux-source - имя пакета с исходным кодом, в вашем случае может быть другим.
После завершения работы команды в директории /usr/src появится файл, в моем случае - linux-source-3.5.0.tar.bz2. Перейдем в папку, распакуем архив и ради удобства создадим символическую ссылку:

Cd /usr/src sudo tar -xjvf linux-source-3.5.0.tar.bz2 sudo ln -s linux-source-3.5.0 linux

Если же вам нужна самая свежая версия ядра, то её всегда можно скачать с сайта kernel.org. Стоит заметить, что на сайте выкладываются как стабильные версии ядер так и версии предназначенные для тестирования и доработки(обычно в их названии есть содержится аббревиатура «RC» - Release candidate). Если вы не желаете лишних проблем с системой, советую скачивать стабильную версию:

Сохраним архив с исходниками в папку /usr/src. Чтобы распаковать полученный архив вам может понадобиться установить дополнительные утилиты:

Sudo apt-get install xz-utils

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

Cd /usr/src sudo tar -xpJf linux-3.8.5.tar.xz sudo ln -s linux-3.8.5.tar.xz linux

Конфигурация и компиляция.
Вот мы и подошли к самому интересному. Прежде чем начать, установим несколько дополнительных пакетов:

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

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

Cd /usr/src/linux sudo make oldconfig

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

Sudo make menuconfig

В терминале запустится программа конфигурирования:

Здесь параметры конфигурации разделены на разделы, чтобы в них было удобнее ориентироваться. Как я уже говорил выше, мне нужно включить в ядро поддержку cryptoloop. Для этого нужно перейти в раздел «Device Drivers», а из него в подраздел «Block Devices»:

Находим параметр «Cryptoloop Support», рядом с ним стоит буква «М» что означает что поддержка шифрующих устройств будет добавлена как модуль ядра, который можно будет включить командой modprobe. Нам же надо включить поддержку данной технологии непосредственно в ядро, чтобы она поддерживалась всегда. Переводим фокус на параметр «Cryptoloop Support» и нажимаем на пробел. Буква «М» должна смениться символом "*" это означает что поддержка данной технологии будет «вшита» в ядро. Осторожно, пробел означает что технология вообще поддерживаться не будет.

Нажимаем клавишу «Tab» и нажимаем на кнопку «Exit» до тех пор пока не появится запрос на сохранение изменений:

Отвечаем «Yes». Мы успешно закончили конфигурирование!
Приступим к компиляции. Сначала удаляем файлы оставшиеся от предыдущих сборок, если вы запускаете сборку впервые выполнять эту команду не обязательно: sudo make-kpkg clean

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

Sudo make-kpkg -j4 --initrd --append-to-version=-mykernel kernel_image kernel_headers

J4 - флаг, указывает какое количество потоков использовать для компиляции. Позволит сильно ускорить компиляцию на многоядерных процессорах. Цифра 4 тут указывает на 4 потока. Ставьте столько потоков сколько ядер вашего процессора «видит» система.
-mykernel - префикс указывающий что ядро было собрано вручную, можете его изменить, фактически ни на что не влияет.

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

Установка ядра в систему

После завершения компиляции, в директории /usr/src должны появится два файла с расширением «deb» они являются установочными пакетами нашего нового ядра и установить их можно с помощью утилиты dpkg:

sudo dpkg -i linux-image-3.8.5-mykernel_3.8.5-mykernel-10.00.Custom_i386.deb
sudo dpkg -i linux-headers-3.8.5-mykernel_3.8.5-mykernel-10.00.Custom_i386.deb

Поздравляю! Ядро установлено, теперь система будет загружаться с этим ядром по умолчанию, но если у вас возникнут проблемы с новым ядром вы всегда можете загрузится со старым выбрав его на экране загрузки - Grub. На этом я завершаю сегодняшнюю статью и желаю успехов, вам, уважаемые читатели!

Имеющаяся информация о сборке ядра сильно разнится, поэтому будем описывать сборку ядра именно для 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 в полный режим с вашим ядром.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Настраиваем загрузчик

Правим /etc/default/grub примерно таким образом:

GRUB_DEFAULT=0
# GRUB_HIDDEN_TIMEOUT=10
# GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i-s2>/dev/null ||echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

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

sudo update-grub

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

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

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

sudoapt-get installgitgccmakebc fakeroot dpkg-dev \
libncurses5-dev libssl-dev

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

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

wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.6.4.tar.xz
tar—xz-xvf linux-4.6.4.tar.xz
cd linux-4.6.4

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

# Mirror: https://github.com/torvalds/linux
git clone’git://git.kernel.org/pub/scm/linux/kernel/git/’\
‘torvalds/linux.git’
cd linux

Судя по тому, что тэга v4.6.4 в Git’е мне найти не удалось, релизы ядра Linux оформляются исключительно в форме сжатых tar-архивов.

Если же вместо ванильного ядра вы хотели бы собрать ядро с патчами от компании Canonical:

git clone git://kernel.ubuntu.com/ubuntu/ubuntu-trusty.git
cd ubuntu-trusty
git tag|less
git checkout Ubuntu-lts-4.4.0-31.50_14.04.1

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

Примечание: Интересно, что из существующих сравнительно популярных дистрибутивов Linux ядро без собственных патчей, похоже, используют только Gentoo, Slackware и Arch Linux.

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

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

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

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

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

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

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

make-j4 bindeb-pkg LOCALVERSION=-custom

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

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

Сборку этого пакета можно отключить, закомментировав в конфиге параметр CONFIG_DEBUG_INFO. Только учтите, что этот пакет требуется SystemTap и другим полезным инструментам.

Помимо самого ядра также можно собрать и документацию:

# еще есть `make pdfdocs` и другие, см `make help`
make htmldocs
chromium-browser Documentation/DocBook/index.html

По окончании сборки в дочернем каталоге видим что-то вроде:

linux-firmware-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-headers-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom-dbg_4.4.13-custom-1_amd64.deb
linux-libc-dev_4.4.13-custom-1_amd64.deb

Ставим все deb-пакеты кроме dbg-версии ядра обычным и перезагружаемся. После перезагрузки смотрим на вывод команды. Убеждаемся, что действительно загрузились с новым ядром. Если с новым ядром что-то не так, в загрузчике просто выбираем то, с которым система загружалась до этого. После загрузки со старым ядром поскорее удаляем пакеты нового ядра, и вуаля — система вернулась к прежнему состоянию.

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

sudomake kselftest
sudomake kselftest-clean

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

Заключение

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

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

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

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

Метки: Linux, Ring0.

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


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

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

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


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

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

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


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

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

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


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

Случайные:

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

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

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

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

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

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

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

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


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

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

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

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

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

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

kernel-source-2.4.2-2.1386.rpm

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

утилита make;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

модульные;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

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

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

# apt-get update

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

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

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

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

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

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

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

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

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

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

Итак, предположим вы скачали необходимый патч (для примера назовем patch.bz2) в /usr/src. Применим скачанный патч на наши исходники (Вы должны быть все еще в каталоге /usr/src/linux):

# bzip2 -dc /usr/src/patch.bz2 | patch -p1 —dry-run # bzip2 -dc /usr/src/patch.bz2 | patch -p1

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

Таким образом Вы можете накладывать патчи на исходники ядра. Например, имеются некоторые особенности, которые доступны только в 2.6.23.8 ядре, а исходники не содержали необходимой функциональности, но выпущен патч patch-2.6.23.8.bz2. Вы можете применить этот патч к исходникам ядра 2.6.23, но не 2.6.23.1 или 2.6.23.3 и т.д. Подробнее об этом можно прочитать на :

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

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

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

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

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

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

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

# make menuconfig

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

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

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

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

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

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

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

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

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

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

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

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

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

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

# cd /usr/src # ls -l

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

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

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

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

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

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

# make all # make modules_install # make install

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

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

# make all # make deb-pkg

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

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

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

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

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

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

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

# depmod 2.6.23.1 # apt-get install yaird

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

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

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

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

Проблемы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Случайные:

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

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

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

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

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

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

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

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


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

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

Определитесь с дистрибутивом Linux

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

Предположим, что вы выбрали себе дистрибутив и хотите его скачать. Каждый дистрибутив Linux обычно можно скачать бесплатно в разных форматах. Обычно они представляют собой ISO файлы. ISO файл — это образ CD или DVD диска. Чаще всего CD или DVD версии отличаются только тем, что на DVD версиях больше различного программного обеспечения, которое вы можете установить прямо с диска либо в процессе установки Linux, либо после установки в любое время.

Какой Linux качать (i386, x86_64, amd64...)

Еще Linux можно скачать под различные платформы. Обычно разработчики дистрибутивов предлагают 32-х битные и 64-х битные версии Linux. Какую вам выбрать зависит прежде всего от разрядности вашего процессора. Как правило, все современные процессоры 64-х битные.

32-х битные версии Linux обычно обозначают как i386, а 64-х битные — x86_64 (для процессоров Intel) и amd64 (для процессоров Amd).

Вы также можете встретить такие названия, как arm, mips, ppc и другие. Это версии Linux специально собранные для процессоров Arm, Mips, PowerPC.

На домашних компьютерах и в ноутбуках обычно используются процессоры Intel или Amd, поэтому вас скорее всего будут интересовать именно i386, x86_64, amd64.

Где скачать дистрибутив Linux

Итак, вы определились с дистрибутивом Linux. Вам остается перейти на сайт разработчика дистрибутива и найти там раздел для скачивания, он может называться как-нибудь типа Downloads, Get It, Get ISO, Скачать, Загрузить.

Одним из самых быстрых способов скачать Linux это использовать торрент файлы. Работает это следующим образом. Вы скачиваете себе torrent файл и с помощью торрент клиента запускаете скачивание уже самого Linux. Торрент клиенты для Linux можно найти в каталоге программ в разделе «Torrent клиенты ».

Одна и та же версия дистрибутива Linux может размещаться на разных серверах (зеркалах). Чем ближе территориально к вам находится сервер и чем выше его пропускная способность, тем быстрее скачаете Linux. Популярным Российским зеркалом, где можно скачать Linux является зеркало от Яндекса: https://mirror.yandex.ru или FTP версия ftp://mirror.yandex.ru

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

Дистрибутив Где скачать
Ubuntu
  • Скачать Ubuntu Desktop (основная версия Ubuntu для домашнего пользования)
Debian
Arch Linux
Gentoo
OpenSUSE
Fedora
  • ISO образ Fedora (версия Workstation для персонального использования)
  • FTP зеркало на Яндексе (для персонального использования выбирайте версию Workstation)
Slackware
И другие Каталог дистрибутивов Linux (на странице каждого дистрибутива есть ссылка на официальный сайт).

Где скачать ядро Linux

Любую версию исходного кода ядра Linux всегда можно скачать на сайте kernel.org .

Как заказать диск с Linux

Если ни один из способов вам не подходит, то вы можете найти в своем городе энтузиастов, которые согласятся передать вам диск с 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

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