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 в действительное местонахождение настроек
Предположим, вам потребовалось включить параметр ) и введите . Это откроет поле поиска. В этом поле введите   (вы даже можете пропустить  ). Следующий листинг кода показывает результат поиска.

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

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


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

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

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


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


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


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


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


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


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


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


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

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

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

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

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

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

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

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