- ru Make-Kpkg
- Компиляция и установка ядра Linux из исходников в Debian
- Содержание
- Примечание
- Способ первый. Сборка ядра в .deb пакеты
- Установка необходимых пакетов для компиляции ядра
- Скачиваем исходники ядра
- Накладывание патчей
- Конфигурирование ядра
- Компиляция ядра
- Решение проблемы с созданием initrd.img
- Установка нового ядра
- Способ второй. «traditional» way
- Следующие шаги
- Сборка и установка ядра под Debian
- Debian установка ядра линукс
- 8.6.1. Управление образами ядра
- [debian] Установка определённого ядра.
- ru
- Make-Kpkg
Компиляция и установка ядра Linux из исходников в Debian
Материал из Bryansk Linux Users Group и www.rm.pp.ru
В каждом дистрибутиве имеется своя специфика сборки ядра и эта статья ориентирована именно на то, как это сделать в Debian Etch. Так же раскрывается вопрос, как наложить тот или иной патч на ядро, когда необходима поддержка определенной функциональности или нового оборудования в Вашей системе. Статья предназначена в первую очередь на более подготовленных пользователей и нет никаких гарантий, что этот способ будет работать так, как надо и все описанные действия и ответственность ложатся на Вас.
Содержание
- Примечание
- Способ первый. Сборка ядра в .deb пакеты
- Накладываем патчи
- Конфигурирование ядра
- Компиляция ядра
- Установка нового ядра
- Способ второй. «traditional» way
- Проблемы
- Ссылки
Примечание
Будет описано два способа сборки ядра. Первым будет описан вариант сборки .deb пакетов, которые могут быть установлены в Вашей или другой системе. Второй метод, так называемый «traditional» путь.
Способ первый. Сборка ядра в .deb пакеты
Установка необходимых пакетов для компиляции ядра
Для начала обновим списки пакетов:
Установим нужные нам пакеты:
Скачиваем исходники ядра
Переходим в каталог /usr/src, идем на www.kernel.org и выбираем нужную версию ядра. В данном случае будет рассмотрена версия linux-2.6.23.1.tar.bz2. Скачиваем:
Распакуем исходники и создадим символьную ссылку:
Накладывание патчей
Опционально и без необходимости не делайте этого!
Иногда требуются драйвера или средства, которые не поддерживаются в имеющемся ядре, например технология виртуализации или иная другая специфика, которой нет в текущем релизе. В любом случае это исправляется наложением так называемых патчей (если таковые имеются).
Итак, предположим вы скачали необходимый патч (для примера назовем patch.bz2) в /usr/src. Применим скачанный патч на наши исходники (Вы должны быть все еще в каталоге /usr/src/linux):
Первая команда — только тест и никакие изменения не будут применены к исходникам. Если после первой команды не было выдано никаких ошибок, можно выполнить вторую команду для применения патча. Ни в коем случае не выполняйте вторую команду, если после первой были выданы ошибки!
Таким образом Вы можете накладывать патчи на исходники ядра. Например, имеются некоторые особенности, которые доступны только в 2.6.23.8 ядре, а исходники не содержали необходимой функциональности, но выпущен патч patch-2.6.23.8.bz2. Вы можете применить этот патч к исходникам ядра 2.6.23, но не 2.6.23.1 или 2.6.23.3 и т.д. Подробнее об этом можно прочитать на [1]:
Предъисправления (препатчи) — эквивалентны альфа релизам; патчи должны быть применены к исходникам полного предыдущего релиза с 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:
Конфигурирование ядра
Неплохой идеей будет использование существующего конфигурационного файла работающего ядра и для нового. Поэтому копируем существующую конфигурацию в /usr/src/linux:
Далее даем команду,
после которой загрузится графическое меню конфигурации ядра. Выбираем в меню конфигуратора пункт «Load an Alternate Configuration File» и нажимаем «Оk». Затем (если требуется) сделайте необходимые изменения в конфигурации ядра перемещаясь по меню (подробности конфигурации ядра можно найти в www.google.com ). Когда закончите и нажмете «Exit», будет задан вопрос «Do you wish to save your new kernel configuration?», отвечаем утвердительно «Yes».
Компиляция ядра
Сборка ядра выполняется всего в две команды:
После —append-to-version=, можно написать любое название, какое Вам угодно, но оно должно начинаться со знака минус (-) и не иметь пробелов.
Процесс компиляции и сборки .deb пакетов может занят довольно продолжительное время. Все будет зависить от конфигурации ядра и возможностей Вашего процессора.
Решение проблемы с созданием initrd.img
С недавнего времени в Debian появился баг, заключающийся в том, что после установки пакетов с собранными описанным здесь способом ядрами, не создаётся соответствующий им файл /boot/initrd.img. Для исправления применительно к уже установленному ядру, придётся создать initrd.img вручную:
Для решения проблемы «на будущее» – закомментировать, как показано, вторую из процитированных ниже строк в файле /etc/kernel/postinst.d/initramfs-tools:
Установка нового ядра
Когда удачно завершится сборка ядра, в каталоге /usr/src будут созданы два .deb пакета:
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). Устанавливаем их:
(Эти пакеты теперь могут быть установлены на другой системе и собирать их заново уже не будет необходимости.)
Всё, установка завершена, меню загрузчика, установка нового RAM-диска и ядра будут сделаны автоматически. Остается только перезагрузиться:
Способ второй. «traditional» way
Выполняем все пункты, описанные выше ДО пункта «Компиляция ядра».
Далее, традиционный способ:
Как обычно, сборка может занять продолжительное время, зависящее от конфигурации ядра и возможностей процессора.
Основной недостаток этого метода — если вы часто обновляете ядра, то через некоторое время их накопится большое количество и захочется удалить неиспользуемые. Чтобы это было сделать проще, можно собрать ядро и другие файлы, которые устанавливаются в систему по командам «make modules_install» и «make install» в deb-пакет (а точнее в два начиная с ядра 2.6.27) подобно первому способу, но воспользуемся здесь скриптами самого ядра:
В каталоге на уровень выше каталога исходников появятся два .deb-файла. Я собирал ядро в каталоге /usr/src/linux-2.6.27.10 и у меня в каталоге /usr/src/ появились файлы
Ядро устанавливается командой
Старые ядра можно удалять, например, из synaptic’a
Следующие шаги
Ядро собрано и установлено, но еще теперь необходимо создать RAM-диск (без которого ядро просто не загрузится) и необходимо обновить загрузчик GRUB. Для этого выполним следующее:
Обновим легко и безболезненно загрузчик:
Всё, загрузчик и новое ядро готовы, остается только перезагрузиться:
Источник
Сборка и установка ядра под Debian
Тут речь идти будет не просто про компиляцию ядра Linux, а про компиляцию ядра и его сборку в deb-пакет. Потом этим deb’ом можно будет поделиться с знакомыми, похвастаться перед любимой девушкой/парнем или просто, при необходимости, использовать повторно.
Для начала ставим пакеты fakeroot, kernel-package, libncurses5-dev:
Все зависимости будут подтянуты автоматом…
Затем берём нужный архив с kernel.org и сливаем и распаковываем его в /usr/src (берём для примера ядро 2.6.31.4).
Тут есть один момент. Так как у нас уже есть рабочее ядро в установленной системе то, если не хотим выставлять все галочки в конфигурации нового ядра с нуля, берём готовый config либо из /boot либо из /proc:
В итоге имеем предварительную заготовку к конфигурации нашего нового ядра.
Теперь конфигурируем ядро под специфические для нас цели, либо добавляем опции для новых модулей, либо… Одним словом — творчество:
Тут интересно будет отметить, что если мы сразу-же выйдем из меню, то можем увидеть что-то подобное этому:
имеет смысл найти эти опции при конфигурировании нового ядра и посмотреть что да к чему…
Или, как мне подсказали, использовать:
для компиляции новой версии, которая все совпадающие опции трогать не будет, а насчёт остальных, которые изменились, спросит.
Кстати, если кому интересно под X-ами заниматься конфигурированием, то может сделать так:
Важно! Не забываем сказать «Kernel module loader» в «Loadable module support», так как возможны варианты.
Ну всё. Пимпочки поотмечали, кнопочки понажимали, из окошек вышли, новый конфиг сохранили, теперь приступим к сборке. Для начала сделаем:
Увидим что-то наподобие этого:
Ну, а теперь, собственно, собираем ядро:
og.091015.00 — означает лишь ревизию нашей сборки (меньше букв, но больше цифр, иначе получите ошибку в под самый конц сборки и придётся всё повторять с самого начала), а в остальном может быть любой — у кого насколько фантазии хватит 🙂
После того как предыдущая команда нормально выполнится, можно также дать такой «джентельменский набор»:
После этого получим набор из следующих deb-пакетов:
- linux-image-2.6.31.4_og.091015.00_i386.deb
- linux-headers-2.6.31.4_og.091015.00_i386.deb
- linux-manual-2.6.31.4_og.091015.00_all.deb
- linux-doc-2.6.31.4_og.091015.00_all.deb
- linux-source-2.6.31.4_og.091015.00_all.deb
располагаться они будут в /usr/src.
Нам остаётся их только установить через dpkg:
и т.д.
Конфигурация к GRUB’у должна будет выполниться автоматически, равно как и собраться initrd.
Финальный шаг:
Источник
Debian установка ядра линукс
Зачем пересобирать ядро? Обычно этого делать не нужно, так как ядро, устанавливаемое по умолчанию в Debian, подходит для многих конфигураций. Кроме этого, в Debian есть ещё несколько сборок ядра. Поэтому, сначала проверьте, может другой пакет с ядром лучше подходит для вашего компьютера. Однако, полезно пересобрать ядро в следующих случаях:
если установлено специфичное оборудование или возникает конфликт аппаратного обеспечения со стандартным ядром
чтобы задействовать свойства, которых нет в поставляемых сборках ядра (например, поддержка high memory)
для оптимизации ядра, удаляя ненужные драйверы для уменьшения времени загрузки
создания монолитного ядра, без модулей
для установки обновлённого или разрабатываемого ядра
чтобы больше узнать о ядрах linux
8.6.1. Управление образами ядра
Не бойтесь пересобирать ядро. Это забавно и полезно.
Чтобы собрать ядро по технологии Debian, вам потребуются некоторые пакеты: fakeroot , kernel-package , linux-source-2.6 и некоторые другие, которые, вероятно, уже установлены (в /usr/share/doc/kernel-package/README.gz есть полный список).
С помощью этого метода создаётся .deb файл из исходных текстов ядра, а также, если у вас имеются нестандартные модули, делается .deb файл с синхронизированными зависимостями. Это наилучший способ управления образами ядра; в /boot лежит ядро, System.map и журнальный конфигурационный файл от сборки.
Заметим, что вам не обязательно собирать ядро « по технологии Debian » ; но мы пришли к выводу, что управлять ядрами с помощью системы управления пакетами на самом деле безопаснее и легче. Фактически, вы можете получить исходные тексты ядра прямо у Линуса, а не в виде linux-source-2.6 , и собрать ядро с помощью kernel-package .
Заметим, что полную документацию по использованию kernel-package можно найти в /usr/share/doc/kernel-package . Этот раздел содержит лишь краткое руководство.
Далее мы предполагаем, что вы можете делать на своей машине что угодно и распаковываете исходные тексты ядра в домашний каталог [22] . Также мы предполагаем, что у вас ядро версии 3.16. Проверьте, что вы находитесь в каталоге куда хотите распаковать исходные тексты ядра, распакуйте их с помощью команды tar xf /usr/src/linux-source-3.16.tar.xz и перейдите в только что появившийся каталог linux-source-3.16 .
Теперь вы можете выполнить настройку ядра. Если установлены, настроены и запущены X11, то запустите make xconfig , иначе make menuconfig (вам потребуется установить пакет libncurses5-dev ). Внимательно прочитайте интерактивную документацию и внимательно выберите нужные параметры. Если что-то непонятно, обычно лучше включить драйвер устройства (программное обеспечение, которое управляет установленным оборудованием, например, картами Ethernet, SCSI-контроллерами и так далее). Будьте осторожны: для других параметров, не относящихся к определённому аппаратному обеспечению, нужно оставить значения по умолчанию, если вы не понимаете, что они делают. Не забудьте выбрать « Kernel module loader » в « Loadable module support » (не включён по умолчанию). Если его не включить, возникнут проблемы с установкой Debian.
Очистите дерево исходных текстов и сбросьте параметры kernel-package . Для этого выполните make-kpkg clean .
Теперь соберите ядро: fakeroot make-kpkg —initrd —revision=1.0.custom kernel_image . Номер версии « 1.0 » можно изменить; этот номер версии нужен только для отслеживания ваших сборок. Более того, вы можете добавить любое слово вместо « custom » (например, имя машины). Сборка ядра может занять некоторое время в зависимости от мощности машины.
После завершения сборки вы можете установить собранное ядро как обычный пакет. От суперпользователя выполните dpkg -i ../linux-image-3.16- субархитектура _1.0.custom_i386.deb . Часть субархитектура — это необязательная субархитектура, например, « 686 » , зависящая от установленных параметров ядра. dpkg -i установит ядро вместе с некоторыми полезными файлами поддержки. Например, будет правильно установлен System.map (полезен при отладке проблем с ядром), а также /boot/config-3.16 , содержащий параметры сборки ядра. Также, пакет способен автоматически использовать системный загрузчик платформы для обновления загрузки. Если вы создали пакет с модулями, то вам нужно установить и его.
Настало время перезагрузить систему: внимательно прочитайте все предупреждения, которые могут появиться, затем наберите shutdown -r now .
Подробней о ядрах Debian и сборке ядра смотрите в Debian Linux Kernel Handbook. Полная информация о kernel-package лежит в каталоге /usr/share/doc/kernel-package .
[22] Есть несколько мест куда можно распаковывать исходные тексты и собрать своё ядро, но это самый лёгкий способ без необходимости раздачи специальных прав.
Источник
[debian] Установка определённого ядра.
Hello, скачал дебиан 6.0.2 , установил
Linux debian 2.6.32-5-amd64 #1 SMP Mon Jan 16 16:22:28 UTC 2012 x86_64 GNU/Linux
Мне требуется установить ядро 2.6.39-bpo.2-amd64. Как это сделать?? Никак не могу найти в сети image с данным ядром.
Очень сильно боюсь показаться глупым. Но спрошу. Я скачал оттуда linux-image-2.6.39-bpo.2-amd64_2.6.39-3
bpo60+1_amd64.deb И что дальше с ним делать? пробую установить через Gdebi Package installer . И мне выдаёт эту ошибку Error: Dependency is not satisfiable: linux-base (>= 3
apt-get -f install
dpkg -i linux-image-2.6.39-bpo.2-amd64_2.6.39-3
Ну и предварительно подключить backports, т.к. linux-base нужной версии только там.
В /etc/apt/sources.list добавил запись deb http://www.backports.org/debian lenny-backports main contrib non-free
далее
apt-get -f install ./linux-image-2.6.39-bpo.2-amd64_2.6.39-3
bpo60+1_amd64.deb
Выведено оочень много строк. Примерно такого вида.
Далее всё заканчивается примерно этим.
apt-get -f install ./linux-image-2.6.39-bpo.2-amd64_2.6.39-3
apt-get -f install
Т.е. без всяких других параметров.
Записал новый адрес в /etc/apt/sources.list но всё никак (
Это надо делать после dpkg -i. Пакет ставить так:
Кстати, обязательно именно 39-е? Сейчас в бэкпортах есть поддерживаемое 3.2.
Да, к сожалению нужно именно это ядро (((
Сейчас делаю :
зачем ./ то? вы же выполняете команду в той же папке, где лежит пакет.
dpkg —force-depends-version -i linux-image-2.6.39-bpo.2-amd64_2.6.39-3
apt-get -f install
После этого ставь ядро (без —force-. должно поставиться) а «apt-get -f . » уже не понадобится.
Опять тожесамое ((.. а нет никаких способов попроще эти ядра установить. всмысле это ядро.
а нет никаких способов попроще эти ядра установить.
[fat16] make -j4; make modules_install; cp arch/x86/boot/bzImage /boot/
Не может быть. Показывай выхлоп обеих команд.
Установил! спасибо огромное за помощь!
Аналогично и на другие дистрибутивы ядра ставить?
И ещё хочу узнать, что значат эти числа
К примеру ввожу uname -a ,мне выдаёт версию ядра, к примеру 2.6.32.36-228-scalaxy
И вот мне интересно число 228 что означает? да и scalaxy Если я буду собирать модуль скажем для 2.6.32.36-200-scalaxy он запустится на ядре 2.6.32.36-228-scalaxy ?
тебе нужны бэкпорты (bpo это сокращение от backport). первая ссылка в гугле приведёт на нужный сайт, там есть все инструкции как подключить репозиторий. Можно и руками скачать и через dpkg вкрячить ведро, но тогда не будут прилетать обновления.
Оттуда выкинули 2.6.39. Теперь только 3.2, зато с нормальной поддержкой.
Аналогично и на другие дистрибутивы ядра ставить?
нет, эти «шаманства» дистрибутивозависимые.
А зачем тебе именно это ядро понадобилось?
Это мне по работе нужно. Сам я никогда не нуждался в установке подобных ядер, всегда хватало стандартного обновления системы.
Вот снова проблема, но уже с ядром 2.6.32.36-228-scalaxy где взять такое? где искать? как понял это ubuntu , на сайте (http://archive.ubuntu.com/ubuntu/pool/main/l/linux/) есть ядра 2.6.32.36 но ни одного scalaxy . В чём вообще отличие generic , preempt, generic-pae, server ? Ну и самое основное..гдеж взять этот scalaxy .
ну это понятно. Вопрос для чего. Но если это секрет то ладно.
Вот снова проблема, но уже с ядром 2.6.32.36-228-scalaxy где взять такое?
А если «погуглить» по слову «scalaxy», то можно найти сайт: https://www.scalaxy.ru/ .
В чём вообще отличие generic , preempt, generic-pae, server ?
В каждой редакции любого дистрибутива используется своя версия ядра, более новая, относительно предыдущих редакций. Разработчики дистрибутива осуществляют сборку ядра с некоторым набором опций ядра, для достижения различных целей, как правило это поддержка максимального набора оборудования, которое поддерживает эта версия ядра с патчами, которые наложили разработчики. Эту версию, к примеру для Ubuntu, можно назвать Generic.
Ядро с префиксом preempt скорее всего собрано с опцией CONFIG_PREEMPT, для снижения задержек в режиме реального времени работы операционной системы. Это ядро для системы реального времени.
Ядро с префиксом generic-pae существует только в 32 битной версии, т.к. в нём задействовано расширение Physical Address Extension при задействовании которого 32 битная система может адресовать больше 4 гигабайт оперативной памяти. 64 битная версия и так может работать с памятью больше 4 гигабайт.
Ну а в ядре с префиксом server задействованы опции не нужные на обычной Desktop системе и важные для применения в серверных системах, специализированные драйверы, специальные планировщики ввода/вывода, kvm (возможно) и прочее.
И всё же что вы такое хотите настроить, что вам требуются именно эти версии ядер. Предположу, что вы читайте кем-то написанное руководство, покажите. Скорее всего не обязательно использовать именно эти ядра, их скорее всего привели как пример., и уж тем более именно эти версии ядер.
kostik87
Спасибо за пояснение.
Продолжу глупые вопросы, как получить исходники для этого ядра? (headers source) 2.6.39-bpo.2-amd64
Это ядро для системы реального времени.
Пробую установить linux-headers-2.6.39-bpo.2-amd64
и мне выдаёт следующее
http://s59.radikal.ru/i165/1202/1c/98443a9b349c.png
Поясните пожалуйста, как мне установить headers ?
Linux headers — это не исходники ядра. Это лишь заголовочные файлы ( .h) и параметры, с которыми было собрано ядро, в частности ядро linux-image-2.6.39-bpo.2-amd64 вы сможете установить linux-headers, если у вас будет установлено это ядро.
Зачем вам нужно конкретно это ядро ?
Хорошо, я ошибся, напишите правильный ответ, но ошибся я не сильно, т.к. эта опция позволяет прервать выполнение менять приоритет процесса, что позволит его раньше прервать (переключиться с него).
а чего это, серьёзно, в debian даже в тестинге ядро собрано без PREEMPT?
как они это оправдывают? не юзабельно же при заметной нагрузке на систему
правильный ответ: CONFIG_PREEMPT включает вытесняемое ядро; те процесс может быть прерван шедулером, находясь в сисвызове; это увеличивает отзывчивость на десктопе
real-time это совсем другой вопрос; возможности для его реализации в стандартном ядре линукса нет; но есть отдельный патч, и соотв. опция в его конфиге: CONFIG_PREEMPT_RT_FULL
кстати, ядро с rt-патчем в дебиане есть а с обычным preempt нет, хз чо они курят
Спасибо за уточнение. Насчёт того, что в обычном ядре нет поддержки жёсткого и мягкого реального времени я в курсе. Но «в живую» т.к. сказать не работал с такой системой и не настраивал. Только QNX.
Источник