Make oldconfig не работает

Ошибка в конце сборки ядра

Пытаюсь собрать ядро 3.2.2, скаченое с kernel.org под последним Debian test. Конфиг для ядра беру с установленной системы. В конце процесса сборки ошибка:

make[3]: *** Нет правила для сборки цели `net/ipv4/netfilter/ipt_ecn.c’, требуемой для `net/ipv4/netfilter/ipt_ecn.o’. Останов. make[2]: *** [net/ipv4/netfilter] Ошибка 2 make[1]: *** [net/ipv4] Ошибка 2 make: *** [net] Ошибка 2

make oldconfig делался перед сборкой?

Готов биться об заклад, что нет.

Конфиг ядра. cp /boot/config-3.0.0-1-amd64 . /linux-3.2.2/.config. Затем выполняю make menuconfig -> load config -> save config Час назад специально попытался собрать ядро, выполнив перед сборкой make oldconfig, это не помогло, ошибка та же. Вообще собирал по мануалу http://nix.zeya.org/wiki/Компиляция_ядра_в_Debian_Squeeze

и ошибку 1 надо угадать, да?

делаем все по пунктам:

1. cd «туда где новое ядро» 2. make clean && make mrproper 3. zcat /proc/config.gz > .config 4. make oldconfig(отвечаем на вопросы) 5. make && make modules_install (ну или как там в debian принято? ) 6. profit.

а само ядро? (arch/x86/boot/bzImage)

zcat /proc/config.gz — нет такого файла. Чем предложенный вариант принципиально отличается копирования конфига из каталога /boot? Вот выдержка из мануала:

Скопируем конфиг из /boot в /usr/src/kernel-3.2.2/ и переименуем в .config. Запускаем конфигуратор ядра: # make menuconfig Выбираем пункт «Load an Alternate Configuration File» и загружаем для правки файл .config , который мы скопировали в текущий каталог. После конфигурирования, выбираем пункт «Save an Alternate Configuration File» и сохраняем конфиг с тем же именем .config компиляция: # make-kpkg clean # fakeroot make-kpkg —initrd —revision=custom.1.0 kernel_image

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

Хорошо, почему тогда файл в каталоге proc недоступен? Ничего похожего на этот файл я там не нашёл. Есть какие-то идеи? Может быть попробовать изменить конфиг и отключить функции, которые дают ошибку?

Для начала — man make-kpkg

Хорошо, почему тогда файл в каталоге proc недоступен

Веротно старое ведро собранно без поддержки Kernel .config support

поддержка /proc/config.gz не включена в ядре, либо включена модулем
если второе — modprobe configs

но в дебиане проще — конфиг ядра идёт с ним, где-то емнип, в /boot или /usr/src

В Debian нет /proc/config.gz, но есть /boot/config-$(uname -r).

Перед make menuconfig нужно сделать make oldconfig.

Источник

Что делает» make oldconfig » именно в файле makefile ядра Linux?

может ли кто-нибудь объяснить, что целевой «oldconfig» делает именно в файле makefile ядра Linux? Я вижу, что на него ссылаются в некоторой документации по сборке, но никогда не объяснял, что именно он делает.

6 ответов

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

перед запуском «make oldconfig» вам необходимо скопировать файл конфигурации ядра из старого ядра в корневой каталог нового ядра.

вы можете найти копию старого файла конфигурации ядра на работающей системе в /boot/config-3.11.0 . Кроме того, исходный код ядра имеет конфигурации в linux-3.11.0/arch/x86/configs/

Если ваш источник ядра находится в /usr/src / linux

резюме

как уже упоминалось Игнасио, он обновляет свой .config для вас после обновления источника ядра, например, с помощью git pull .

он пытается сохранить существующие варианты.

наличие скрипта для этого полезно, потому что:

новые опции могут быть добавлены, или старые удалены

формат конфигурации Kconfig ядра имеет параметры что:

  • подразумевают друг друга через select
  • зависит от другого via depends

эти отношения опций делают ручное разрешение конфигурации еще сложнее.

давайте .config вручную, чтобы понять, как он разрешает конфигурации

сначала создайте конфигурацию по умолчанию с помощью:

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

чтобы увидеть, что происходит. Некоторые выводы:

являются не просто комментариями, но фактически указывают, что параметр не установлен.

например, если мы удалим строку:

и работать make oldconfig , он спросит нас:

когда это закончится, .config файл будет обновлен.

если вы измените какие-либо характер линии, например, # CONFIG_DEBUG_INFO , это не в счет.

всегда используются для отрицания свойства, хотя:

также понимается как отрицание.

например, если вы удалите # CONFIG_DEBUG_INFO is not set и ответ:

С N , то выходной файл содержит:

кроме того, если мы вручную измените строку на:

и работать make oldconfig , затем строка изменяется на:

без oldconfig спрашивая нас.

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

и работать make oldconfig . Теперь он попросит нас: DEBUG_INFO_REDUCED , DEBUG_INFO_SPLIT , etc. конфигурации.

эти свойства не появляются на defconfig до.

если мы посмотрим под lib/Kconfig.debug где они определены, мы видим, что они зависят от DEBUG_INFO :

когда DEBUG_INFO был выключен, они вообще не появлялись.

конфигурации, которые являются selected включенными конфигурациями автоматически устанавливаются без запроса пользователя.

, если CONFIG_X86=y и убираем строку:

и работать make oldconfig , линия воссоздается, не спрашивая нас, в отличие от DEBUG_INFO .

это происходит потому, что arch/x86/Kconfig содержит:

запрашиваются конфигурации, ограничения которых не выполняются.

например, defconfig установил:

если мы редактируем:

и работать make oldconfig , он спросит нас:

это так RCU_FANOUT определена в init/Kconfig as:

, без 64BIT , максимальное значение составляет 32 , но у нас было 64 установить на .config , которое сделало бы его противоречивым.

бонусы

make olddefconfig устанавливает для каждого параметра значение по умолчанию без интерактивного запроса. Он запускается автоматически на make чтобы убедиться, что .config согласуется в случае, если вы изменили его вручную, как это сделали мы. См. также: https://serverfault.com/questions/116299/automatically-answer-defaults-when-doing-make-oldconfig-on-a-kernel-tree

make alldefconfig как make olddefconfig , но он также принимает фрагмент конфигурации для слияния. Эта цель используется merge_config.sh скрипт:https://stackoverflow.com/a/39440863/895245

и если вы хотите автоматизировать .config изменение, это не так просто:как вы неинтерактивно включаете функции в ядре Linux .файл config?

Источник

Проблема с сборкой модуля.

Добрый день. Пытаюсь скомпилить модуль для ядра 2,6,30 для дистра Mandriva. При попытке компиляции make -C /usr/src/kernel-linus-`uname -r` SUBDIRS=$PWD
Выдаётся данная ошибка:

Перемещено JB из Development

У тебя ядро сконфигурено или ты просто сорцы распаковал?

Читайте также:  Не работает микрофон action

make -C /usr/src/kernel-linux-`uname -r` SUBDIRS=$PWD должно помочь

> Run ‘make oldconfig && make prepare’ on kernel src to fix it.

тебе же английским по-черному пишут, что сделать надо

Pavval — просто сорцы рапаковал )
ananas — зашёл в папку с исходниками, там сделал make oldconfig && make prepare и теперь компиляция вроде как запускается нормально.
Если можно, поясните мне смысл этой команды и что от неё изменяется, что происходит вообще?

Ты установил Linux =)

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

Дистр Mandriva 2009 , исходиники через их установщик пакетов скачал.
Сейчас повнимательней вывод компиляции посмотрел, вот какая ошибка.

Что можно с этим сделать и как?

Проблема решена) мне просто тупить не надо было. Сорцы для компиляции были в папке kernel-linus-devel-2.6.30-2mdv а не kernel-linus-2.6.30-2mdv

Источник

Что именно делает «make oldconfig» в make-файле ядра Linux?

Может ли кто-нибудь объяснить, что именно делает целевой «oldconfig» в make-файле ядра Linux? Я вижу, что на него ссылаются в какой-то документации по сборке, но я никогда не объяснял, что именно он делает.

6 ответов

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

Перед запуском make oldconfig вам необходимо скопировать файл конфигурации ядра из более старого ядра в корневой каталог нового ядра.

Вы можете найти копию старого файла конфигурации ядра в работающей системе по адресу /boot/config-3.11.0 . В качестве альтернативы исходный код ядра имеет конфигурации в linux-3.11.0/arch/x86/configs/

Если исходный код вашего ядра находится в /usr/src/linux :

Обновляет старую конфигурацию новыми / измененными / удаленными параметрами.

Make oldconfig берет .config и запускает его через правила файлов Kconfig и создает .config, который соответствует правилам Kconfig. Если какие-либо значения CONFIG отсутствуют, make oldconfig запросит их.

Если .config уже соответствует правилам, найденным в Kconfig, то make oldconfig, по сути, не работает.

Если вы запустите make oldconfig, а затем запустите make oldconfig во второй раз, второй раз не вызовет внесения каких-либо дополнительных изменений.

Это пытка. Вместо того, чтобы включать общий файл conf, они заставляют вас нажимать return 9000 раз, чтобы сгенерировать его.

Резюме

Как упоминалось Игнасио, он обновляет ваш .config для вас после обновления исходного кода ядра, например с git pull .

Он пытается сохранить ваши существующие варианты.

Наличие сценария для этого полезно, потому что:

могли быть добавлены новые параметры или удалены старые

Формат конфигурации ядра Kconfig имеет следующие параметры:

  • подразумевают друг друга через select
  • зависеть от другого через depends

Эти отношения опций еще больше затрудняют разрешение конфигурации вручную.

Давайте изменим .config вручную, чтобы понять, как он разрешает конфигурации

Сначала сгенерируйте конфигурацию по умолчанию с помощью:

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

Чтобы увидеть, что происходит. Некоторые выводы:

являются не просто комментариями, а фактически указывают на то, что параметр не установлен.

Например, если мы удалим строку:

и запустите make oldconfig , он спросит нас:

Когда он закончится, файл .config будет обновлен.

Если вы измените любой символ строки, например до # CONFIG_DEBUG_INFO , это не в счет.

всегда используются для отрицания свойства, хотя:

также понимается как отрицание.

Например, если вы удалите # CONFIG_DEBUG_INFO is not set и ответите:

с N , тогда выходной файл будет содержать:

Кроме того, если мы вручную изменим строку на:

и запустите make oldconfig , тогда строка изменится на:

без нашего запроса oldconfig .

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

и запустите make oldconfig . Теперь он запросит у нас: DEBUG_INFO_REDUCED , DEBUG_INFO_SPLIT и т. Д. Конфигурации.

Эти свойства не отображались на defconfig раньше.

Если мы посмотрим в раздел lib/Kconfig.debug , где они определены, мы увидим, что они зависят от DEBUG_INFO :

Поэтому, когда DEBUG_INFO был выключен, они вообще не появлялись.

Конфиги, которые selected включены включенными конфигами, устанавливаются автоматически без запроса пользователя.

Например, если CONFIG_X86=y и мы удалим строку:

и запустите make oldconfig , строка воссоздается без запроса, в отличие от DEBUG_INFO .

Это происходит потому, что arch/x86/Kconfig содержит:

Запрашиваются конфигурации, ограничения которых не выполняются.

Например, defconfig установил:

Если мы редактируем:

и запустите make oldconfig , он спросит нас:

Это потому, что RCU_FANOUT определяется в init/Kconfig как:

Следовательно, без 64BIT максимальное значение равно 32 , но мы установили 64 для .config , что сделало бы его несовместимым.

Бонусы

make olddefconfig устанавливает для каждой опции значение по умолчанию без интерактивного запроса. Он запускается автоматически на make , чтобы гарантировать согласованность .config в случае, если вы изменили его вручную, как это сделали мы. См. Также: https://serverfault.com / questions / 116299 / automatic-answer-defaults-when-doing-make-oldconfig-on-a-kernel-tree

make alldefconfig похож на make olddefconfig , но он также принимает фрагмент конфигурации для слияния. Эта цель используется скриптом merge_config.sh : https://stackoverflow.com/a/39440863/895245

И если вы хотите автоматизировать модификацию .config , это не так просто: Как в неинтерактивном режиме включать функции в файле .config ядра Linux?

Источник

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

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

Из прошлого поста мы уже знаем, что ядро Linux обладает минимальными возможностями и поддержкой оборудования, но при необходимости мы можем расширить возможности ядра с помощью kernel modules (модулей ядра). Для чего может понадобиться сборка или пересборка собственного ядра? Например для включения/отключения каких-либо новых возможностей, или обновление старого ядра на более новое с поддержкой новых возможностей, или просто для опытов как в нашем примере.

Получение исходников ядра и подготовка к конфигурированию

Можно несколькими путями получить исходники:

    1. Получить оригинальные архивы кода с The Linux Kernel Archives , в виде gzip или bzip2 архивов, с помощью команды:
  1. Получить исходники из репозиториев дистрибутивов (например: Debian , Ubuntu , CentOS i386 ) в виде бинарного пакета deb или rpm (src.rpm) с патчами от производителя дистрибутива. Например:

Хочу отметить, что имя архива с исходниками или пакета, имеет примерно следующий вид: linux-source-2.6.26 либо kernel-source-2.6.18. Из листинга второго примера, видно что при установке исходников из репозитория, apt нам предлагает установить и остальные сопутствующие пакеты, без которых ядро собрать не получиться.

Читайте также:  Не работает corsair vengeance

Итак. После получения исходников одним из вышеуказанных путей (копировании архива (в первом случае) и установки пакета (во втором случае)), мы получаем в каталоге /usr/src/ — архив с именем, аналогичным linux-source-2.6.26.tar.bz2. Далее нам необходимо распаковать дынный архив командой: tar -xjf linux .tar.bz2. В результате, получаем дерево каталогов исходников ядра, расположенные в каталоге /usr/src/linux-2.6.36.1/. Так же рекомендуется создать символьную ссылку /usr/src/linux на вышеуказанный каталог:

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

В распакованном дереве подкаталогов содержится файл Makefile. make-файл содержит различные цели сборки для конфигурирования опций ядра, сборки ядра и его модулей, установки модулей и сборки пакетов RPM или deb. Наиболее свежие версии исходников ядра позволяют использовать make help для получения краткой справки для каждой цели. В более старых системах было необходимо обращаться к документации или просматривать make-файл. Ниже показана часть вывода make help :

Далее, если по каким либо причинам на ядро необходимо наложить патч, то его следует скачать заранее и положить в каталог /usr/src. Если патчить ядро не нужно, можно смело переходить к конфигурированию. Патчится ядро следующим образом:

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

Текущая конфигурация ядра хранится в файле .config. Данный файл формируется при помощи одной из конфигурационных целей (цель — это, говоря простым языком, команда выполняемая в виде make цель):

config

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

cloneconfig

Копирование настроек текущего ядра в файл .config. Данная цель устарела и в новых ядрах заменена oldconfig. (удобно для добавления новых функция текущего ядра)

menuconfig

Цель menuconfig использует программу с меню-интерфейсом, построенную на базе ncurses, для создания или обновления файла .config. Вы должны только ответить на вопросы для элементов, которые хотите изменить. Этот подход заменил старую цель config. Выполняется в окне терминала удаленно или локально.

nconfig

Цель nconfig использует программу с меню-интерфейсом, построенную на базе ncurses, для создания или обновления файла .config. Данная версия основана на menuconfig, но имеет более современный внешний вид. Добавлена после релиза Linux-ядра 2.6.35. Вы должны только ответить на вопросы для элементов, которые хотите изменить. Выполняется в окне терминала удаленно или локально.

xconfig

Цель xconfig использует систему графического меню, основанную на QT front-end, используемом в KDE desktop.

gconfig

Цель gconfig использует систему графического меню, основанную на GTK front-end, используемом в GNOME desktop.

oldconfig

Цель oldconfig позволяет создать конфигурацию с использованием существующего файла .config, созданного ранее или взятого из другой системы. Например, вы можете скопировать конфигурационный файл для вашей системы из /lib/modules/$(uname -r)/build/.config в /usr/src/linux. Сделав это, можно использовать одну из целей меню конфигурации, чтобы при необходимости внести изменения. Так же при выполнении данной команды, если в новом ядре добавлено много новых возможностей — будет задано много вопросов по настройке новых параметров. (удобно для добавления новых функция текущего ядра)

Повторяю, что список всех целей команд можно увидеть, введя make help. Итак, начнем конфигурирование. Самая удобная для консоли, имхо — make menuconfig.

После запуска команды, у меня вывалилось страшное сообщение:

Чего-то не хватает, подумал Штирлиц (С). Наверно пакета,содержащего имя ncurses и раз уж это libraries, то скорее всего, пакет начинается на lib. Я полез в репозиторий:

Эта строка: libncurses5-dev — developer’s libraries and docs for ncurses мне показалась нужной. Давайте установим:

Готово, пробуем make menuconfig:

Ура! Мы видим заветное меню конфигурирования ядра. Ниже показаны различные опции, позволяющие включать компоненты в ядро или создавать модули. Когда опция подсвечена, при помощи клавиши пробела можно перемещаться между возможными вариантами для данного компонента. Чтобы активировать опцию, нажмите y, чтобы отключить — n, чтобы создать, если это возможно, модуль, нажмите m. Выход из меню: Esc Esc.

  • [*] Компонент будет включен в ядро.
  • [ ] Компонент не будет включен в ядро.
  • [M] Компонент будет оформлен в виде модуля.
  • Компонент не будет включен в ядро, но может быть оформлен в виде модуля.

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

Раздел Пареметр Описание
General setup Этот раздел позволяет добавить идентификационную строку к вашему ядру, а также ряд атрибутов, которые не имеют отношения к каким-либо разделам, но тем не менее должны быть описаны.
Enable loadable module support Этот раздел содержит опции, определяющие, будет ли ваше ядро поддерживать модули и будут ли они подгружаться и выгружаться автоматически. Опцию «Enable loadable module support» следует включить.
Processor type and features Этот раздел содержит специфичные для данного типа процессора конфигурационные опции. Здесь вы можете выбрать процессор и семейство процессора, которые будут поддерживаться вашим ядром. Вы можете включать или отключать поддержку ядром различных возможностей, предоставляемых данным процессором. Убедитесь, что вы включили поддержку многопроцессорных систем (symmetric multi-processing support), если в вашем системе установлено более одного процессора или процессор поддерживает технологию hyperthreading. Кроме того, для получения большей производительности графической подсистемы в системах с AGP или PCI видеокартами следует включить поддержку MTRR.
Power management options В этом разделе помещены опции, касающиеся управления питанием. Особенно они важны для ноутбуков. Кроме контроля состояния питания, вы сможете найти там средства для контроля и мониторинга таких параметров как температура или состояние охлаждающего вентилятора.
Bus options (PCI etc.) Этот раздел содержит опции для компьютерных шин, поддерживаемых вашей системой, таких как PCI, PCI Express и PC Card. Здесь вы можете включить поддержку файловой системы /proc/pci, которой можно пользоваться вместе с обычно используемой командой lspci.
Executable file formats / Emulations Этот раздел содержит опции, касающиеся поддержки различных форматов бинарных файлов. Следует включить поддержку «ELF binary». Кроме того, можно включить поддержку DOS binaries для запуска их под DOSEMU, также как и других поддерживаемых соответствующими wrapper’ами бинарных файлов, таких как Java™, Python, Emacs-Lisp и т.д. Наконец, для 64-битных систем, поддерживающих 32-битную эмуляцию, вы, возможно, захотите включить поддержку 32-битных приложений.
Networking Секция, касающаяся настроек сети, довольно велика. Здесь вы можете включить базовую поддержку сокетов, сетей TCP/IP, фильтрацию, маршрутизацию и bridging сетевых пакетов, а также поддержку различных протоколов, таких как IPV6, IPX, Appletalk и X.25. Кроме того, вы можете включить поддержку wireless, infrared и amateur radio.
Device drivers Этот раздел также очень велик. Здесь вы можете включить поддержку большого числа аппаратных устройств, включая IDE/ATAPI или SCSI диски, или flash-диски. Включите DMA для ваших IDE устройств; иначе они будут работать в более медленной PIO-моде. Если вы хотите иметь поддержку multiple devices, таких как RAID или LVM, соответствующие опции также надо включить. Здесь вы также можете включить поддержку параллельного порта для работы с принтером через этот интерфейс. Здесь происходит конфигурирование широкого набора поддерживаемых сетевых устройств для различных сетевых протоколов, которые мы конфигурировали ранее. Кроме того, здесь вы найдете опции поддержки устройств аудио- и видео-захвата, устройств USB и IEEE 1384 (Firewire), а также различного рода устройств аппаратного мониторинга. В разделе управления символьными устройствами (Character Devices) вы, возможно, захотите включить поддержку печати через параллельный порт и поддержку direct rendering.
Firmware drivers Этот раздел содержит несколько опций, относящихся к установке и обновлению BIOS, таких как использование функций Dell System Management на некоторых системах производства компании Dell.
File systems Этот раздел предназначен для конфигурирования файловых систем, поддержку которых вы хотите иметь в вашем ядре, скомпилированных в виде модулей или нет. Также вы сможете найти здесь файловые системы для съемных дисковых устройств (дискеты, CD и DVD устройства), а также сетевых файловых систем, таких как NFS, SMB или CIFS. Поддержка различных типов разделов и национальных кодировок Native Language Support также располагаются в этом разделе.
Kernel hacking Этот раздел позволяет включать режим отладки ядра и выбирать, какие дополнительные функции будут включены.
Security options Этот раздел предназначен для конфигурирования опций защиты, а также включения и конфигурирования SELinux (Security Enhanced Linux).
Cryptographic options В это разделе можно сконфигурировать поддержку различных алгоритмов шифрования, таких как MD4, DES и SHA256.
Library routines Здесь вы можете указать ряд алгоритмов вычисления контрольных сумм (CRC), которые будут включены в ядро или собраны как модули.
Читайте также:  Воздухоотводчики почему не работает

Я привел очень краткое описание разделов конфигурирования ядра. Конкретно по выбору настроек, я наверно, сделаю отдельный пост, ибо текущий вырос до огромных размеров. Самое лучшее описание настроек make menuconfig я нашел тут Gentoo Handbook . От себя скажу, что логичным будет выполнить make oldconfig (тем самым скопировав текущий .config установленной ОС), а потом запустить make menuconfig и отключить все ненужные функции (допустим я отключил поддержку WiFi, ненужных мне файловых систем jfs и т.п.). И в общем, я сторонник такого мнения, что заниматься оптимизацией ядра необходимо в очень крайних случаях, когда производительность ОС упирается в возможности железа. Соответственно, уменьшив размер ядра (отключив ненужные модули, включив их в состав ядра + отключив ненужные возможности), можно прибавить в производительности 1-2%. А на современных серверах, думаю это (переконфигурирование ядра) не особо актуально.

Сборка Ядра

Теперь, когда мы сконфигурировали ядро, мы готовы к его сборке. Если вы не знаете, каково состояние дерева для сборки, прежде чем приступать к конфигурированию нового ядра выполните make clean . Для более полной очистки выполните make mrproper (при этом — make mrproper — будет удален файл .config, а также некоторые другие файлы, используемые в процессе сборки).

В ходе пробы конфигурирования, желательно дать новому ядру специальное название, которое позволит вам легко его идентифицировать. Чтобы сделать это, необходимо установить значение Local version и активировать опцию Automatically append version information to the version string в соответствующей строке раздела General setup.

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

Чтобы начать сборку ядра 2.6, необходимо выполнить make .

Чтобы начать сборку ядра 2.4, необходимо выполнить 3 команды:
make dep
make bzImage
make modules
Первая создает файлы необходимых зависимостей. Вторая собирает ядро. И последняя собирает модули.

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

После окончания сборки ядра, его необходимо установить. Перед установкой, необходимо выполнить make modules_install для установки модулей ядра в новый подкаталог /lib/modules. После установки модулей, необходимо выполнить make install для установки нового ядра и стартового RAM-диска (initial RAM disk) в каталог /boot и обновления конфигурации загрузчика.

Хочу обратить внимание, что в процессе сборки автоматически создается необходимый стартовый RAM-диск (initial RAM disk или initrd). Если у вас возникнет необходимость создать его вручную, это можно сделать при помощи команды mkinitrd .

После выполнения make install должен обновиться конфигурационный файл загрузчика. Но у меня он почему-то обновился после команды update-grub .

На этом и закончу. Очень большая статья получилась. В ближайшем будущем постараюсь ее ужать.

Что еще почитать?

1. Gentoo Handbook: http://www.gentoo.org/doc/ru/handbook/handbook-x86.xml?full=1#book_part1_chap7
2. Ставим ядро 2.6, или Ядерная физика для домохозяйки. Версия 2.0: http://linux4u.jinr.ru/docs/add04/kernel-2.6-install-2.0.html
3. The Linux Kernel Module Programming Guide (Программирование ядра Linux): http://linux4u.jinr.ru/docs/add04/lkmpg.html
4. Linux From Scratch: http://linux4u.jinr.ru/docs/add04/LFS-BOOK-5.0-HTML/

Резюме

Подведу маленький итог написанному. Скажу сразу, что загрузиться с переконфигурированного ядра мне удалось раза с пятого:) Посему — пробуйте, экспериментируйте! VirtualBox вам в помощь:)

По моему мнению, указанную в статье процедуру целесообразно выполнять либо при необходимости выиграть несколько мегабайт свободной памяти, либо добавить необходимые модули/драйвера (конечно, можно и другие причины придумать, например для экспериментов ). При этом, в первом случае, сборка ядра растягивается на неопределенный промежуток времени и неопределенное количество попыток сборки и перезагрузки для того чтобы получить «идеально» оптимизированное под железо и заточенное под себя ядро. Во втором случае, сборка ядра сводится к нескольким шагам: 1. получение исходников, 2. подготовка ядра к компиляции, 2.1 выполнение make cloneconfig перед make menuconfig для копирования текущих настроек ядра, 3. Выполнение make menuconfig или другой цели для конфигурирования и добавления новых параметров, 4. Компиляция и установка по вышеуказанной инструкции.

Итак, сборка и настройка индивидуального ядра состоит из нескольких этапов: 1. получение исходников ядра, 2. Конфигурирование ядра, 3. Сборка (компиляция) ядра, 4. Установка ядра. первый этап — это команда wget, второй — make menuconfig, третий — make. Вот так

Буду рад Вашим комментариям.

upd 2010.01.15: добавил новую цель — make nconfig (спасибо S_paul за коммент)

Источник

Оцените статью