Kernel/Gentoo Kernel Configuration Guide/ru

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

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

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

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

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

В данный момент подразумевается, что исходные тексты ядра 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 ?

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

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

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


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

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

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

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

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

Перевод параметра CONFIG_FOO в действительное местонахождение настроек
Suppose you need to enable, launch the kernel configuration menu  and type in. This will open the search box. In this search box, type  (you can even drop the  ). The next code listing shows the result of this search.

This output yields lots of interesting information.

With this information, you should be able to translate any  requirements tossed at you easily. In short, it means you


 * 1) need to enable the settings described in the Depends on field
 * 2) navigate where Location: points you towards
 * 3) toggle the value referred to by Prompt:

Other kernel configuration documentation
So far, we have only discussed general concepts and specific problems related to kernel configuration, without going into any precise details (such details are for you to discover!). However, other parts of the Gentoo documentation collection provide specialised details for the topics at hand.

You may find these documents helpful while configuring those specific areas, but if you are new to kernel configuration, don't be too adventurous. Start by getting a basic system up and running, you can always come back later to add support for your audio, printing, etc.


 * The ALSA article details the configuration options required for sound card support. Note that ALSA is one exception to the suggested scheme of not building things as modules: ALSA is actually much easier to configure when the components are modular.


 * The Bluetooth article details the options you need in order to use bluetooth devices on your system.


 * The IPv6 router guide describes how to configure your kernel for routing using the next generation network addressing scheme.


 * If you will be using the closed-source nVidia graphics drivers for improved 3D graphics performance, the nVidia Guide lists the options that should and should not be selected on such a system.


 * Amongst other things, the Power Management Guide explains how to configure your kernel for CPU frequency scaling, and for suspend and hibernate functionality.


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


 * The Printing HOWTO lists the kernel options needed to support printing in Linux.


 * The USB Guide details the configuration required to use common USB devices such as keyboards/mice, storage devices, and printers.

Configuration changes do not take effect
It is very common for users to make a configuration change, but then make a small mistake in the process following on from that point. 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, you should refer to the Kernel Upgrade Guide for general guidance. In short, the process is: configure, compile, mount (if not already mounted), copy new kernel image over, reboot. If you miss out any of those final stages, your changes will not take effect!

It is possible to verify if the kernel you are booted from matches the kernel compiled on your hard disk by examining the date and time of compilation. Assuming your architecture is x86 and your kernel sources are installed at :

The above command displays the date and time that the kernel you are currently booted from was compiled.

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

If the two times from the above commands differ by more than 2 minutes, it indicates that you have made a mistake during kernel reinstallation and you are not booted from the kernel image that you thought you were!

Modules do not get loaded automatically
As mentioned earlier in this document, the kernel configuration system hides a large behavioural 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 you select a component as built-in, the code is built into the kernel image (bzImage). When the kernel needs to use that component, it can initialise and load it automatically, without any user intervention.

When you select a component as a module, the code is built into a kernel module file and installed on your filesystem. In general, when the kernel needs to use that component, it can't! With some exceptions, the kernel makes no effort to actually load these modules - this task is left up to the user.

So, if you build support for your network card as a module, and you then find that you cannot access your network, it is probably because the module is not loaded - you must either do this manually or configure your system to autoload it at boot time.

Unless you have reasons to do otherwise, save yourself some time by building these components directly into the kernel image, so that the kernel can automatically set these things up for you.

Acknowledgements
We would like to thank the following authors and editors for their contributions to this guide:


 * Daniel Drake
 * Curtis Napier
 * Justin Robinson
 * Åukasz Damentko
 * Jonathan Smith
 * nightmorph