Kernel/Gentoo Kernel Configuration Guide/ru

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

Введение
Операционной системой Gentoo предусматриваются два способа управления установкой и обновлением ядра: автоматический (genkernel) и вручную. Хотя автоматический способ может рассматриваться как более легкий для пользователя, существует множество причин, по которым большинство пользователей Gentoo выбирают конфигурацию ядра вручную: большая гибкость, меньшие размеры ядра, более короткое время компиляции, приобретение опыта, сильная скука и т. д.


 * 1) greater flexibility,
 * 2) smaller (kernel) sizes,
 * 3) shorter compilation times,
 * 4) the learning experience,
 * 5) severe boredom,
 * 6) absolute knowledge of kernel configuration, and/or
 * 7) complete control.

В этом руководстве не охватывается автоматический способ конфигурации ядра (genkernel). Если для компиляции и установки ядра требуется использовать утилиту genkernel, обратитесь к Genkernel documentation.

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

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

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


 * В Руководстве по версиям ядер перечислены различные доступные пакеты с исходными текстами ядра.
 * В Руководстве по обновлению ядра объясняется как обновить ядро или перейти с одного на другое.
 * В Настольной книге Gentoo также охватываются некоторые аспекты установки ядра.

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

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

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

Сравнение встроенных в ядро параметров и загружаемых модулей ядра
Большинство параметров конфигурации могут находиться в трех состояниях: они могут быть как отключены вовсе (N), прямо встроены в ядро (Y), или собраны в качестве модулей (M). Модули хранятся вне ядра на файловой системе, в то время как встроенные компоненты встраиваются прямо в образ ядра.

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

С некоторыми настройками, встроенные параметры являются абсолютной необходимостью. Например, если раздел root расположен на файловой системе, система не загрузится, если ext2 был встроен в качестве модуля (системе потребуется обратиться к разделу root чтобы найти модуль ext2, но обращения не произойдет до тех пор, пока модуль ext2 не будет загружен!).

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

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

Доступны несколько вспомогательных утилит. (часть пакета ) определяет аппаратное обеспечение, основанное на PCI и AGP, включая компоненты, встроенные в материнскую плату. (из пакета ) определяет устройства, подсоединенные к USB-портам.

Положение в некотором смысле запутывается изменяющейся степенью стандартизации аппаратного обеспечения. До тех пор, пока не происходит отклонения от значений по умолчанию, жесткие диски IDE будут работать, как и PS/2 или USB-клавиатура и мышь. Основная поддержка дисплея VGA также будет включена. Однако, некоторые устройства, такие как адаптеры ethernet, едва стандартизированы, поэтому чтобы получить доступ к сети, потребуется идентифицировать чипсет ethernet и выбрать подходящую поддержку для сетевой платы.

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

Функции ядра
Наряду с поддержкой аппаратного обеспечения, необходимо также задуматься о включении в ядро определенных функций программного обеспечения. Одним из важных примеров такой функции является поддержка файловой системы: необходимо выбрать поддержку файловых систем для использования на жестком диске, наряду с любыми другими файловыми системами, которые могут понадобиться для использования на внешнем хранилище (например, VFAT на флеш-накопителях USB).

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

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

Остальная часть этой страницы направлена на разъяснение часто вызывающих затруднения областей и объяснение как избежать общих проблем, с которыми сталкиваются пользователи. Удачи!

SATA-диски являются дисками SCSI
Большинство современных настольных систем поставляются с запоминающими устройствами (жесткий диск и приводы CD/DVD) на шине Serial ATA, вместо более старой шины IDE (резиновый кабель).

Поддержка SATA в Linux реализована через слой, называемый libata, который располагается уровнем ниже подсистемы SCSI. По этой причине, драйвера SATA находятся в разделе конфигурации с драйверами SCSI. Дополнительно, запоминающие устройства могут обрабатываться как SCSI-устройства, что подразумевает поддержку SCSI диска или cdrom. Жесткий диск SATA, например, будет иметь название, а привод CD/DVD --.

Хотя большинство этих драйверов предназначено для контроллеров SATA, libata не была предназначена только для SATA. Все распространенные драйвера IDE будут также портированы на libata в ближайшем будущем, и, на тот момент, вышеупомянутые рассмотрения также будут применимы и к пользователям IDE.

Параметры конфигурации для libata

Чипсеты IDE и DMA
Вопреки появлению SATA, устройства IDE все еще являются очень распространенными, и от них зависят многие части системы. IDE является достаточно общей технологией и, таким образом, Linux поддерживает почти все контроллеры IDE "из коробки" без необходимости выбирать какие-либо параметры для контроллера.

Хотя, IDE является старой технологией и в своей первоначальной версии с программным вводом-выводом не может предоставить скорости передачи необходимые для быстрого доступа к современным запоминающим устройствам. Универсальный драйвер IDE ограничен этими режимами передачи программного ввода-вывода, что приводит медленным скоростям передачи данных и гораздо более высокому использованию центрального процессора, когда данные передаются с диска и на диск.

Если только вы не работаете с системой 1995-го года и ранее, контроллер IDE также может поддерживать альтернативный режим передачи, известный как Direct Memory Access (DMA) - прямой доступ к памяти. DMA намного быстрее и при передаче данных центральный процессор едва задействуется. При действительно плохой общей производительности системы и использовании IDE-диска, вероятно что DMA не используется.

Если libata не используется для IDE-дисков, то необходимо включить использование DMA.

Для включения DMA на всех устройствах IDE, нужно просто включить параметр конфигурации для контроллера IDE.

Хост-контроллеры USB
USB - это общепринятая шина для подсоединения внешних периферийных устройств к компьютеру. Одной из причин успеха USB является то, что это стандартизированный протокол. Однако же, устройства хост-контроллера USB (USB host controller devices, или HCD), размещенные на хосте, немного различаются. Имеются 3 главных вида:


 * - Universal Host Controller Interface (универсальный интерфейс хост-контроллера). Он поддерживает USB 1.1, и обычно имеется на материнских платах, основанных на чипсете VIA или Intel.
 * - Open Host Controller Interface (открытый интерфейс хост-контроллера). Он поддерживает USB 1.1 и обычно имеется на материнских платах, основанных на чипсете Nvidia или SiS.
 * - Extended Host Controller Interface (усовершенствованный интерфейс хост-контроллера). Это единственный распространенный интерфейс хост-контроллера, поддерживающий USB 2.0 и обычно присутствующий на любом компьютере с поддержкой USB 2.0.

Большинство систем поставляются с двумя из перечисленных выше типов интерфейсов: EHCI (USB 2.0) и или UHCI, или OHCI (USB 1.1). Необходимо выбрать оба типа интерфейсов. В то время как все устройства USB 2.0 обратно совместимы с USB 1.1, большая часть USB-устройств (даже производящихся на сегодняшний день) основаны на интерфейсе USB 1.1 - зачем USB-мыши может понадобиться больше чем 1.5 Мб/c?

If the relevant options corresponding to the USB HCD types present on the system are not selected, then 'dead' USB ports may be experienced. This case can be determined if a working USB device is plugged in, but it does not get power or respond in any way.

С помощью отличной команды  (из пакета ) можно относительно легко обнаружить какие устройства HCD присутствуют на системе. Игнорируя контроллер FireWire, который также соответствует запросу, легко обнаружить, что система автора требует поддержку OHCI и EHCI:

In Linux kernel 3.12.13 and later, OHCI support for PCI-bus USB controllers has to be enabled if the USB controller is OHCI and a USB keyboard or mouse is used.

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


 * Множество центральных процессоров Intel поддерживают технологию, называемую гиперпоточность, в которой центральный процессор рассматривается системой как два логических процессора.
 * Большинство процессоров Intel и AMD фактически состоят из множества физических процессоров внутри одного корпуса, они известны как многоядерные процессоры.
 * Некоторые высококачественные системы в действительности имеют множество физических процессоров, установленных на специализированной материнской плате для значительного увеличения производительности по сравнению с однопроцессорной системой. Вы, возможно, будете знать что обладаете такой системой, так как они недешевы.

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

The next option not only enables power management features, but might also be a requirement for making all CPUs available to the system:

Поддержка High Memory для x86
Вследствие ограничений в 32-битном адресном пространстве на архитектуре x86, ядро с настройками по умолчанию поддерживает только 896 Мб оперативной памяти. Если система обладает большим количеством памяти, будут доступны только первые 896 Мб, если только не включена поддержка "верхней памяти" (high memory support).

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

Compressed kernel modules
From kernel version 3.18.x (and up) compression of kernel modules has been possible. gzip and xz compression are available. It is important to emerge with the proper USE flags before compiling a kernel with compressed modules:

Re-emerge :

Enable module compression and select a preferred compression method:

Usually make modules_install runs depmod. If did not have the proper USE flags set (see the  step above) the first time it was run, then the dependency list will be empty. The system will therefore be unable to load any modules that were built compressed.

After kmod has been recompiled, re-run depmod as a solution to this problem:

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

Перевод параметра CONFIG_FOO в действительное местонахождение настроек
Предположим, вам потребовалось включить параметр ) и введите . Это откроет поле поиска. В этом поле введите   (вы даже можете пропустить  ). Следующий листинг кода показывает результат поиска.

The following is an output of the result of this search:

Вывод работы команды содержит много интересной информации.

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


 * 1) включить настройки, описанные в поле Depends on
 * 2) перейти к указанному местоположению Location
 * 3) переключить значение, указанное Prompt:

Другая документация по конфигурации ядра
На данный момент, мы обсудили только основные концепции и специфические проблемы, относящиеся к конфигурации ядра, без углубления в подробности (эти подробности оставлены для изучения вам!). Однако, другие части документации Gentoo предусматривают специализированные подробности для рассматриваемых тем.

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

Getting the basics of a kernel operational will help users in later configuration steps because the user will know what is breaking their system and what is not. It is always wise to save the base (working) kernel configuration in a folder other than the kernel's sources folder before attempting to add new features or hardware.


 * Статья ALSA описывает в подробностях параметры, требуемые для звуковой платы. Следует заметить, что ALSA является одним из исключений предложенной схемы сборки компонентов не в качестве модулей: систему ALSA намного проще сконфигурировать, если компоненты являются модульными.


 * Статься Bluetooth описывает параметры, необходимые для использования устройств bluetooth на системе.


 * IPv6 router guide описывает как сконфигурировать ядро для маршрутизации, используя схему сетевой адресации нового поколения.


 * При использовании закрытых графических драйверов nVidia для улучшенной производительности 3D-графики, в руководстве по nVidia перечисляются параметры, которые требуется выбрать или отключить.


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


 * If running a PowerPC system, the PPC FAQ has a few sections about PPC kernel configuration.


 * Руководство Gentoo по печати перечисляет параметры ядра, необходимые для поддержки печати в Linux.


 * Руководство по USB описывает конфигурацию, необходимую для использования распространенных USB-устройств, таких как клавиатуры и мыши, запоминающие устройства и принтеры.

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

Процесс компиляции и установки ядер находится за рамками этого документа. Вам следует обратиться к руководству по обновлению ядра за общими инструкциями. Вкратце, процесс заключается в следующем: конфигурация, компиляция, монтирование раздела (если он еще не примонтирован), копирование нового образа ядра, перезагрузка. Если какой-нибудь из финальных шагов пропущен, изменения не вступят в силу!

Возможно проверить соответствует ли загруженное ядро скомпилированному с помощью изучения даты и времени компиляции. Предполагается, что используется архитектура x86 и исходные тексты ядра установлены в :

Приведенная выше команда отображает дату и время компиляции ядра, загруженного в настоящий момент.

Приведенная выше команда отображает дату и время образа ядра, скомпилированного на жесткий диск.

Если время, выводимое приведенными выше командами, различается более чем на две минуты, это означает что в процессе переустановки ядра была допущена ошибка и загружен не тот образ ядра, который был нужен!

Модули не загружаются автоматически
Как указано в этом документе ранее, система конфигурации ядра скрывает под собой большие изменения в поведении при выборе компонента ядра в качестве модуля (M), вместо встроенного параметра (Y). Важно повторить это снова, так как много пользователей попадают в эту ловушку.

При встраивании компонента в ядро, код встраивается в образ ядра (bzImage). Когда ядру требуется использовать этот компонент, оно может инициализировать и загрузить его автоматически, без вмешательства пользователя.

При выборе компонента в качестве модуля, код встраивается в файл модуля ядра и устанавливается на файловую систему. В основном, когда ядру требуется использовать этот компонент, оно не может это сделать! За некоторыми исключениями, ядро не совершает попыток загрузки этих модулей - это задание оставлено пользователю.

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

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