Kernel/Gentoo Kernel Configuration Guide/ru

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

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


 * 1) Большая свобода
 * 2) Меньший размер ядра
 * 3) Быстрая компиляция
 * 4) Удовольствие от обучения
 * 5) Всепоглащающая скука
 * 6) Абсолютные знания об устройстве ядра и/или
 * 7) Тотальный контроль

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

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

На данный момент предполагается, что исходный код ядра Linux распакован на жёсткий диск (как правило в ), а читатель обладает навыками работы с и системой меню на базе ncursers. В случае, если данный уровень не достигнут, то, прежде чем продолжить, следует ознакомиться со следующими статьями:


 * Обзор различных версий исходного кода ядра Linux содержит информацию о различных версиях исходного кода ядра, предоставляемого деревом Portage.
 * Инструкция по обновлению ядра показывает, как обновить ядро или же сменить версию.
 * Gentoo Handbook's секция, посвящённая настройке ядра покрывает некоторые аспекты установки. Выберите нужную архитектуру и перейдите по ссылке "Настройка ядра Linux".

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

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

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

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

There is an important difference between built-in and modular: with a few exceptions, the kernel makes no attempt whatsoever to load any external modules when the system might need them; it is left up to the user to decide when, or when to not, load a module. While certain other parts of the system may have load-on-demand facilities, and there are some automatic module loading utilities available, it is recommended to build hardware support and kernel features directly into the kernel. The kernel can then ensure the functionality and hardware support is available whenever needed. This is done by setting each kernel feature to. For this setup to be coherent it is also necessary to include firmware support in the kernel. This is done setting  and   in the kernel's  or by the following:

For other parts of the configuration, built-in is an absolute requirement. For example, if the root partition is a btrfs filesystem the system can't boot if btrfs was built as a module. The system would have to look on the root partition to find the btrfs module (since modules are stored in the root partition), but it cannot look on the root partition unless it already has btrfs support loaded! If btrfs has not been built-in then the init process will fail to find the root device.

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

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

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

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

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

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

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

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

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

SATA-диски являются дисками SCSI
Most modern desktop systems ship with storage devices (hard disk and CD/DVD drives) on a Serial ATA bus, rather than the older IDE (ribbon cable) bus type.

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

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

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

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

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

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

Для включения DMA на старых устройствах IDE (deprecated (устаревший) параметр), включите следующую функцию ядра.

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


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

Большинство систем поставляются с двумя из перечисленных выше типов интерфейсов: XHCI (USB 3.0) и EHCI (USB 2.0). Для использования USB-устройств не нужно выбирать оба варианта, так как XHCI совместим с более медленными контроллерами USB. Но что бы "обезопасить" себя, пользователь может включить поддержку EHCI; это не причинит вреда, если USB 2.0 контроллер отсутствует в системе.

Если параметры, соответствующие типам USB HCD, отсутствуют в системе, тогда можете получиться эффект 'мертвых' USB-портов. Такой случай определить так: при подключении работающего устройства оно не снабжается питанием или не подает каких-либо признаков жизни.

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

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

В ядре Linux версии 3.12.13 и новее   стоит включить, если USB-контроллер это OHCI и используется USB клавиатура или мышь.

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


 * Many of Intel's CPUs support a technology which they call hyper-threading. This technology enables a single CPU to be viewed by the system as two logical processors.
 * Most Intel/AMD CPUs actually consist of multiple physical processors inside a single package, these processors are known as multi-core processors.
 * Some high-end computer systems actually have multiple physical processors installed on specialized motherboards to provide a significant performance increase over a uniprocessor system. System users will probably know if they have such a system, since they are not cheap.

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

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

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

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

Выберите вариант 4 Гб, если ваша система имеет более 4 ГБ оперативной памяти:

Сжатые модули ядра
Начиная с версии ядра 3.18.x (и выше) возможно сжатие модулей ядра. Доступно сжатие gzip и xz. Важно установить с нужными USE-флагами перед компиляцией ядра со сжатыми модулями:

Перекомпилируйте :

Включите сжатие модулей и выберите предпочитаемый метод сжатия:

Обычно запускает. Если у не были установлены необходимые USE-флаги (смотрите настройки в  в предыдущем шаге) при первом запуске, то, в этом случае, зависимостей не будет. Система не сможет загрузить какой-либо модуль, который был скомпилирован и сжат.

После перекомпиляции kmod, еще раз запустите, чтобы решить эту проблему:

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

Перевод параметра CONFIG_FOO в действительное местонахождение настроек
Предположим, неоходимо включить параметр CONFIG_TMPFS_XATTR. Запустите меню конфигурации ядра и нажмите. Это откроет поле поиска. В это поле введите CONFIG_TMPFS_XATTR.

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

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

With this information, it should be possible to translate any CONFIG_* requirements fairly easily. In short, it means a user must:


 * 1) Enable the settings described in the Depends on field
 * 2) Navigate where Location: points
 * 3) Toggle the value referred to by Prompt:

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

Such documents may be helpful while configuring specific areas of the kernel. Although this warning was mentioned previously in this guide, remember: users who are new to kernel configuration should not be adventurous when attempting to configure their kernels. Start by getting a basic system up and running, support for audio, printing, etc., can always be added at a later date.

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


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


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


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


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


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


 * Если используется система PowerPC, в в списке часто задаваемых вопросов по PPC имеются несколько разделов, посвященных конфигурации ядра для PPC.


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


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

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

Процесс компиляции и установки ядер находится за рамками этого документа; обратитесь к руководству по обновлению ядра за общими инструкциями. Вкратце, процесс получения измененного ядра заключается в следующем: 1&#41; конфигурация, 2&#41; компиляция, 3&#41; монтирование раздела (если он еще не примонтирован), 4&#41; копирование нового образа ядра в, 5&#41; убедитесь, что загрузчик ссылается на новое ядро, 6&#41; перезагрузка. Если какой-нибудь из финальных шагов пропущен, изменения не вступят в силу.

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

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

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

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

Модули не загружаются автоматически
As mentioned earlier in this document, the kernel configuration system hides a large behavioral change when selecting a kernel component as a module  rather than built-in. It is worth repeating this again because so many users fall into this trap.

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

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

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

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

Смотрите также

 * genkernel - A tool used to automate the build process of the kernel and initramfs.
 * proc filesystem (Security Handbook) - Dynamically change kernel parameters and variables on the fly.