Приложение A. Построение собственного ядра

Многие люди, новички в Linux, часто спрашивают: "Зачем мне нужно собирать собственное ядро?" Учитывая возможности, появившиеся вместе с модульностью ядра, наиболее точно на этот вопрос можно ответить так: "Если вы не знаете зачем это делать, вероятно вам и не нужно это".

В прошлом, вы должны были перекомпилировать ядро при установке в компьютер нового оборудования. Другими словами, ядро было статическим. Улучшения, внесённые в ядра Linux 2.0.x, позволили драйверам многих устройств стать модулями в составе различных компонентов, загружаемых по требованию. Тем не менее, пользователи использующие несколько ядер, собранных для разных конфигурации компьютеров, например SMP и UP, сталкивались с серьезными проблемами. Улучшения модульности ядра, внесённые в Linux 2.4.x, допускают сосуществование множества ядер, не разделяющих общие модули.

За информацией об управлении модулями ядра, обратитесь к Главе 24. Пока вы не построите собственное ядро своей системы, вы не заметите изменений в поддержке модулей ядра.

Построение модульного ядра

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

Выполнив следующие действия, вы сможете построить своё ядро для архитектуры x86:

ЗамечаниеЗамечание
 

В этом примере используется версия ядра 2.4.7-3. Версия вашего ядра может отличаться. Чтобы определить версию вашего ядра, выполните команду uname -r. Замените 2.4.7-3 версией вашего ядра.

  1. Очень важно убедиться в том, что у вас есть аварийный загрузочный диск, который понадобится, если вы допустите ошибку. Если вы не сделали его во время установки, выполните команду mkbootdisk, чтобы сделать его сейчас. Команда выглядит примерно так: mkbootdisk --device /dev/fd0 2.4.x, где 2.4.x - полная версия вашего ядра (как, например, 2.4.7-3). Сделав это, проверьте загрузочный диск, чтобы убедиться в том, что с него можно загрузиться.

  2. Вы должны установить пакеты kernel-headers и kernel-source. Выполните команды rpm -q kernel-headers и rpm -q kernel-source, чтобы определить их версии, если они установлены. Если они не установлены, установите их, воспользовавшись Red Hat Linux CD 1 или FTP-сайтом Red Hat, по адресу: ftp://ftp.redhat.com (список зеркал доступен по адресу: http://www.redhat.com/mirrors.html). Обратитесь к Главе 25 за информацией об установке RPM пакетов.

  3. Перейдите в приглашении оболочки в каталог /usr/src/linux-2.4. Все следующие команды должны выполняться в этом каталоге.

  4. Важно начать построение ядра, когда дерево исходных текстов находится в подходящем состоянии. Поэтому рекомендуется начать построение с выполнения команды: make mrproper. Она удалит все файлы конфигурации вместе с остатками предыдущих компиляций, возможно, разбросанных по всему дереву исходных текстов. Если у вас уже есть рабочий файл конфигурации (/usr/src/linux-2.4/.config), который вы хотите использовать, скопируйте его в другой каталог до выполнения команды, а затем, выполнив команду, верните его на место. Если вы используете существующий файл конфигурации, пропустите следующий шаг.

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

    Если вы работаете в системе X Window, для этого рекомендуется выполнить команду make xconfig. Компоненты перечислены на различных уровнях меню, и выбираются с помощью мыши. Вы можете выбрать Y (yes), N (no), или M (module). Выбрав компоненты, нажмите кнопку Save and Exit (Сохранить и выйти), чтобы создать файл конфигурации /usr/src/linux-2.4/.config и выйти из программы Linux Kernel Configuration (Настройка ядра Linux).

    Другие способы настройки ядра приведены ниже:

    • make config — Интерактивная программа с текстовым интерфейсом. Она представляет компоненты в линейном формате, и вы выбираете их один за другим. Этот способ не требует использования системы X Window и не позволяет вам изменять ответы на предыдущие вопросы.

    • make menuconfig — Программа с текстовым интерфейсом, управляемая с помощью меню. Компоненты распределены в меню по категориям; вы выбираете нужные компоненты также, как и в программе установки Red Hat Linux с текстовым режимом. Отметьте элемент, который вы хотите включить, соответствующим символом: [*] (встроенный), [ ] (исключён), <M> (модуль), или < > (модуль поддерживается). Этот способ также не требует использования X Window.

    • make oldconfig — Это не интерактивный сценарий, который установит в вашем файле конфигурации значения по умолчанию. Если вы используете ядро Red Hat по умолчанию, он создаст файл конфигурации для ядра, поставляемого с Red Hat Linux для вашей архитектуры. Это полезно для восстановления работоспособных настроек ядра по умолчанию, для того, чтобы затем выключить ненужные вам возможности.

    ЗамечаниеЗамечание
     

    Чтобы использовать kmod (подробности вы найдете в Главе 24) и модули ядра, во время настройки вы должны ответить Yes (Да) на вопросы относительно kmod support и module version (CONFIG_MODVERSIONS) support.

  6. Создав файл /usr/src/linux-2.4/.config, выполните команду make dep, чтобы правильно настроить все зависимости.

  7. Выполните команду make clean, чтобы подготовить дерево исходных текстов к компиляции.

  8. На следующем этапе построения модульного ядра вы должны изменить файл /usr/src/linux-2.4/Makefile, чтобы не перезаписать существующее ядро. Способ, описанный здесь, позволяет вам проще легче всего восстановить систему в случае неудачи. Если вам интересны другие возможности, подробности вы сможете найти на странице: http://www.redhat.com/mirrors/LDP/HOWTO/Kernel-HOWTO.html или в файле Makefile каталога /usr/src/linux-2.4 в вашей системе Linux.

    Отредактируйте в файле /usr/src/linux-2.4/Makefile строку, начинающуюся с EXTRAVERSION =, чтобы получить "уникальное" имя, добавив в конце дату. Например, если вы компилируете ядро версии 2.4.7-3, вы можете добавить несколько символов, чтобы строка выглядела примерно так: EXTRAVERSION = -0.1.21-jul2001. Это позволит вам в вашей системе одновременно иметь и старое рабочее ядро, и новое ядро, версии 2.4.7-3-jul2001.

  9. Постройте ядро, выполнив команду make bzImage.

  10. Постройте все настроенные модули, выполнив make modules.

  11. Установите модули ядра (даже если вы не компилировали ни одного), выполнив make modules_install. Убедитесь в том, что вы ввели подчеркивание (_). При этом модули ядра окажутся в каталоге /lib/modules/KERNELVERSION/kernel/drivers, где KERNELVERSION - версия ядра, указанная в файле Makefile. В рассматриваемом примере это будет каталог /lib/modules/2.4.7-3-jul2001/kernel/drivers/.

  12. Если у вас установлен SCSI адаптер и вы сделали драйвер SCSI модульным, постройте новый образ initrd(обратитесь к разделу Создание образа initrd; заметьте, что есть несколько причин делать драйвер SCSI модульным в собственном ядре). Если у вас нет причин на то, чтобы создавать образ initrd, не создавайте его и не добавляйте его в lilo.conf.

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

  14. Теперь ядро построено и установлено. Теперь вы должны настроить в загрузчике системы загрузку нового ядра. Обратитесь к разделу Настройка загрузчика системы за дополнительной информацией.