Компьютерная помощь
Сайт комнаты "Компьютерная помощь"

В недра ядра (краткий ман по сборке ядра linux с исходного кода)

Системы *nix » Помощь, настройка | 16 июля 2016 г.

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

НО! Есть одна проблема.. мы никогда раньше этого не делали! Всё за нас делал менеджер пакетов нашего дистрибутива и от нас требовалось в худшем случае команда с консоли, в лучшем нажатие пары кнопок. Это пособие предназначено для тех, кто не боится лезть в недра ядра системы и не боится убить её в случае неудачной сборки. Чтож, пристегнём ремни и вперёд!

Перед нами лежит архив linux-.tar.bz2 либо linux-.tar.gz . Что с ними делать? правильно! нужно их распаковать, запускаем консоль от имени root и начинаем наши добрые деяния (при написании мануала я предполагаю что необходимые для компиляции пакеты, такие как gcc, phyton, module-init-tools и т.д. уже установлены, если нет, то необходимо их установить до начала процесса конфигурирования и сборки)
Распаковываем архив в каталок /usr/src/

tar -xvjpf linux-.tar.bz2 -C /usr/src/

либо

tar -xvpf linux-.tar.gz -C /usr/src/

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

rm /usr/src/linux

и создаём симлинк на новые сорсы

ln -sf /usr/src/linux- /usr/src/linux

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

cd /usr/src/linux

и вызываем меню конфигурации:

make menuconfig

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

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

Если же получилось так, что вы не знаете нужен ли вам какой-то определённый элемент, стоит посмотреть Info о нём (кнопка Info есть в меню, навигация между кнопками осуществляется клавишами курсора <- и -> (left, right)). Если же данная информация не помогла определится с выбором элемента, можно включить этот элемент как модуль ядра. Выбор Элемента осуществляется клавищей space (пробел) и возможно 3 варианта выбора:

  • [*], <*> - элемент встаивается прямиком в образ ядра;
  • <m> - элемент создаётся как внешний модуль и подгружается системой по мере надобности;
  • [ ], < > - элемент не будет включён в ядро;

Как включать элемент в ядро - непосредственно ваше дело, хочу отметить лишь то, что при включении элемента в образ ядра ( * ), увеливичивается размер образа, а образ при старте системы полностью загружается в ОЗУ и остаётся там вплоть до выключения ПК. Включение элемента как модуль уменьшает образ ядра, но увеличивает время реакции системы на событие, связанное с этим модулем. Сейчас я отмечу те пункты, которые обязательно должны быть включены в образ ядра ( * ), чтобы система успешно стартовала.

  1. Элементы поддержки IDE, SATA, RAID контроллеров.
  2. Элементы поддержки набора системной логики (I2C support, только для того набора, который установлен в вашем ПК)
  3. Поддержка шин PCI, PCI-E, AGP (в зависимости от того что нужно конечно)
  4. Поддержка систем, обслуживающих процессор (напр. powernow, Machine Check Exception и т.д.)
  5. Поддержка файловых систем и локалей, используемых на данном ПК
  6. Поддержка USB-хабов (OCHI, ECHI, UCHI, естественно только тех что поддерживаются мат. платой. Установка лишнего элемента конечно не помешает системе запустится, но он попросту будет жрать далеко не резиновую ОЗУ)
  7. Систему поддержки загрузки внешних модулей (Loadable Module Support)

В принципе всё необходимое я уже указал, но как рекомендация: следует включить поддержку сетевых плат, USB накопителей (USB Mass Storage Support), технологий внешних накопителей (USB-Flash, NAND и т.д., но не самих чипов... поддержку конкретных чипов лучше включить модулями ( М )), поддержку Framebuffer устройств (для запуска консоли в FB режиме используя vga или vesa драйвер (выбранный драйвер должен быть также включён в образ ядра ( * )). Также рекомендую включить в ядро системы криптования и защиты (Cryptographic API и Security Options). Далее выбираем нужные нам модули. После того как конфигурирование на ваш взгляд закончено, несколько раз жмём ESC, пока нам не будет выдано сообщение типа

Do you wish to save your new kernel configuration? <ESC> to continue.

в нём отвечаем yes. Конфигурация нашего ядра будет сохранена с файле .config прямо в этом каталоге. Затем даём команду на компиляцию ядра и установку модулей:

make && make modules_install

Ждём.

Если в процессе компиляции вылезла какая-то ошибка и процесс остановился (на warning-и можно не обращать внимания, они не страшны и системе не вредят), то смотрим на каком элементе процесс остановился, снова вызываем менюконфиг и переделываем конфиг.

Когда всё таки ядро скомпилировалось и модули успешно установились, мы должны скопировать образ ядра, конфиг и файл "системной карты" в каталог /boot. Если он вынесен отдельным разделом, его нужно примонтировать:

mount /boot

Далее есть несколько способов, можно использовать make install для копирования всего что нам надо в /boot, либо выполнить это руками:

cp arch/<архитектура под которую собирали ядро>/boot/bzImage /boot/
cp .config /boot/bzImage.config
cp System.map /boot/System.map-bzImage

Примечание. Файл Initrd. Этот файл по сути служит образом, из которого будут подключаться модули ядра во время его запуска. НО! Если вы включили в ядро ( * ) всё, что необходимо для успешного запуска, то этот файл можно не создавать, в таком случае система будет подгружать модули из /lib/modules. Поэтому создание его не обязательно. Если же он необходим, то используем для этого специальные утилиты (напр. genkernel или mkinitrd) и получившийся файл тоже копируем в /boot.

После этого редактируем конфигурационный файл загрузчика, указываем ему новый образ ядра, новый initrd файл (если нужно) а также дописываем в строке образа ядра нужные опции. Как конкретно это делается смотрите в man-e к вашему загрузчику.

Вот собственно и всё. Новое ядро собрано, оно гораздо компактнее ядра от сообщества, и более "заточено" под ваш конкретный ПК. Перезагружаемся и в случае успешного запуска системы радуемся жизни. Для полного счастья набираем в консоли

uname -r

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

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

Удачи.

Автор: WindowsMustDie

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru yandex.ru

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



Комментариев: 0

    Оставьте комментарий!

    Используйте нормальные имена

    Вы можете войти под своим логином или зарегистрироваться на сайте.

    (обязательно)