Как пересобрать ядро для linux

Содержание
  1. Советы для успешной перекомпиляции ядра Линукс.
  2. Что есть ядро?
  3. В каких случаях прибегают к перекомпиляции ядра?
  4. Чтобы уменьшить размер ядра:
  5. Чтобы добавить или убрать поддержку тех или иных устройств:
  6. Чтобы изменить параметры системы:
  7. Каковы этапы рекомпиляции ядра?
  8. 1. Проверить и обновить необходимые пакеты
  9. Основные пакеты для проверки и обновления:
  10. Как устанавливать module-init-tools?
  11. 2. Получение исходного кода ядра
  12. 3. Получение информации о компьютерном «железе»
  13. 4. Как сконфигурировать ядро
  14. Шаги по конфигурированию ядра таковы:
  15. Рисунок 1: menuconfig
  16. Рисунок 2: Поиск параметров конфигурации
  17. Рисунок 3: Результаты поиска menuconfig
  18. Тип процессора и его характеристики
  19. Рисунок 4 menuconfig processor type
  20. Конфигурация сети (Networking)
  21. Драйверы устройств
  22. File Systems
  23. 5. Создание ядра
  24. 6. Конфигурация загрузчика
  25. 1. Определите, какой вид загрузчика у вас установлен.
  26. 2. Сконфигурируйте загрузчик
  27. 7.Перезагрузка сервера
  28. Заключение
  29. Как пересобрать ядро для linux
  30. 8.6.1. Управление образами ядра

Советы для успешной перекомпиляции ядра Линукс.

Оригинал: Tips for successful Kernel Recompilation in Linux
Дата: 1 января 2008
Свободный перевод: Алексей Дмитриев
Дата перевода: 10 января 2008

«Компилировать ядро — не орехи щелкать», — часто вздыхают те, у кого перекомпилированное ядро не хочет загружаться. Хотя орешек этот довольно крепок, однако перекомпиляция остается неизбежным делом, с которым каждый системный администратор Линукс рано или поздно столкнется.
Я тоже не избежала этой участи. В этой статье я собираюсь пройти с вами все фазы компиляции ядра. Я верю, что это придаст вам уверенности и компиляция перестанет быть для вас «невыполнимой миссией».

Что есть ядро?

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

В Линукс ядро представляет собой единственный файл, носящий имя vmlinuz. Начальные буквы vm обозначают виртуальную память (virtual memory), а последняя буква z говорит о том, что файл является сжатым. Файл vmlinuz находится в директории /boot.

В каких случаях прибегают к перекомпиляции ядра?

Чтобы уменьшить размер ядра:

Чтобы добавить или убрать поддержку тех или иных устройств:

Чтобы изменить параметры системы:

Каковы этапы рекомпиляции ядра?

1. Проверить и обновить необходимые пакеты

Этот этап нужен только при повышении версии ядра с 2.4 до 2.6. Если делается обновление версии 2.6.х до 2.6.х, то первый этап можно пропустить.

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

Основные пакеты для проверки и обновления:

При обновлении module-init-tools необходимо быть очень внимательным. Модулем называется программа, которая может быть включена в ядро по требованию (в случае необходимости). Module-init-tools содержат утилиты для управления модулями ядра Линукс — для загрузки, выгрузки, перечисления и удаления модулей. Основные доступные утилиты суть:

  • insmod
  • rmmod
  • modprobe
  • depmod
  • lsmod

Как modprobe, так и insmod используются для подключения модулей. Единственное отличие между ними состоит в том, что insmod «не знает» местоположение модулей и не предупреждает о зависимостях. Modprobe «знает» про это, просматривая файл /lib/modules/ /modules.dep

Как устанавливать module-init-tools?

# tar -zxf module-init-tools-3.2.2.tar.gz

2. Сконфигурируйте его:

# cd module-init-tools-3.2.2 # ./configure —prefix=/

3. Переименуйте существующую 2.4 версию утилиты в utility.old:

4. Создайте и установите:

5. Запустите скрипт generate-modprobe.conf для перевода данных из файла конфигурации модулей версии ядра 2.4 (/etc/modules.conf) в файл, применяющийся версией ядра 2.6 (/etc/modprobe.conf)

6. Проверьте версию имеющегося в наличии module-init-tools

2. Получение исходного кода ядра

Скачайте исходники с сайта http://www.kernel.org/pub/linux/kernel/v2.6/ . Вы можете поместить их в директорию /usr/src/kernels на вашем сервере. Если вы планируете обновление ядра до версии 2.6.19.2, то шаги будут таковы:

Читайте также:  Windows заблокирован заблокирована клавиатура

3. Получение информации о компьютерном «железе»

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

Эта утилита выдаст информацию о сетевой карте и всех устройствах, подключенных к машине. Если в ответ на ввод команды lspci вы получаете ошибку «lscpi: command not found» (команда не найдена), вам придется установить пакет pciutils-2.1.99.test8-3.4 rpm на ваш сервер.

Типичный вывод команды lspci выглядит примерно так:

Информацию о процессоре можно получить из файла /proc/cpuinfo

Полезная программа для получения информации о «железе». Она выдает детальное описание модулей. Прежде чем применять команду modinfo, нужно предварительно выяснить, какие модули загружены. Для этого служит команда lsmod — она выдает список загруженных модулей.

lsmod выдала модуль sata_svw, а детальную информацию про этот модуль можно получить с помощью команды modinfo.

4. Как сконфигурировать ядро

После получения исходников ядра, следующим шагом будет сконфигурировать ядро. Для этого есть несколько способов:

1. make config — эта утилита в командной строке задаст вам по очереди все возможные и невозможные вопросы по поводу конфигурации,

2. make xconfig — утилита, имеющая графический интерфейс, что подразумевает установку Иксов. Потому и не применяется на серверах.

3. make oldconfig — текстовая утилита, которая берет существующий файл конфигурации и запрашивает по поводу каждой переменной, не активизированной в этом файле.

4. make menuconfig — текстовой конфигуратор, основанный на управляемом курсором меню. Эта программа чаще всего используется для конфигурации ядра на серверах.

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

Шаги по конфигурированию ядра таковы:

Шаг 1: Скопируйте текущую конфигурацию ядра в директорию с вашими новыми исходниками.

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

Когда make oldconfig будет запрашивать значения переменных, сохраните старые значения.

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

Шаг 2: make menuconfig.

[root]# make menuconfig

На рисунке 1 представлено главное окно menuconfig. Только некоторые опции могут быть скомпилированы как модули. В menuconfig они обозначаются угловыми скобками . Нажмите M, чтобы компилировать как модуль. Значок звездочки [*] означает встроенное в ядро, M обозначает модуль.

Рисунок 1: menuconfig

Menuconfig предлагает функции поиска. Нажмите «/» для поиска любого модуля. Для примера: если вы не знаете, где искать модуль iptables, нажмите «/», введите «iptables» и нажмите enter.

Рисунок 2: Поиск параметров конфигурации

Рисунок 3: Результаты поиска menuconfig

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

Тип процессора и его характеристики

Subarchitecture Type : Выберите Generic architecture (Summit,bigsmp, ES7000, default)

Processor family : Выберите соответствующий процессор из предлагаемого списка. Для примера: если у вас модель Dual Core AMD Opteron(tm) Processor 170, то можете указать Opteron/Athlon64/Hammer/K8 в имеющихся опциях.

Если у вас многопроцессорный сервер, подключите опции: Symmetric multi-processing support и SMT (Hyper threading) scheduler support.

Если у вас больше 4 Гб оперативной памяти, подключите опцию High Memory Support (64GB).

И, в конце концов, раздел Processor type and features будет выглядеть вот так:

Рисунок 4 menuconfig processor type

Конфигурация сети (Networking)

В этом разделе подключаются Iptables

Все модули в разделе Core Netfilter Configuration and IP: Netfilter Configuration Должны быть подключены как модули.

Драйверы устройств

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

1. Block devices :Подключите RAM disk support и Loop back device support

Читайте также:  Линукс шлюз как узнать

2. SCSI device support: Подключите в секции SCSI low level drivers соответствующую модель, если она является SCSI устройством.

3. Serial ATA (prod) и Parallel ATA (experimental) drivers: Если у вас SATA жесткий диск, подключите соответствующий драйвер в этой секции. Для примера: Если у вас Intel PIIX/ICH SATA на сервере, подключите Intel PIIX/ICH SATA support в этом разделе.

4. Network device support: Подключите соответствующую сетевую карту. Для примера: Если у вас программа lspci выдала следующие данные сетевой карты:
Ethernet controller: Broadcom Corporation NetXtreme BCM5704 Gigabit Ethernet

File Systems

Когда с этим закончите, созраните настройки (save the settings) и выходите из программы (quit).

5. Создание ядра

Следующий шаг — создание ядра. Вы можете применить команду make bzImage для этой цели. Эта команда создаст сжатый файл bzImage в папке arch/i386/boot в директории исходников Линукс; этот файл и будет новым скомпилированным ядром.

Следующий шаг — компиляция и линковка (создание ссылок) модулей. Здесь применим команду make modules.

После этого необходимо скопировать модули в директорию /lib/modules/. Это делается при помощи команды make modules_install.

Последовательность команд следующая:

Опция -j велит системе проделать множество операций в Makefile вместе, что, в свою очередь, уменьшит время компиляции.

— это удвоенное число процессоров в вашей системе, или число виртуальных процессоров. Его можно узнать, применив следующую команду:

# cat /proc/cpuinfo | grep ^processor | wc -l

Когда это сделано, скопируйте все в директорию /boot следующим образом:

mkinitrd это программа, создающая образ инициирующего виртуального диска — initial RAM Disk Image (initrd).

6. Конфигурация загрузчика

Загрузчик — это первая программа, которая запускается при загрузке системы. Существует два вида загрузчиков: GRUB и LILO

1. Определите, какой вид загрузчика у вас установлен.

# dd if=/dev/hda bs=512 count=1 2>&1 | grep GRUB

Если совпадает (появляется вывод команды; прим. перев.), текущий загрузчик — grub. Если не совпадает (нет никакого вывода команды; прим. перев.), то проверьте на lilo:

# dd if=/dev/hda bs=512 count=1 2>&1 | grep LILO

Примечание: Если у вас винчестер SCSI или SATA, то вместо hda, пишите sda.

2. Сконфигурируйте загрузчик

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

lilo -v /sbin/lilo -R «Label for new kernel»

Если у вас GRUB, то добавьте запись для нового ядра в конец списка ядер в файле /etc/grub.conf. В GRUB первая запись имеет номер 0 (ноль). Вот пример записи:

Параметр переменной «panic» обеспечивает перезагрузку системы со старым ядром в случае kernel panic. Это означает, что в случае системного сбоя машина будет перезагружена с параметрами по умолчанию через 3 секунды.

Только не изменяйте значение переменной «default» в файле grub.conf. Когда будете перезагружаться, войдите в режим командной строки grub. Для этого нужно напечатать при появлении загрузочного приглашения команду «grub». Когда grub перейдет в режим командной строки, введите следующую команду:

savedefault —default=3 —once

Это в случае, если новая запись введена под номером 3. Затем выходите из режима командной строки grub.

7.Перезагрузка сервера

Перезагрузите сервер командой reboot. Если, паче чаяния, произойдет системный сбой — kernel panic, то система сама перезагрузится со старым ядром. Если все пойдет хорошо, то система будет загружена с новым ядром. Если система загружается с новым ядром, не забудьте изменить значение переменной «default» в файле grub.conf.

Заключение

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

Источник

Как пересобрать ядро для linux

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

Читайте также:  Swf player linux mint

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

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

Источник

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