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

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

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

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

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

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

Selecting the proper configuration options requires a knowledge of the components inside and connected to the computer. Most of the time these components can be identified without taking the lid off the system. For most internal components, users need to identify the chipset used on each device, rather than the retailed product name. Many expansion cards are retailed with a certain brand name, but use another manufacturer's chipset.

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

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

In addition, while some things just-about-work with the default settings, more specialized options may need to be selected to get the full potential from the system. For example, if support for the appropriate IDE chipset has not been enabled, the IDE hard disks will run very slowly.

Функции ядра
In addition to hardware support, users need to consider the software features that will be required in the kernel. One important example of such a feature is filesystem support: users must select support for the filesystems in use on their hard disks, as well as any filesystems they might use on external storage devices (e.g. VFAT on USB drives).

Another common software feature example is advanced network functionality. In order to do some kind of routing or firewalling the relevant configuration items must be included in the kernel configuration.

Готовы?
Now that the concepts have been introduced, it should be easy to start identifying the system hardware, browsing through the menuconfig interface, and selecting the required kernel options for the system.

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

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.

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

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

Unless a user is dealing with a pre-1995 system, the IDE controller will also support an alternative transfer mode, known as Direct Memory Access (DMA). DMA is much much faster, and CPU utilization is barely affected while data transfers are taking place. If the system is suffering from really poor general system performance while it is using an IDE disk, chances are that DMA is not being used and should be enabled.

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

To enable DMA for older IDE devices (which is a deprecated setting), enable the following kernel features.

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 и новее “OHCI support for PCI-bus USB controllers” ( CONFIG_USB_OHCI_HCD_PCI ) стоит включить, если 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.

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

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).

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

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

Сжатые модули ядра
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:

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

Enable module compression and select a preferred compression method:

Usually runs. 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 as a solution to this problem:

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

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

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

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

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


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

Другая документация по конфигурации ядра
So far only general concepts and specific problems related to kernel configuration has been discussed; precise details have been left up to the user to discover. However, other parts of the Gentoo documentation collection provide specialized details for the topics at hand.

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 your audio, printing, etc., can always be added at a later date.

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-маршрутизатора описывает как сконфигурировать ядро для маршрутизации, используя схему сетевой адресации нового поколения.


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


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


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


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


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

Изменения конфигурации не вступают в силу
It is very common for users to make a configuration change, but then make a small mistake in the process of actually booting to their newly configured kernel. They reboot into a kernel image that is not the one they just reconfigured, observe that whatever problem they were trying to solve is still present, and conclude that the configuration change does not solve the problem.

The process of compiling and installing kernels is outside the scope of this document; refer to the Kernel Upgrade Guide for general guidance. In short, the process to get a modified kernel is the following: 1) configure, 2) compile, 3) mount (if not already mounted), 4) copy new kernel image to, 5) Make sure the bootloader will reference the new kernel, 6) reboot. If one of those final stages has been missed, then the changes will not properly take effect.

It is possible to verify if the kernel that has booted matches the newly kernel compiled on the hard disk. This is performed by examining the date and time of the kernel's compilation. Assuming the system architecture is x86 and the kernel sources are installed at, the following command can be used:

The above command will display the date and time the currently booted kernel was compiled.

The above command displays the date and time that the kernel image on the hard disk was last compiled.

If the time stamps from the above commands differ by more than 2 minutes, it indicates a mistake was made during kernel reinstallation and the system has not booted from the newly modified kernel image.

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

When selecting a component as built-in, the code is built into the kernel image (bzImage). When the kernel needs to use that component, it can initialize and load it automatically, without any user intervention.

When selecting a component as a module, the code is built into a kernel module file and installed on the filesystem. In general, when the kernel needs to use that component, it will not be able to find it. With some exceptions, the kernel makes no effort to actually load these modules — this task is left up to the user.

If building support for a network card as a module, and it is discovered the network is not accessible, it is probably because the module is not loaded — either this must be done manually or the system must be configured to autoload the module at boot time.

Unless a user has a reasons to do otherwise, some time can be saved by building these components directly into the kernel image, so that the kernel can automatically configure these small settings by itself.

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

 * 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.