<!--
     The FreeBSD Russian Documentation Project

     $FreeBSD$
     $FreeBSDru: frdp/doc/ru_RU.KOI8-R/books/handbook/kernelconfig/chapter.sgml,v 1.27 2005/01/19 15:28:41 den Exp $

     Original revision: 1.153
-->

<chapter id="kernelconfig">
  <chapterinfo>
    <authorgroup>
      <author>
	<firstname>Jim</firstname>
	<surname>Mock</surname>
	<contrib>Обновил и реструктурировал </contrib>
	<!-- Mar 2000 -->
      </author>
    </authorgroup>
    <authorgroup>
      <author>
	<firstname>Jake</firstname>
	<surname>Hamby</surname>
	<contrib>Предоставил </contrib>
	<!-- 6 Oct 1995 -->
      </author>
    </authorgroup>
    <authorgroup>
      <author>
	<firstname>Александром</firstname>
	<surname>Коваленко</surname>
	<contrib>Переведено </contrib>
      </author>
    </authorgroup>
  </chapterinfo>

  <title>Настройка ядра FreeBSD</title>

  <sect1 id="kernelconfig-synopsis">
    <title>Краткий обзор</title>

    <indexterm>
      <primary>kernel</primary>
      <secondary>сборка собственного ядра</secondary>
    </indexterm>

    <para>Ядро &mdash; это основная часть операционной системы &os;.  Оно
      ответственно за управление памятью, параметры безопасности, работу с
      сетью, доступ к дискам и многое другое.  Несмотря на то, что &os;
      становится всё более динамически конфигурируемой, иногда приходится
      собирать собственное ядро.</para>

    <para>После прочтения этой главы вы узнаете:</para>

    <itemizedlist>
      <listitem>
	<para>Почему вам может понадобиться сборка собственного ядра.</para>
      </listitem>

      <listitem>
	<para>Как написать файл конфигурации ядра или изменить
	  существующий.</para>
      </listitem>

      <listitem>
	<para>Как использовать файл конфигурации ядра для того, чтобы создать и
	  собрать новое ядро.</para>
      </listitem>

      <listitem>
	<para>Как установить новое ядро.</para>
      </listitem>

      <listitem>
	<para>Как создать записи в <filename>/dev</filename>, которые могут
	  оказаться необходимы.</para>
      </listitem>

      <listitem>
	<para>Что делать, если что-то не работает или работает не так, как
	  должно.</para>
      </listitem>
    </itemizedlist>

    <para>Все команды, приводимые в этой главе в качестве примера,
      должны выполняться от пользователя <username>root</username>.</para>
  </sect1>

  <sect1 id="kernelconfig-custom-kernel">
    <title>Зачем собирать собственное ядро?</title>

    <para>Традиционно в &os; использовалось так называемое
      <quote>монолитное</quote> ядро.  Это означает, что ядро &mdash; это одна
      большая программа, которая поддерживает фиксированный набор устройств и в
      случае, если необходимо изменить его поведение, требуется сборка нового
      ядра и перезагрузка компьютера уже с новым ядром.</para>

    <para>На сегодняшний день &os; быстро продвигается к модели, в которой
      большая часть функциональности содержится в модулях, которые могут быть
      при необходимости динамически загружены и выгружены из ядра.  Это
      позволяет ядру использовать устройства, которые <quote>внезапно</quote>
      появились в системе (например, устройства PCMCIA в лэптопе) или добавлять
      новую функциональность в ядро, которая не была необходима в момент
      первоначальной сборки ядра.  Такой подход известен как модульность
      ядра.</para>

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

    <para>Сборка собственного ядра &mdash; один из наиболее важных ритуалов, через который
      должен пройти практически любой пользователь BSD.  Несмотря на
      длительность этого процесса, ваша &os; останется только в выигрыше.  В
      отличие от ядра <filename>GENERIC</filename>, которое должно поддерживать
      широкий спектр аппаратного обеспечения, собственное ядро содержит поддержку
      аппаратного обеспечения только <emphasis>вашего</emphasis> компьютера.
      Это может давать следующие преимущества:</para>

    <itemizedlist>
      <listitem>
	<para>Меньшее время загрузки.  Поскольку ядро будет пытаться определить
	  только то аппаратное обеспечение, которое установлено в вашем
	  компьютере, время, которое потребуется системе для загрузки,
	  может значительно уменьшиться.</para>
      </listitem>

      <listitem>
	<para>Уменьшение использования памяти.  Собственное ядро часто использует меньше
	  памяти, чем ядро <filename>GENERIC</filename>, что очень важно,
	  поскольку ядро всегда находится в физической памяти.  Именно по этой
	  причине собственное ядро особенно полезно при использовании систем с малым
	  объемом оперативной памяти.</para>
      </listitem>

      <listitem>
	<para>Поддержка дополнительного аппаратного обеспечения.  Собственное ядро
	  позволяет вам добавить поддержку устройств,
	  отсутствующих в ядре <filename>GENERIC</filename>.</para>
      </listitem>
    </itemizedlist>
  </sect1>

  <sect1 id="kernelconfig-building">
    <title>Сборка и установка собственного ядра</title>
    <indexterm>
      <primary>kernel</primary>
      <secondary>сборка / установка</secondary>
    </indexterm>

    <para>Во-первых, давайте сделаем краткий обзор каталога, в котором будет
      происходить сборка ядра.  Все каталоги, которые будут упоминаться, будут
      относительными по отношению к основному каталогу
      <filename>/usr/src/sys</filename>, который также доступен как каталог
      <filename>/sys</filename>.  Этот каталог содержит множество подкаталогов,
      представляющих собой различные части ядра, но наиболее важным для нас
      будет каталог <filename><replaceable>arch</replaceable>/conf</filename>,
      в котором вы будете редактировать конфигурационный файл ядра и в котором
      находится каталог <filename>compile</filename>, где будет
      собираться ваше ядро.  <replaceable>arch</replaceable> может быть
      <filename>i386</filename>, <filename>alpha</filename>,
      <filename>amd64</filename>, <filename>ia64</filename>,
      <filename>powerpc</filename>, <filename>sparc64</filename> или
      <filename>pc98</filename> (альтернативная ветвь аппаратного обеспечения,
      популярная в Японии).  Все, что находится внутри каталога определенной
      архитектуры, относится только к этой архитектуре; остальной код является
      машинно независимым и общим для всех платформ, на которые &os; может
      быть потенциально
      портирована.  Обратите внимание на логическую структуру каталогов, в
      которой каждое поддерживаемое устройство, каждая файловая система и
      каждая опция размещается в своём собственном каталоге.  Версии &os; до
      5.X поддерживали только архитектуры <filename>i386</filename>,
      <filename>alpha</filename> и <filename>pc98</filename>.</para>

    <para>В примерах этой главы подразумевается, что вы используете
      архитектуру i386.  Если это не так, измените каталоги, указанные
      в примерах, в соответствии с архитектурой вашей системы.</para>

    <note>
      <para>Если в вашей системе <emphasis>отсутствует</emphasis> каталог
	<filename>/usr/src/sys</filename>, это означает, что исходные тексты
	ядра не были установлены.  Наиболее простой способ установить их -
	запустить <command>sysinstall</command>
	(<command>/stand/sysinstall</command> в &os; версий старше,
	чем 5.2) как <username>root</username>, выбрать
	<guimenuitem>Configure</guimenuitem>, потом
	<guimenuitem>Distributions</guimenuitem>, потом
	<guimenuitem>src</guimenuitem>, потом <guimenuitem>sys</guimenuitem>.
	Если вы испытываете отвращение к <application>sysinstall</application> и
	у вас есть доступ к <quote>официальному</quote> &os; CDROM, вы также
	можете установить исходные тексты при помощи командной строки:</para>

      <screen>&prompt.root; <userinput>mount /cdrom</userinput>
&prompt.root; <userinput>mkdir -p /usr/src/sys</userinput>
&prompt.root; <userinput>ln -s /usr/src/sys /sys</userinput>
&prompt.root; <userinput>cat /cdrom/src/ssys.[a-d]* | tar -xzvf -</userinput></screen>
    </note>

    <para>Затем, перейдите в каталог
      <filename><replaceable>arch</replaceable>/conf</filename>
      и скопируйте файл конфигурации <filename>GENERIC</filename>
      в файл с выбранным вами именем. Например:</para>

    <screen>&prompt.root; <userinput>cd /usr/src/sys/<replaceable>i386</replaceable>/conf</userinput>
&prompt.root; <userinput>cp GENERIC MYKERNEL</userinput></screen>

    <para>По традиции имя состоит из букв в верхнем регистре, и если
      вы поддерживаете несколько компьютеров &os; на различном оборудовании,
      хорошая идея добавлять это имя к имени хоста.  Мы назвали ядро
      <filename>MYKERNEL</filename> в этом примере.</para>

    <tip>
      <para>Помещение файла конфигурации ядра в <filename>/usr/src</filename>
	может быть плохой идеей.  Если вы испытываете проблемы,
	их можно решить удалив <filename>/usr/src</filename> и начав
	все с начала.  После этого обычно требуется несколько секунд, чтобы
	понять, что вы удалили собственный файл настройки ядра.  Не
	редактируйте непосредственно <filename>GENERIC</filename>, он может
	быть также перезаписан и при следующем <link
	linkend="cutting-edge">обновлении дерева исходных текстов</link>,
	и изменения ядра будут потеряны.</para>

      <para>Вы можете сохранить файл конфигурации ядра в другом месте,
	а затем создать символическую ссылку на этот файл в каталоге
	<filename><replaceable>i386</replaceable></filename>.</para>

      <para>Например:</para>

      <screen>&prompt.root; <userinput>cd /usr/src/sys/<replaceable>i386</replaceable>/conf</userinput>
&prompt.root; <userinput>mkdir /root/kernels</userinput>
&prompt.root; <userinput>cp GENERIC /root/kernels/<replaceable>MYKERNEL</replaceable></userinput>
&prompt.root; <userinput>ln -s /root/kernels/<replaceable>MYKERNEL</replaceable></userinput></screen>
    </tip>

    <para>Теперь отредактируйте файл <filename>MYKERNEL</filename> в своём
      любимом текстовом редакторе.  Если вы только начинаете, единственным
      доступным редактором скорее всего будет <application>vi</application>,
      который слишком сложен для того, чтобы описать его здесь,
      но в <link linkend="bibliography">библиографии</link> перечислено
      множество книг, в которых его использование хорошо освещено.  Однако &os;
      предоставляет более простой редактор <application>ee</application>,
      который, если вы &mdash; новичок, подойдёт вам больше всего.  Не стесняйтесь
      изменять строки комментариев в начале файла, с тем, чтобы отобразить вашу
      конфигурацию или изменения, которые вы сделали по сравнению с
      <filename>GENERIC</filename>.</para>
    <indexterm><primary>SunOS</primary></indexterm>

    <para>Если вам приходилось собирать ядро для &sunos; или какой-либо другой
      операционной системы типа BSD, многое из того, что содержится в этом
      файле будет очень знакомо вам.  Если же вы, напротив, использовали другую
      операционную систему, такую как DOS, файл конфигурации
      <filename>GENERIC</filename> может показаться вам крайне сложным, поэтому
      следуйте инструкциям в разделе <link
      linkend="kernelconfig-config">Конфигурационный файл</link> медленно и
      внимательно.</para>

    <note>
      <para>Если вы <link
	linkend="cutting-edge">синхронизируете дерево исходных текстов</link>
	с деревом проекта &os;, не забудьте свериться с файлом
	<filename>/usr/src/UPDATING</filename> перед обновлением. В этом
	файле описаны все важные вопросы и области исходного кода, требующие
	особого внимания.
	<filename>/usr/src/UPDATING</filename> всегда соответствует версии
	ваших исходных текстов &os;, поэтому является более актуальным
	источником информации, чем это руководство.</para>
    </note>

    <para>Теперь вы должны скомпилировать ядро.  Существует два способа, которые
      позволяют это сделать.  Какой из них выбрать, зависит от того, почему вам
      понадобилось пересобирать ядро и версии &os;, которую вы
      используете.</para>

    <itemizedlist>
      <listitem>
	<para>Если вы установили <emphasis>только</emphasis> исходные тексты
	  ядра, используйте способ 1.</para>
      </listitem>

      <listitem>
	<para>Если вы используете &os; версии более ранней, чем 4.0 и вы
	  <emphasis>не</emphasis> обновляете систему до &os;&nbsp;4.0 или выше,
	  используя <maketarget>make buildworld</maketarget>, используйте способ
	  1.</para>
      </listitem>

      <listitem>
	<para>Если вы собираете новое ядро, не обновляя исходные тексты
	  (возможно, для того, чтобы добавить новую опцию, например
	  <literal>IPFIREWALL</literal>), вы можете использовать любой
	  способ.</para>
      </listitem>

      <listitem>
	<para>Если вы пересобираете ядро как часть процесса
	  <maketarget>make buildworld</maketarget>, используйте способ 2.</para>
      </listitem>
    </itemizedlist>

    <indexterm>
      <primary><command>cvsup</command></primary>
    </indexterm>
    <indexterm><primary>CTM</primary></indexterm>
    <indexterm>
      <primary>CVS</primary>
      <secondary>анонимный</secondary>
    </indexterm>

    <para>Если вы <emphasis>не</emphasis> обновляли дерево исходных текстов
      с момента последнего успешного завершения цикла
      <maketarget>buildworld</maketarget>-<maketarget>installworld</maketarget>,
      (то есть не запускали <application>CVSup</application>,
      <application>CTM</application>, или не использовали
      <application>anoncvs</application>), возможно использование
      последовательности
      <command>config</command>, <command>make depend</command>,
      <command>make</command>, <command>make install</command>.
    </para>

    <procedure>
      <title>Способ 1.  Сборка ядра <quote>традиционным</quote> способом</title>

      <step>
	<para>Запустите &man.config.8; для того, чтобы сгенерировать исходные
	  тексты ядра.</para>

    <screen>&prompt.root; <userinput>/usr/sbin/config <replaceable>MYKERNEL</replaceable></userinput></screen>
      </step>

      <step>
	<para>Перейдите в каталог, в котором будет собираться ядро.
	  Запущенный как показано выше &man.config.8; выведет имя этого
	  каталога.</para>

    <screen>&prompt.root; <userinput>cd ../compile/<replaceable>MYKERNEL</replaceable></userinput></screen>

	<para>Для &os; версий более ранних, чем 5.0, вместо этого
	  используйте:</para>

    <screen>&prompt.root; <userinput>cd ../../compile/<replaceable>MYKERNEL</replaceable></userinput></screen>
      </step>

      <step>
	<para>Соберите ядро.</para>

    <screen>&prompt.root; <userinput>make depend</userinput>
&prompt.root; <userinput>make</userinput></screen>
      </step>

      <step>
	<para>Установите новое ядро.</para>

    <screen>&prompt.root; <userinput>make install</userinput></screen>
      </step>
    </procedure>

    <procedure>
      <title>Способ 2.  Сборка ядра <quote>новым</quote> способом.</title>

      <step>
	<para>Перейдите в каталог <filename>/usr/src</filename>.</para>

    <screen>&prompt.root; <userinput>cd /usr/src</userinput></screen>
      </step>

      <step>
	<para>Соберите ядро.</para>

    <screen>&prompt.root; <userinput>make buildkernel KERNCONF=<replaceable>MYKERNEL</replaceable></userinput></screen>
      </step>

      <step>
	<para>Установите новое ядро.</para>

    <screen>&prompt.root; <userinput>make installkernel KERNCONF=<replaceable>MYKERNEL</replaceable></userinput></screen>
      </step>
    </procedure>

    <note>
      <para>В &os;&nbsp;4.2 и в более ранних, вам будет необходимо заменить
	<literal>KERNCONF=</literal> на <literal>KERNEL=</literal>.  4.2-STABLE,
	исходные тексты которой были обновлены до 2 февраля 2001 года, не
	понимает параметра <literal>KERNCONF=</literal>.</para>
    </note>

    <indexterm>
      <primary><filename class="directory">/boot/kernel.old</filename></primary>
    </indexterm>

    <para>Новое ядро будет скопировано в каталог <filename
      class="directory">/boot/kernel</filename> как
      <filename>/boot/kernel/kernel</filename>, а старое ядро будет перемещено в
      <filename>/boot/kernel.old/kernel</filename>.
      Теперь перезагрузите систему для того,
      чтобы использовать новое ядро.  Если что-то пойдёт не так, вы
      можете обратиться к разделу <link
      linkend="kernelconfig-trouble">Решение проблем</link> в конце
      этой главы, который может оказаться
      полезен.  Не забудьте прочитать
      раздел, который объясняет как исправить ситуацию, когда ядро <link
      linkend="kernelconfig-noboot">не загружается</link>.</para>

    <note>
      <para>В &os; 4.X и более ранних, ядро устанавливается в
	<filename>/kernel</filename>, модули в <filename
	class="directory">/modules</filename>, а старое ядро сохраняется в
	<filename>/kernel.old</filename>.  Другие файлы, относящиеся к
	процессу загрузки, такие как загрузчик (&man.loader.8;) и его
	конфигурационные файлы, размещаются в <filename>/boot</filename>.
	Модули сторонних производителей могут быть помещены в
	<filename class="directory">/modules</filename>, хотя пользователи
	должны знать, что
	очень важно, чтобы модули были синхронизированы с собранным ядром.
	Модули, не рассчитанные на работу с собранным ядром, могут вызвать
	нестабильность и некорректность работы.</para>
    </note>

    <note>
      <para>Если вы добавили новые устройства (такие, как звуковая карта) и
	используете &os;&nbsp;4.X или более ранние версии, то, возможно, вам
	понадобится создать некоторые файлы устройств в каталоге
	<filename class="directory">/dev</filename> перед тем, как вы
	сможете их использовать.
	За дополнительной информацией вы можете обратиться к разделу <link
	linkend="kernelconfig-nodes">Создание файлов устройств</link> далее в
	этой главе.</para>
    </note>
  </sect1>

  <sect1 id="kernelconfig-config">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Joel</firstname>
	  <surname>Dahl</surname>
	  <contrib>Обновил для &os; 5.X </contrib>
	  <!-- August 2004, PR docs/70674 -->
	</author>
	<!--  <editor><othername role="freefall login">ceri</othername></editor> -->
      </authorgroup>
    </sect1info>

    <title>Конфигурационный файл</title>
    <indexterm>
      <primary>ядро</primary>
      <secondary>NOTES</secondary>
    <indexterm>
      <primary>ядро</primary>
      <secondary>LINT</secondary>
    </indexterm>
    <indexterm><primary>NOTES</primary></indexterm>
    <indexterm><primary>LINT</primary></indexterm>
    <indexterm>
      <primary>ядро</primary>
      <secondary>конфигурационный файл</secondary>
    </indexterm>

    <para>Формат конфигурационного файла достаточно прост.  Каждая строка
      представляет собой ключевое слово и один или более аргументов.  Для
      простоты большинство строк содержат только один аргумент.  Всё, что
      следует за символом <literal>#</literal> является комментарием и
      игнорируется.  Следующие разделы описывают каждый параметр, в основном в
      порядке, в котором они появляются в <filename>GENERIC</filename>, хотя
      некоторые родственные параметры сгруппированы вместе в одном разделе
      (например Работа с сетью), даже если на самом деле они разбросаны по
      всему файлу <filename>GENERIC</filename>.  <anchor
      id="kernelconfig-options"> За полным списком архитектурно-зависимых
      параметров и устройств обратитесь к файлу <filename>NOTES</filename>
      в том же каталоге, что и <filename>GENERIC</filename>.  Архитектурно
      независимые параметры находятся в
      <filename>/usr/src/sys/conf/NOTES</filename>.</para>

    <note>
      <para><filename>NOTES</filename> не существует в &os;&nbsp;4.X.
	Детальное описание параметров и устройств из
	<filename>GENERIC</filename> находится в файле
	<filename>LINT</filename>.  В 4.X <filename>LINT</filename>
	служит двум целям: предоставить справочное руководство для
	выбора параметров ядра при сборке ядра по умолчанию и
	предоставить конфигурацию ядра с параметрами, установленными
	в значения, отличные от значений по умолчанию (настолько
	много параметров, насколько это возможно).  Это было сделано
	по той причине, что такая конфигурация хорошо помогала
	(и все еще помогает) при тестировании нового кода и изменений
	в существующем коде, поскольку этот код и изменения могут
	конфликтовать с другими частями ядра.  Однако, инфраструктура
	конфигурации ядра в 5.X прошла через множество серьезных изменений;
	Одно из таких изменений &ndash; перемещение параметров конфигурации
	драйверов в <literal>hints</literal>, и теперь они могут быть
	изменены и загружены динамически во время загрузки системы,
	а в <filename>LINT</filename> их больше нет.  По этой и другим
	причинам <filename>LINT</filename> был переименован в
	<filename>NOTES</filename> и в основном по-прежнему соответствует
	своему назначению: информирование пользователей о доступных
	параметрах.</para>

      <para>В &os; 5.X и более поздних версиях вы все еще можете создать
	собираемый <filename>LINT</filename>, выполнив:</para>

      <screen>&prompt.root; <userinput>cd /usr/src/sys/<replaceable>i386</replaceable>/conf && make LINT</userinput></screen>
    </note>

    <indexterm>
      <primary>kernel</primary>
      <secondary>конфигурационный файл</secondary>
    </indexterm>

    <para>Это пример конфигурационного файла ядра
      <filename>GENERIC</filename> с различными дополнительными комментариями,
      которые могут понадобиться для ясности.  Этот пример должен совпадать с вашей
      копией в
      <filename>/usr/src/sys/<replaceable>i386</replaceable>/conf/GENERIC</filename>
      практически полностью.</para>

    <programlisting>#
# GENERIC -- Generic kernel configuration file for &os;/i386
#
# For more information on this file, please read the handbook section on
# Kernel Configuration Files:
#
#    http://www.&os;.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
#
# The handbook is also available locally in /usr/share/doc/handbook
# if you've installed the doc distribution, otherwise always see the
# &os; World Wide Web server (http://www.FreeBSD.org/) for the
# latest information.
#
# An exhaustive list of options and more detailed explanations of the
# device lines is also present in the ../../conf/NOTES and NOTES files.
# If you are in doubt as to the purpose or necessity of a line, check first
# in NOTES.
#
# &dollar;FreeBSD: /repoman/r/ncvs/src/sys/i386/conf/GENERIC,v 1.413 2004/08/11 01:34:18 rwatson Exp &dollar;</programlisting>

    <para>Следующие параметры обязательны для <emphasis>любого</emphasis> ядра,
      которое вы будете собирать:</para>
    <indexterm>
      <primary>параметры ядра</primary>
      <secondary>machine</secondary>
    </indexterm>

    <programlisting>machine        i386</programlisting>

    <para>Это архитектура машины.  Она должна быть одной из
      следующих:
      <literal>alpha</literal>, <literal>amd64</literal>,
      <literal>i386</literal>, <literal>ia64</literal>,
      <literal>pc98</literal>, <literal>powerpc</literal>, или
      <literal>sparc64</literal>.</para>

    <indexterm>
      <primary>параметры ядра</primary>
      <secondary>cpu</secondary>
    </indexterm>
    <programlisting>cpu          I486_CPU
cpu          I586_CPU
cpu          I686_CPU</programlisting>

    <para>Эта опция указывает тип процессора, который используется в вашей
      системе.  В конфигурационном файле может быть несколько вхождений этой
      опции (например, если вы не уверены, какой из типов процессора необходимо
      использовать &mdash; <literal>I586_CPU</literal> или
      <literal>I686_CPU</literal>), но для собственного ядра лучше указывать
      только тот тип процессора, который установлен в вашей системе.  Если вы
      не уверены, какой тип необходимо использовать вам, вы можете
      воспользоваться файлом <filename>/var/run/dmesg.boot</filename>, чтобы
      увидеть протокол загрузки системы.</para>

    <indexterm>
      <primary>параметры ядра</primary>
      <secondary>cpu type</secondary>
    </indexterm>
    <para>Поддержка типа <literal>I386_CPU</literal> все ещё существует в
      исходных текстах &os;, но по умолчанию отключена в ветках -STABLE и
      -CURRENT.  Это означает, что для того, чтобы установить &os; на систему с
      процессором i386, вы можете использовать следующие способы:</para>

    <itemizedlist>
      <listitem>
	<para>Установить более раннюю версию &os; и пересобрать систему из
	  исходных текстов в соответствии с
	  <xref linkend="kernelconfig-building">.</para>
      </listitem>

      <listitem>
	<para>Собрать систему и ядро на более новой машине и установить на
	  386 используя уже собранные файлы в <filename>/usr/obj</filename>
	  (за дополнительной информацией можете обратиться к <xref
	  linkend="small-lan">).</para>
      </listitem>

      <listitem>
	<para>Сделать собственный релиз &os;, который включает поддержку
	  <literal>I386_CPU</literal> в ядре установочного CD-ROM.</para>
      </listitem>
    </itemizedlist>

    <para>Первый из этих способов, возможно, наиболее простой из всех
     предложенных, но вам понадобится много дискового пространства, что может
     быть затруднительно для систем класса 386.</para>

    <indexterm>
      <primary>параметры ядра</primary>
      <secondary>ident</secondary>
    </indexterm>

    <programlisting>ident          GENERIC</programlisting>

    <para>Этот параметр определяет <quote>метку</quote> ядра.  Необходимо,
      чтобы она соответствовала названию файла конфигурации ядра, например
      <literal>MYKERNEL</literal>, если вы следовали инструкциям в предыдущих
      примерах.  Значение, которое вы присвоите параметру
      <literal>ident</literal> будет выводиться в процессе загрузки, поэтому
      полезно давать новым ядрам другие имена для того, чтобы отличать их от
      обычного ядра (например, если вы хотите собрать экспериментальное
      ядро).</para>
    <indexterm>
      <primary>параметры ядра</primary>
      <secondary>maxusers</secondary>
    </indexterm>

    <programlisting>maxusers          <replaceable>n</replaceable></programlisting>

    <para>Параметр <literal>maxusers</literal> определяет размеры многих важных
      системных таблиц.  Это число должно быть приблизительно равно количеству
      пользователей, одновременно использующих вашу систему.</para>

    <para>Начиная с &os;&nbsp;4.5, система автоматически настроит этот параметр
      если в конфигурационном файле вы установили его в значение
      <literal>0</literal><footnote><para>Алгоритм автоматической настройки
      устанавливает <literal>maxusers</literal> равным количеству памяти в
      системе, минимум 32 и максимум 384.</para></footnote>.
      В &os;&nbsp;5.X и выше, <literal>maxusers</literal> по умолчанию равен
      <literal>0</literal>, если не установлено другое значение.  Если вы
      используете &os; версии более ранней, чем 4.5, или хотите самостоятельно
      управлять этим значением, рекомендуется устанавливать значение
      <literal>maxusers</literal> равным минимум 4, особенно если вы
      используете X Window System или компиляторы.  Причина этого кроется в
      том, что одной из основных таблиц, размер которой определяет
      <literal>maxusers</literal>, является максимальное количество процессов,
      которое устанавливается равным <literal>20 + 16 * maxusers</literal>,
      таким образом, если вы установите <literal>maxusers</literal> равным 1,
      то получите возможность выполнять максимум 36 одновременных процессов,
      включая 18 или около того процессов, которые система запускает при
      загрузке, и 15 или около того вы создадите, когда запустите X Window
      System.  Даже такая простая задача, как чтение страницы справочной
      системы (&man.man.1;), потребует запуска девяти процессов, для того,
      чтобы использовать фильтры, распаковать и просмотреть её.  Установка
      <literal>maxusers</literal> в значение 64 позволит запускать до 1044
      одновременных процессов, что должно быть достаточно для большинства
      применений.  Однако, если вы видите ошибку <errortype>proc table
      full</errortype>, когда пытаетесь запустить программу или поддерживаете
      сервер с большим количеством пользователей (такой, как <hostid
      role="fqdn">ftp.FreeBSD.org</hostid>), вы всегда можете увеличить это
      число и пересобрать ядро.</para>

    <note>
      <para><literal>maxusers</literal> <emphasis>не ограничивает</emphasis>
	количество пользователей, которые могут зайти на вашу машину.  Он
	просто устанавливает размеры различных таблиц в разумные значения,
	учитывая максимальное количество пользователей, которое будет у вас в
	системе и как много процессов будет запускать каждый из них.  Параметр
	ядра, который <emphasis>действительно ограничивает</emphasis> количество
	одновременных удалённых сессий и окон X терминала,
	это <link linkend="kernelconfig-ptys"><literal>pseudo-device pty
	16</literal></link>.  С &os;&nbsp;5.X, вам не нужно беспокоиться об
	этом номере, поскольку драйвер &man.pty.4;
	<quote>автоклонируемый</quote>; используйте в файле конфигурации
	строку <literal>device pty</literal>.</para>
    </note>

    <programlisting># Floating point support - do not disable.
device          npx</programlisting>

    <para><literal>npx</literal> &mdash; это интерфейс к модулю операций с плавающей
      точкой в &os;, который может использовать как аппаратный сопроцессор, так
      и программную эмуляцию.  Этот параметр <emphasis>является
      обязательным</emphasis>.</para>

    <programlisting># Pseudo devices
device   loop          # Network loopback</programlisting>

    <para>Стандартное устройство обратной связи для TCP/IP.  Если вы запускаете
      telnet или FTP на <hostid>localhost</hostid> (он же <hostid
      role="ipaddr">127.0.0.1</hostid>), то соединение пройдёт через это
      устройство.  Этот параметр <emphasis>обязателен</emphasis>.  В
      &os;&nbsp;4.X вам потребуется использовать <literal>pseudo-device
      loop</literal>.</para>

    <para>Все остальные параметры более или менее опциональны.  Обращайте
      внимание на информацию о каждой опции, которая размещается рядом с
      ней.</para>

    <programlisting>#To statically compile in device wiring instead of /boot/device.hints
#hints          "GENERIC.hints"         # Default places to look for devices.</programlisting>

    <para>В &os; 5.X и более поздних &man.device.hints.5; используются для
      настройки параметров драйверов устройств.  Путь по умолчанию, который
      &man.loader.8; будет проверять при загрузке -
      <filename>/boot/device.hints</filename>.  Используя опцию
      <literal>hints</literal> вы можете вкомпилировать эти параметры
      статически в ваше ядро.  В этом случае не требуется создавать файл
      <filename>device.hints</filename> в каталоге
      <filename>/boot</filename>.</para>

    <!-- XXX: Add a comment here that explains when compiling hints into
      the kernel is a good idea and why. -->

    <programlisting>#makeoptions     DEBUG=-g          # Build kernel with gdb(1) debug symbols</programlisting>

    <para>Обычный процесс сборки &os; не включает генерацию отладочной
      информации при сборке ядра и удаляет большую часть вспомогательной
      информации (symbols) после того как ядро слинковано для того, чтобы
      сэкономить немного места.  Если вы собираетесь проводить тестирование
      ядер в ветви -CURRENT или разрабатывать собственные правки для ядра &os;,
      возможно вам потребуется раскомментировать эту строку.  Тем самым вы
      включите использования опции <option>-g</option>, которая включает
      генерацию отладочной информации &man.gcc.1;.  Того же самого эффекта
      можно добиться используя опцию &man.config.8; <option>-g</option>, в
      случае, если вы используете <quote>традиционный</quote> способ сборки
      ядра (обратитесь к <xref linkend="kernelconfig-building"> за
      дополнительной информацией).</para>

    <programlisting>options          SCHED_4BSD         # 4BSD scheduler</programlisting>

    <para>Традиционный планировщик &os;.  В зависимости от загруженности
      системы, вы можете повысить производительность, используя
      новый планировщик &os; ULE, который был специально разработан для
      SMP, но отлично работает также и на однопроцессорных системах.
      Если вы хотите попробовать этот планировщик, замените
      <literal>SCHED_4BSD</literal> на <literal>SCHED_ULE</literal> в
      файле конфигурации ядра.</para>

    <programlisting>options          INET              # InterNETworking</programlisting>

    <para>Поддержка сетевых возможностей.  Оставьте эту опцию включенной, даже
      если вы не планируете подключаться к сети.  Большинство программ требуют,
      чтобы работал хотя бы интерфейс обратной связи (loopback) (т.е.
      создание сетевых соединений внутри вашего ПК), так что эта опция в
      принципе является обязательной.</para>

    <programlisting>options          INET6             # IPv6 communications protocols</programlisting>

    <para>Включает поддержку коммуникационных протоколов IPv6.</para>

    <programlisting>options          FFS               # Berkeley Fast Filesystem</programlisting>

    <para>Включает поддержку основной файловой системы.  Не удаляйте эту опцию,
      если вы планируете загружаться с жесткого диска.</para>

    <programlisting>options          UFS_ACL           # Support for access control lists</programlisting>

    <para>Этот параметр, присутствующий только в &os;&nbsp;5.X, включает в ядре
      поддержку списков управления доступом (ACL).  Основывается на
      использовании расширенных атрибутов и <acronym>UFS2</acronym>, детальное
      описание вы сможете найти в <xref linkend="fs-acl">.
      <acronym>ACL</acronym> включены по умолчанию и не должны выключаться в
      случае, если они ранее использовались на файловой системе, так как это
      удалит списки управления доступом и изменит то, как защищены файлы,
      непредсказуемым образом.</para>

    <programlisting>options          UFS_DIRHASH       # Improve performance on big directories</programlisting>

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

    <programlisting>options          SOFTUPDATES       # Enable FFS Soft Updates support</programlisting>

    <para>Этот параметр включает в ядре технологию Soft Updates, которая
      повышает скорость записи на диски.  Несмотря на то, что эта технология
      включена в ядре, она должна быть включена для отдельных дисков.
      Просмотрите вывод команды &man.mount.8; чтобы определить, включены ли
      Soft Updates для дисков вашей системы.  Если вы не увидите параметр
      <literal>soft-updates</literal>, вам будет необходимо активировать его
      при помощи команды &man.tunefs.8; (для существующих файловых систем) или
      команды &man.newfs.8; (для новых файловых систем).</para>

    <programlisting>options          MD_ROOT           # MD is a potential root device</programlisting>

    <para>Этот параметр включает поддержку использования дисков
      в памяти для корневой файловой системы.</para>

    <indexterm>
      <primary>параметры ядра</primary>
      <secondary>NFS</secondary>
    </indexterm>
    <indexterm>
      <primary>параметры ядра</primary>
      <secondary>NFS_ROOT</secondary>
    </indexterm>

    <programlisting>options          NFSCLIENT         # Network Filesystem Client
options          NFSSERVER         # Network Filesystem Server
options          NFS_ROOT          # NFS usable as /, requires NFSCLIENT</programlisting>

    <para>Сетевая файловая система.  Если вы не планируете монтировать разделы
      с файлового сервера &unix; через TCP/IP, вы можете исключить этот
      параметр из конфигурационного файла ядра.</para>

    <indexterm>
      <primary>параметры ядра</primary>
      <secondary>MSDOSFS</secondary>
    </indexterm>

    <programlisting>options          MSDOSFS           # MSDOS Filesystem</programlisting>

    <para>Файловая система &ms-dos;.  Если вы не собираетесь монтировать
      форматированный в DOS раздел жесткого диска в момент загрузки, вы можете
      безопасно закомментировать этот параметр.  Необходимый модуль будет
      автоматически загружен, когда вы в первый раз смонтируете раздел DOS, так,
      как это описано ниже.  Кроме того, замечательный пакет
      <filename role="package">emulators/mtools</filename> позволяет получить
      доступ к DOS дискетам без необходимости монтировать и размонтировать их
      (и не требует наличия <literal>MSDOSFS</literal>).</para>

    <programlisting>options          CD9660            # ISO 9660 Filesystem</programlisting>

    <para>Файловая система ISO 9660 для компакт-дисков.  Если у вас нет привода
      CDROM или вы будете лишь изредка монтировать компакт-диски с данными,
      закомментируйте эту строку, так как необходимый модуль будет загружен
      автоматически при первом монтировании компакт-диска с данными.  Для
      использования звуковых компакт-дисков эта файловая система не
      потребуется.</para>

    <programlisting>options          PROCFS            # Process filesystem</programlisting>

    <para>Файловая система процессов.  Это <quote>виртуальная</quote> файловая
      система монтируемая в <filename>/proc</filename>, которая позволяет таким
      приложениям, как &man.ps.1; выдавать вам больше информации о запущенных
      процессах.  В &os; 5.X и выше, использование <literal>PROCFS</literal> не
      требуется, так как большинство мониторинговых и отладочных инструментов
      было адаптировано для работы без <literal>PROCFS</literal>: в отличие
      от &os; 4.X, новые системы &os; 5.X по умолчанию не монтируют файловую
      систему процессов. Более того,
      ядра 6.X-CURRENT, которые используют <literal>PROCFS</literal>, должны
      также включать поддержку <literal>PSEUDOFS</literal>:</para>

    <programlisting>options          PSEUDOFS          # Pseudo-filesystem framework</programlisting>

    <para><literal>PSEUDOFS</literal> недоступна в &os; 4.X.</para>

    <programlisting>options          GEOM_GPT          # GUID Partition Tables.</programlisting>

    <para>Этот параметр делает возможным наличие большого количества
      разделов на одном диске.</para>

    <programlisting>options          COMPAT_43         # Compatible with BSD 4.3 [KEEP THIS!]</programlisting>

    <para>Совместимость с 4.3BSD.  Не выключайте эту опцию; некоторые
      приложения будут вести себя странно, если этой опции не будет в
      ядре.</para>

    <programlisting>options          COMPAT_FREEBSD4   # Compatible with &os;4</programlisting>

    <para>Эта опция требуется в &os;&nbsp;5.X для платформ &i386; и Alpha для
      поддержки приложений, собранных на более старых версиях &os;, которые
      используют старые интерфейсы вызовов.  Рекомендуется использовать данную
      опцию на всех системах на платформах &i386; и Alpha, на которых могут
      запускаться старые приложения; платформы, поддержка которых появилась
      только в &os;&nbsp;5.X, например ia64 и &sparc64;, не требуют этой
      опции.</para>

    <programlisting>options          SCSI_DELAY=15000  # Delay (in ms) before probing SCSI</programlisting>

    <para>Этот параметр заставляет ядро приостановиться на 15 секунд перед тем,
      как идентифицировать каждое устройство SCSI в вашей системе.  Если у вас
      установлены только жесткие диски IDE, вы можете игнорировать эту опцию, в
      противном случае, возможно, вы захотите уменьшить это число, например до
      5 секунд, для того, чтобы ускорить загрузку.  Естественно, что если вы
      сделаете это, а у &os; появятся проблемы с распознанием ваших устройств
      SCSI, необходимо будет увеличить этот параметр.</para>

    <programlisting>options          KTRACE            # ktrace(1) support</programlisting>

    <para>Включает поддержку трассировки процессов, что удобно при
      отладке.</para>

    <programlisting>options          SYSVSHM           # SYSV-style shared memory</programlisting>

    <para>Этот параметр предоставляет поддержку разделяемой памяти System&nbsp;V.
      Наиболее распространенное применение этого &mdash; расширение XSHM в X, которое
      многие приложения, интенсивно работающие с графикой, будут автоматически
      использовать для повышения скорости работы.  Если вы используете X,
      эта опция будет необходима.</para>

    <programlisting>options          SYSVMSG           # SYSV-style message queues</programlisting>

    <para>Поддержка сообщений System&nbsp;V.  Этот параметр
      добавляет в ядро всего лишь несколько сотен байт.</para>

    <programlisting>options          SYSVSEM           # SYSV-style semaphores</programlisting>

    <para>Поддержка семафоров System&nbsp;V.  Не настолько часто используемая
      возможность, но в ядро добавляет всего несколько сотен байт.</para>

    <note>
      <para>Команда &man.ipcs.1; с параметром <option>-p</option> покажет
	все процессы, которые используют любую из этих возможностей
	System&nbsp;V.</para>
    </note>

    <programlisting>options 	     _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions</programlisting>

    <para>Расширения реального времени, добавленные 1993 &posix;.  Определенные
      приложения из коллекции используют их, например
      <application>&staroffice;</application>.</para>

    <programlisting>options          KBD_INSTALL_CDEV  # install a CDEV entry in /dev</programlisting>

    <para>Этот параметр относится к клавиатуре. Он добавляет CDEV
      в <filename>/dev</filename>.</para>

    <programlisting>options          AHC_REG_PRETTY_PRINT     # Print register bitfields in debug
                                          # output.  Adds ~128k to driver.
options          AHD_REG_PRETTY_PRINT     # Print register bitfields in debug
                                          # output.  Adds ~215k to driver.</programlisting>

    <para>Распечатка регистров для облегчения отладки.</para>

    <programlisting>options          ADAPTIVE_GIANT    # Giant mutex is adaptive.</programlisting>

    <para>Giant&nbsp;&mdash; имя механизма защиты (<quote>спящего</quote>
      мьютекса) для крупных наборов ресурсов ядра.  На нынешний момент
      Giant представляется фактически непригодным для использования в связи
      с серьезными потерями в производительности, и активно заменяется
      на механизмы, защищающие отдельные ресурсы ядра.  Параметр
      <literal>ADAPTIVE_GIANT</literal> включает Giant в число адаптивных
      мьютексов: в случае, когда нить ядра нуждается в Giant, а он уже
      захвачен нитью, выполняющейся на другом процессоре, первая нить
      будет продолжать выполнение и ждать освобождения Giant.  В норме
      нить должна была бы уснуть, пока не настанет очередной момент ее
      выполнения.  Если вы не уверены, оставьте этот параметр в покое.</para>

    <indexterm>
      <primary>kernel options</primary>
      <secondary>SMP</secondary>
    </indexterm>

    <programlisting>device          apic               # I/O APIC</programlisting>

    <para>Устройство apic разрешает использование набора I/O APIC для
      распределения прерываний.  Оно может быть использовано как с
      однопроцессорными, так и с многопроцессорными ядрами (для последних
      наличие apic является обязательным).  Для поддержки многопроцессорности
      добавьте строку <literal>options SMP</literal>.</para>

    <programlisting>device          isa</programlisting>

    <para>Все компьютеры, поддерживаемые &os;, имеют хотя бы одно устройство ISA.
      Не удаляйте эту строку, даже если в вашем компьютере нет слотов ISA.
      Для архитектуры IBM PS/2 (Микроканальная Архитектура (MCA)), &os;
      предоставляет ограниченную поддержку данной шины.  За дальнейшей
      информацией о поддержке MCA обратитесь к файлу
      <filename>/usr/src/sys/i386/conf/NOTES</filename>.</para>

    <programlisting>device          eisa</programlisting>

    <para>Включите эту опцию если у вас материнская плата EISA.  Это включает
      автоопределение и конфигурирование поддержки всех устройств на шине
      EISA.</para>

    <programlisting>device          pci</programlisting>

    <para>Включите этот параметр, если у вас материнская плата с поддержкой
      PCI.  Это включит автоопределение карт PCI и проксирование из шины PCI в
      шину ISA.</para>

    <programlisting>device          agp</programlisting>

    <para>Включите эту опцию, если у вас есть AGP карта в системе.  Это включит
      поддержку AGP и AGP GART для тех карт, которые поддерживают эту
      возможность.</para>

    <programlisting># Floppy drives
device          fdc</programlisting>

    <para>Контроллер флоппи-диска.</para>

    <programlisting># ATA and ATAPI devices
device          ata</programlisting>

    <para>Этот драйвер поддерживает все устройства ATA и ATAPI.  Вам необходима
      только одна строка <literal>device ata</literal> в ядре для того, чтобы
      обнаружить все PCI устройства ATA/ATAPI в современных машинах.</para>

    <programlisting>device          atadisk                 # ATA disk drives</programlisting>

    <para>Эта строка необходима вместе с <literal>device ata</literal> для
      поддержки дисков ATA.</para>

    <programlisting>device          ataraid                 # ATA RAID drives</programlisting>

    <para>Эта строка необходима вместе с <literal>device ata</literal>
      для поддержки дисков ATA RAID.</para>

    <programlisting><anchor id="kernelconfig-atapi">
device          atapicd                 # ATAPI CDROM drives</programlisting>

    <para>Поддержка приводов ATAPI CDROM.  Используется вместе с
      <literal>device ata</literal>.</para>

    <programlisting>device          atapifd                 # ATAPI floppy drives</programlisting>

    <para>Поддержка флоппи-приводов ATAPI.  Используется вместе с
      <literal>device ata</literal>.</para>

    <programlisting>device          atapist                 # ATAPI tape drives</programlisting>

    <para>Поддержка ленточных приводов ATAPI (стримеров).  Используется вместе с
      <literal>device ata</literal>.</para>

    <programlisting>options         ATA_STATIC_ID           # Static device numbering</programlisting>

    <para>Заставляет драйвер нумеровать устройства статически;
      в противном случае происходит динамическая нумерация.</para>

    <programlisting># SCSI Controllers
device          ahb        # EISA AHA1742 family
device          ahc        # AHA2940 and onboard AIC7xxx devices
device          ahd        # AHA39320/29320 and onboard AIC79xx devices
device          amd        # AMD 53C974 (Teckram DC-390(T))
device          isp        # Qlogic family
device          mpt        # LSI-Logic MPT-Fusion
#device         ncr        # NCR/Symbios Logic
device          sym        # NCR/Symbios Logic (newer chipsets)
device          trm        # Tekram DC395U/UW/F DC315U adapters

device          adv        # Advansys SCSI adapters
device          adw        # Advansys wide SCSI adapters
device          aha        # Adaptec 154x SCSI adapters
device          aic        # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
device          bt         # Buslogic/Mylex MultiMaster SCSI adapters

device          ncv        # NCR 53C500
device          nsp        # Workbit Ninja SCSI-3
device          stg        # TMC 18C30/18C50</programlisting>

    <para>Контроллеры SCSI.  Закомментируйте те, которых у вас в системе нет.
      Если у вас в системе исключительно IDE устройства, вы можете удалить все
      эти строки.</para>

    <programlisting># SCSI peripherals
device          scbus      # SCSI bus (required for SCSI)
device          ch         # SCSI media changers
device          da         # Direct Access (disks)
device          sa         # Sequential Access (tape etc)
device          cd         # CD
device          pass       # Passthrough device (direct SCSI access)
device          ses        # SCSI Environmental Services (and SAF-TE)</programlisting>

    <para>Периферийные устройства SCSI.  Опять-таки, закомментируйте те,
      которых у вас в системе нет, или, если у вас в наличии исключительно IDE,
      можете удалить все.</para>

    <note>
      <para>USB &man.umass.4; драйвер (и некоторые другие драйверы) используют
	подсистему SCSI, хотя и не являются настоящими SCSI устройствами.
	Следовательно, вам необходимо сохранить поддержку SCSI, если
	какой-либо из этих драйверов включен в конфигурацию ядра.</para>
    </note>

    <programlisting># RAID controllers interfaced to the SCSI subsystem
device          amr        # AMI MegaRAID
device          asr        # DPT SmartRAID V, VI and Adaptec SCSI RAID
device          ciss       # Compaq Smart RAID 5*
device          dpt        # DPT Smartcache III, IV - See NOTES for options
device          hptmv      # Highpoint RocketRAID 182x
device          iir        # Intel Integrated RAID
device          ips        # IBM (Adaptec) ServeRAID
device          mly        # Mylex AcceleRAID/eXtremeRAID
device          twa        # 3ware 9000 series PATA/SATA RAID

# RAID controllers
device          aac        # Adaptec FSA RAID
device          aacp       # SCSI passthrough for aac (requires CAM)
device          ida        # Compaq Smart RAID
device          mlx        # Mylex DAC960 family
device          pst        # Promise Supertrak SX6000
device          twe        # 3ware ATA RAID</programlisting>

    <para>Поддерживаемые RAID-контроллеры.  Если у вас нет таковых, можете их
      закомментировать или удалить эти строки.</para>

    <programlisting># atkbdc0 controls both the keyboard and the PS/2 mouse
device          atkbdc     # AT keyboard controller</programlisting>

    <para>Контроллер клавиатуры (<literal>atkbdc</literal>) предоставляет
      средства ввода/вывода для клавиатуры AT и PS/2 устройств.  Этот
      контроллер необходим драйверу клавиатуры (<literal>atkbd</literal>) и
      PS/2 устройств (<literal>psm</literal>).</para>

    <programlisting>device          atkbd      # AT keyboard</programlisting>

    <para>Драйвер <literal>atkbd</literal> вместе с контроллером
      <literal>atkbdc</literal> предоставляет доступ к клавиатуре AT 84 или
      улучшенной клавиатуре AT, которая подключена к контроллеру AT
      клавиатуры.</para>

    <programlisting>device          psm        # PS/2 mouse</programlisting>

    <para>Используйте это устройство, если ваша мышь включается в порт
      PS/2.</para>

    <programlisting>device          vga        # VGA video card driver</programlisting>

    <para>Драйвер видеокарты.</para>

    <programlisting># splash screen/screen saver
device          splash     # Splash screen and screen saver support</programlisting>

    <para>Заставка при загрузке.  Хранители экрана также требуют этого
      устройства.  В  &os;&nbsp;4.X используйте строку
      <literal>pseudo-device splash</literal>.</para>

    <programlisting># syscons is the default console driver, resembling an SCO console
device          sc</programlisting>

    <para><literal>sc</literal> &mdash; это драйвер консоли по умолчанию, который
      имитирует консоль SCO.  Так как большая часть консольных полноэкранных
      приложений обращаются к консоли через терминальную библиотеку
      <filename>termcap</filename>, вас не должно волновать, будете ли вы
      использовать этот драйвер, либо драйвер <literal>vt</literal>, который
      является <literal>VT220</literal>-совместимым драйвером консоли.  Если у
      вас возникнут какие-либо проблемы с приложениями, работающими с этим
      драйвером консоли, установите переменную окружения <envar>TERM</envar> в
      значение <literal>scoansi</literal>.</para>

    <programlisting># Enable this for the pcvt (VT220 compatible) console driver
#device          vt
#options         XSERVER          # support for X server on a vt console
#options         FAT_CURSOR       # start with block cursor</programlisting>

    <para>VT220-совместимый драйвер консоли, обратно совместимый с VT100/102.
      Он работает лучше на некоторых лэптопах, у которых возникают проблемы
      несовместимости с <literal>sc</literal>.  Также, установите переменную
      окружения <envar>TERM</envar> в значение <literal>vt100</literal> или
      <literal>vt220</literal>.  Этот драйвер также может быть полезен в
      случаях подключения к большому количеству различных машин через сеть, на
      которых параметры для устройства <literal>sc</literal> для
      <filename>termcap</filename> или <filename>terminfo</filename> могут
      отсутствовать &mdash; <literal>vt100</literal> присутствует практически
      на любой платформе.</para>

    <indexterm>
      <primary>APM</primary>
    </indexterm>

    <programlisting># Power management support (see NOTES for more options)
#device          apm</programlisting>

    <para>Поддержка Advanced Power Management.  Чаще всего используется в
      лэптопах, хотя в ядре <filename>GENERIC</filename> &os; 5.X
      и выше отключена по умолчанию.</para>

    <programlisting># Add suspend/resume support for the i8254.
device           pmtimer</programlisting>

    <para>Устройство таймера для управления энергопотреблением, APM и
      ACPI.</para>

    <programlisting># PCCARD (PCMCIA) support
# PCMCIA and cardbus bridge support
device          cbb               # cardbus (yenta) bridge
device          pccard            # PC Card (16-bit) bus
device          cardbus           # CardBus (32-bit) bus</programlisting>

    <para>Поддержка PCMCIA.  Включите ее, если вы используете лэптоп.</para>

    <programlisting># Serial (COM) ports
device          sio               # 8250, 16[45]50 based serial ports</programlisting>

    <para>Четыре последовательных порта, которые известны как
      <devicename>COM</devicename> порты
      в мире &ms-dos;/&windows;</para>

    <note>
      <para>Если у вас есть внутренний модем на <devicename>COM4</devicename> и последовательный порт
	<devicename>COM2</devicename>, вам понадобится поменять IRQ модема на 2 (по непонятным
	техническим причинам IRQ2 = IRQ9) для того, чтобы получить к нему
	доступ из &os;.  Если у вас есть многопортовая карта с
	последовательными портами, ознакомьтесь с &man.sio.4; чтобы узнать
	корректные значения для добавления в
	<filename>/boot/device.hints</filename>.  Некоторые видеокарты (в частности
	те, что используют чипы S3) используют адреса ввода/вывода в форме
	<literal>0x*2e8</literal> и, так как многие дешевые последовательные
	карты не полностью раскодируют шестнадцатибитное пространство адресов
	ввода/вывода, они конфликтуют с этими картами, в итоге <devicename>COM4</devicename> оказывается
	практически недоступным.</para>

	<para>Каждый последовательный порт требует уникального IRQ (кроме тех
	  случаев, когда вы используете мультипортовую карту, которая
	  поддерживает совместное использование прерываний), поэтому значения
	  IRQ по умолчанию для <devicename>COM3</devicename> и
	  <devicename>COM4</devicename> не могут быть использованы.</para>
    </note>

    <programlisting># Parallel port
device          ppc</programlisting>

    <para>Интерфейс параллельного порта на шине ISA.</para>

    <programlisting>device          ppbus      # Parallel port bus (required)</programlisting>

    <para>Поддержка шины параллельного порта.</para>

    <programlisting>device          lpt        # Printer</programlisting>

    <para>Поддержка принтеров на параллельном порту.</para>

    <note>
      <para>Все три последних устройства необходимы для поддержка принтеров на
	параллельном порту.</para>
    </note>

    <programlisting>device          plip       # TCP/IP over parallel</programlisting>

    <para>Драйвер TCP/IP через параллельный порт.</para>

    <programlisting>device          ppi        # Parallel port interface device</programlisting>

    <para>Поддержка ввода/вывода общего назначения (<quote>geek port</quote>) +
      IEEE1284 ввода/вывода.</para>

    <programlisting>#device         vpo        # Requires scbus and da</programlisting>

    <indexterm><primary>zip drive</primary></indexterm>
    <para>Драйвер привода Iomega Zip.  Требует наличия <literal>scbus</literal>
      и <literal>da</literal>.  Наилучшая производительность достигается с
      портами в режиме EPP 1.9.</para>

    <programlisting>#device         puc</programlisting>

    <para>Раскомментируйте это устройство, если у вас есть
      <quote>простая</quote> последовательная или параллельная
      PCI карта, поддерживаемая драйвером &man.puc.4;.</para>

    <programlisting># PCI Ethernet NICs.
device          de         # DEC/Intel DC21x4x (<quote>Tulip</quote>)
device          em         # Intel PRO/1000 adapter Gigabit Ethernet Card
device          ixgb       # Intel PRO/10GbE Ethernet Card
device          txp        # 3Com 3cR990 (<quote>Typhoon</quote>)
device          vx         # 3Com 3c590, 3c595 (<quote>Vortex</quote>)</programlisting>

    <para>Драйвера сетевых карт PCI.  Закомментируйте или удалите драйвера тех
      карт, которые отсутствуют в вашей системе.</para>

    <programlisting># PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device          miibus     # MII bus support</programlisting>

    <para>Поддержка шины MII требуется для некоторых PCI 10/100 Ethernet карт,
      которые используют MII-совместимые передатчики или реализуют
      интерфейс управления передатчиком, который имитирует MII.  Добавление
      <literal>device miibus</literal> в конфигурационный файл ядра включает
      поддержку стандартного API miibus и всех драйверов PHY, включая стандартный
      для тех PHY, которые не обрабатываются специфическим образом конкретным
      драйвером.</para>

    <programlisting>device          dc         # DEC/Intel 21143 and various workalikes
device          miibus     # MII bus support
device          bfe        # Broadcom BCM440x 10/100 Ethernet
device          bge        # Broadcom BCM570xx Gigabit Ethernet
device          dc         # DEC/Intel 21143 and various workalikes
device          fxp        # Intel EtherExpress PRO/100B (82557, 82558)
device          pcn        # AMD Am79C97x PCI 10/100 (precedence over 'lnc')
device          re         # RealTek 8139C+/8169/8169S/8110S
device          rl         # RealTek 8129/8139
device          sf         # Adaptec AIC-6915 (<quote>Starfire</quote>)
device          sis        # Silicon Integrated Systems SiS 900/SiS 7016
device          sk         # SysKonnect SK-984x & SK-982x gigabit Ethernet
device          ste        # Sundance ST201 (D-Link DFE-550TX)
device          ti         # Alteon Networks Tigon I/II gigabit Ethernet
device          tl         # Texas Instruments ThunderLAN
device          tx         # SMC EtherPower II (83c170 <quote>EPIC</quote>)
device          vr         # VIA Rhine, Rhine II
device          wb         # Winbond W89C840F
device          xl         # 3Com 3c90x (<quote>Boomerang</quote>, <quote>Cyclone</quote>)</programlisting>

    <para>Драйвера, которые используют контроллер шины MII.</para>

    <programlisting># ISA Ethernet NICs.  pccard NICs included.
device          cs         # Crystal Semiconductor CS89x0 NIC
# 'device ed' requires 'device miibus'
device          ed         # NE[12]000, SMC Ultra, 3c503, DS8390 cards
device          ex         # Intel EtherExpress Pro/10 and Pro/10+
device          ep         # Etherlink III based cards
device          fe         # Fujitsu MB8696x based cards
device          ie         # EtherExpress 8/16, 3C507, StarLAN 10 etc.
device          lnc        # NE2100, NE32-VL Lance Ethernet cards
device          sn         # SMC's 9000 series of Ethernet chips
device          xe         # Xircom pccard Ethernet

# ISA devices that use the old ISA shims
#device         le</programlisting>

    <para>Драйвера сетевых карт ISA.  Ознакомьтесь с файлом
      <filename>/usr/src/sys/<replaceable>i386</replaceable>/conf/NOTES</filename>,
      чтобы узнать, какие
      сетевые карты каким драйвером поддерживаются.</para>

    <programlisting># Wireless NIC cards
device          wlan       # 802.11 support
device          an         # Aironet 4500/4800 802.11 wireless NICs.
device          awi        # BayStack 660 and others
device          wi         # WaveLAN/Intersil/Symbol 802.11 wireless NICs.
#device         wl         # Older non 802.11 Wavelan wireless NIC.</programlisting>

    <para>Поддержка различных беспроводных карт.</para>

    <programlisting>device   mem           # Memory and kernel memory devices</programlisting>

    <para>Устройства системной памяти.</para>

    <programlisting>device   io            # I/O device</programlisting>

    <para>Этот параметр позволяет процессу получение привилегий
      ввода/вывода.  Он полезен для написания пользовательских
      программ, работающих с оборудованием непосредственно. Необходим
      для работы X Window system.</para>

    <programlisting>device   random        # Entropy device</programlisting>

    <para>Генератор случайных чисел для криптографической защиты.</para>

    <programlisting>device   ether         # Ethernet support</programlisting>

    <para><literal>ether</literal> необходим лишь в случае, если у вас есть
      сетевая карта.  Он включает поддержку стандартного кода протокола
      Ethernet.  В &os;&nbsp;4.X используйте строку <literal>pseudo-device
      ether</literal>.</para>

    <programlisting>device   sl            # Kernel SLIP</programlisting>

    <para><literal>sl</literal> &mdash; это поддержка SLIP.  SLIP был практически
      вытеснен PPP, который легче настраивается, лучше подходит для соединений
      модем-модем и имеет больше возможностей.
      В &os;&nbsp;4.X используйте строку
      <literal>pseudo-device sl</literal>.</para>

    <programlisting>device   ppp           # Kernel PPP</programlisting>

    <para>Поддержка PPP в ядре для соединений dial-up.  Также существует версия
      PPP, реализованного как приложение, использующее <literal>tun</literal>, и
      предлагающее большую гибкость и большее количество возможностей, как,
      например, соединение при необходимости (наличии обращения к сети).
      В &os;&nbsp;4.X используйте строку <literal>pseudo-device
      ppp</literal>.</para>

    <programlisting>device   tun           # Packet tunnel.</programlisting>

    <para>Используется пользовательским программным обеспечением PPP.
      Обратитесь к
      разделу <link linkend="userppp">PPP</link> этой книги за дальнейшей
      информацией.  В &os;&nbsp;4.X используйте строку <literal>pseudo-device
      tun</literal>.</para>

    <programlisting><anchor id="kernelconfig-ptys">
device   pty           # Pseudo-ttys (telnet etc)</programlisting>

    <para><quote>псевдо-терминал</quote> или имитированный порт для входа.
      Используется входящими <command>telnet</command> и
      <command>rlogin</command>-сессиями, приложением
      <application>xterm</application> и некоторыми другими приложениями,
      такими как <application>Emacs</application>.</para>

    <note><para>В &os;&nbsp;4.X
      используйте строку <literal>pseudo-device pty
      <replaceable>number</replaceable></literal>.
      <replaceable>Число</replaceable> после <literal>pty</literal> определяет
      количество <literal>pty</literal>, которое необходимо создать.  Если вам
      необходимо более, чем стандартное (16) количество окон
      <application>xterm</application> и/или удаленных входов, увеличьте это
      число в соответствии с вашими потребностями, но не более чем до
      256.</para></note>

    <programlisting>device   md            # Memory <quote>disks</quote></programlisting>

    <para>Псевдоустройства дисков в памяти.  В &os;&nbsp;4.X используйте
      строку <literal>pseudo-device md</literal></para>

    <programlisting>device   gif           # IPv6 and IPv4 tunneling</programlisting>

    <para>Поддержка туннелирования IPv6 через IPv4, IPv4 через IPv6, IPv4 через
      IPv4 и IPv6 через IPv6.  Начиная с &os;&nbsp;4.4 устройство
      <literal>gif</literal> является <quote>автоклонируемым</quote> и вы
      должны использовать строку <literal>pseudo-device gif</literal>.
      Более ранним версиям &os;&nbsp;4.X требуется номер, например
      <literal>pseudo-device gif 4</literal>.</para>

    <programlisting>device   faith         # IPv6-to-IPv4 relaying (translation)</programlisting>

    <para>Это псевдоустройство захватывает пакеты, которые были посланы ему и
      перенаправляет их даемону трансляции IPv4/IPv6.  В &os;&nbsp;4.X
      используйте строку <literal>pseudo-device faith 1</literal></para>

    <programlisting># The `bpf' device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
device   bpf           # Berkeley packet filter</programlisting>

    <para>Фильтр пакетов Berkeley.  Это псевдоустройство позволяет переводить
      сетевые интерфейсы в <quote>неразборчивый</quote> (promiscuous) режим, в
      котором перехватывается любой пакет в широковещательной сети (например
      ethernet).  Эти пакеты могут быть сохранены на диск и/или исследованы при
      помощи &man.tcpdump.1;.  В &os;&nbsp;4.X используйте строку
      <literal>pseudo-device bpf</literal>.</para>

    <note>
      <para>Устройство &man.bpf.4; также используется программой
	&man.dhclient.8; для того, чтобы получить адрес шлюза по умолчанию и
	т.п.  Если вы используете DCHP, не удаляйте эту опцию.</para>
    </note>

    <programlisting># USB support
device          uhci          # UHCI PCI-&gt;USB interface
device          ohci          # OHCI PCI-&gt;USB interface
device          usb           # USB Bus (required)
#device         udbp          # USB Double Bulk Pipe devices
device          ugen          # Generic
device          uhid          # <quote>Human Interface Devices</quote>
device          ukbd          # Keyboard
device          ulpt          # Printer
device          umass         # Disks/Mass storage - Requires scbus and da
device          ums           # Mouse
device          urio          # Diamond Rio 500 MP3 player
device          uscanner      # Scanners
# USB Ethernet, requires mii
device          aue           # ADMtek USB Ethernet
device          axe           # ASIX Electronics USB Ethernet
device          cue           # CATC USB Ethernet
device          kue           # Kawasaki LSI USB Ethernet
device          rue           # RealTek RTL8150 USB Ethernet</programlisting>

    <para>Поддержка различных USB устройств.</para>

    <programlisting># FireWire support
device          firewire      # FireWire bus code
device          sbp           # SCSI over FireWire (Requires scbus and da)
device          fwe           # Ethernet over FireWire (non-standard!)</programlisting>

    <para>Поддержка различных устройств Firewire.</para>

    <para>За дальнейшей информацией о дополнительных устройствах,
      поддерживаемых &os;, обратитесь к файлу
      <filename>/usr/src/sys/<replaceable>i386</replaceable>/conf/NOTES</filename>.</para>

      <sect2>
	<title>Конфигурации с большим количеством оперативной памяти
	  (<acronym>PAE</acronym>)</title>
	<indexterm>
	  <primary>
	    Расширения физического адресного пространства (Physical Address
	    Extensions (<acronym>PAE</acronym>))
	  </primary>
	  <secondary>
	    Конфигурации с большим количеством оперативной памяти
	  </secondary>
	</indexterm>

	<para>Машины с большим количеством оперативной памяти, в которых требуется
	  более 4 гигабайт в пользовательском адресном пространстве и адресном
	  пространстве ядра (User+Kernel Virtual Address, <acronym>KVA</acronym>)
	  в обычном случае не смогут использовать более 4
	  гигабайт.  Для решения этой проблемы Intel добавили поддержку 36-битной
	  адресации в &pentium; Pro и более поздних моделях процессоров.</para>

	<para>Расширение физического адресного пространства
	  (<acronym>PAE</acronym>) в процессорах &intel; &pentium; Pro и более
	  поздних позволяет использовать до 64 гигабайт оперативной памяти.  &os;
	  имеет поддержку этой возможности посредством опции ядра
	  <option>PAE</option>, доступной в &os; 4.9-RELEASE, &os; 5.1-RELEASE и
	  более поздних.  В связи с ограничениями архитектуры Intel, не делается
	  никакого различия между памятью ниже или выше 4 гигабайт.  Память,
	  размещенная выше 4 гигабайт, просто добавляется к доступной памяти.</para>

	<para>Для того, чтобы включить <acronym>PAE</acronym> в ядре, просто
	  добавьте приведенную строку в конфигурационный файл ядра:</para>

	<programlisting>options            PAE</programlisting>

	<note>
	  <para>Поддержка <acronym>PAE</acronym> в &os; существует только для
	    процессоров &intel; IA-32.  Также следует заметить, что
	    <acronym>PAE</acronym> в &os; не было полностью протестировано и должно
	    считаться находящимся в состоянии бета-тестирования по сравнению с
	    другими, стабильными возможностями &os;.</para>
	</note>

	<para>Поддержка <acronym>PAE</acronym> в &os; имеет следующие
	  ограничения:</para>

	<itemizedlist>
	  <listitem>
	    <para>Процесс не может получить доступ к более, чем 4 гигабайтам
	      пространства VM.</para>
	  </listitem>

	  <listitem>
	    <para><acronym>KLD</acronym> модули не могут быть загружены в ядро с
	      включенной поддержкой <acronym>PAE</acronym> из-за разницы в
	      окружении для сборки модулей и самого ядра.</para>
	  </listitem>

	  <listitem>
	    <para>Драйверы устройств, которые не используют интерфейс
	      &man.bus.dma.9;, приведут к повреждению информации в ядре с включенным
	      <acronym>PAE</acronym>.  Не рекомендуется использовать такие драйверы.
	      По этой причине в &os; 5.X включен конфигурационный файл ядра
	      <filename>PAE</filename>, из которого удалены все драйверы, о которых
	      известно, что они не работают при включенной поддержке
	      <acronym>PAE</acronym>.</para>
	  </listitem>

	  <listitem>
	    <para>Некоторые системные переменные определяют использование ресурсов
	      памяти по количеству доступной физической памяти.  Такие переменные
	      могут привести к ненужному чрезмерному выделению памяти из-за
	      особенностей работы системы <acronym>PAE</acronym>.  Один из таких
	      примеров &mdash; переменная <option>kern.maxvnodes</option>, которая
	      управляет максимальным количеством vnode, разрешенных в ядре.
	      Рекомендуется установить эту и подобные ей переменные вручную в
	      адекватные значения.</para>
	  </listitem>

	  <listitem>
	    <para>Возможно, понадобится увеличить пространство виртуальных адресов
	    ядра (<acronym>KVA</acronym>) или уменьшить какую-либо переменную (см.
	    выше), значение которой было неоправданно велико и могло привести к
	    исчерпанию <acronym>KVA</acronym>.  Для этого может быть использована
	    опция ядра <option>KVA_PAGES</option>.</para>
	  </listitem>
	</itemizedlist>

	<para>В случае сомнений относительно производительности и стабильности
	  рекомендуется обратиться к странице руководства &man.tuning.7;.  Страница
	  руководства &man.pae.4; содержит свежую информацию о поддержке
	  <acronym>PAE</acronym> в &os;.</para>
      </sect2>
  </sect1>

  <sect1 id="kernelconfig-nodes">
    <title>Создание файлов устройств</title>

    <indexterm><primary>файлы устройств</primary></indexterm>
    <indexterm>
      <primary><command>MAKEDEV</command></primary>
    </indexterm>

    <para><emphasis>Если вы работаете с &os;&nbsp;5.0 или старше, вы можете
      пропустить этот раздел.  Эти версии используют &man.devfs.5; для выделения
      файлов устройств прозрачно для пользователя.</emphasis></para>

    <para>Практически все устройства в ядре имеют соответствующий файл,
      называемый <quote>node</quote>, в каталоге <filename>/dev</filename>.  Они
      выглядят как обычные файлы, но на самом деле это специальные
      <quote>точки входа</quote> в ядро, которые необходимы приложениям для
      доступа к устройствам.  Скрипт
      <filename>/dev/MAKEDEV</filename>, который выполняется при первой
      установке операционной системы, создает практически все поддерживаемые
      файлы устройств.  Однако он не создаёт их <emphasis>все</emphasis>, таким
      образом, когда вы добавляете поддержку нового устройства, следует
      убедиться, что соответствующие файлы есть в <filename>/dev</filename>, и
      если их там нет, создать их.  Вот простой пример:</para>

    <para>Предположим, вы добавили поддержку привода IDE CD-ROM в ядро.
      Строка, которую вы добавили:</para>

    <programlisting>device acd0</programlisting>

    <para>Это означает, что вам необходимо проверить наличие файлов, название
      которых начинаются строкой <filename>acd0</filename> в каталоге
      <filename>/dev</filename>, за которой, возможно, следует буква, например
      <literal>c</literal>, или предшествует <literal>r</literal>, что
      означает, что это <quote>сырое</quote> (raw) устройство, которое
      используется для прямого доступа к аппаратному устройству.  Если
      оказывается, что таких файлов в каталоге нет, вы должны перейти в
      каталог <filename>/dev</filename> и набрать:</para>

    <indexterm>
      <primary><command>MAKEDEV</command></primary></indexterm>
    <screen>&prompt.root; <userinput>sh MAKEDEV acd0</userinput></screen>

    <para>Когда скрипт завершит работу, вы увидите, что файлы
      <filename>acd0c</filename> и <filename>racd0c</filename> созданы,
      соответственно скрипт отработал корректно.</para>

    <para>Для звуковых карт нижеследующая команда создает необходимые
      файлы:</para>

    <screen>&prompt.root; <userinput>sh MAKEDEV snd0</userinput></screen>

    <note>
      <para>Если вы создаете файлы устройств для таких устройств, как звуковые
	карты и если другие люди имеют доступ к вашей машине, было бы не лишним
	защитить их от использования извне при помощи добавления их в файл
	<filename>/etc/fbtab</filename>.  За дальнейшей информацией обратитесь
	к странице руководства &man.fbtab.5;.</para>
    </note>

    <para>Следуйте этой простой процедуре для любых других устройств, которые
      отсутствуют в ядре <filename>GENERIC</filename> и которые не имеют
      соответствующих файлов в <filename>/dev</filename>.</para>

    <note>
      <para>Все контроллеры SCSI используют одинаковый набор файлов в
	<filename>/dev</filename>, поэтому вам не нужно создавать их.  Кроме того,
	сетевые карты и псевдоустройства SLIP и PPP не имеют вхождений в
	<filename>/dev</filename>, поэтому и о них вы не должны
	беспокоиться.</para>
    </note>
  </sect1>

  <sect1 id="kernelconfig-trouble">
    <title>Решение проблем</title>

    <para>Существует пять категорий проблем, которые могут возникнуть при
      сборке собственного ядра.  Вот они:</para>

    <variablelist>
      <varlistentry>
	<term>Не удаётся отработать команде <command>config</command>:</term>

	<listitem>
	  <para>Если команда &man.config.8; не может отработать, то, скорее всего,
	    вы допустили где-нибудь маленькую ошибку.  К счастью, &man.config.8;
	    выведет номер проблемной строки, поэтому вы можете быстро найти
	    строку, содержащую ошибку.  Например, если вы видите:</para>

	  <screen>config: line 17: syntax error</screen>

	  <para>Убедитесь, что опция введена верно путём сравнения с файлом
	    <filename>GENERIC</filename> или другим источником.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Не удаётся отработать команде <command>make</command>:</term>

	<listitem>
	  <para>Если не удаётся отработать команде <command>make</command>, обычно
	    это означает ошибку в описании конфигурации ядра, которая не достаточно
	    тривиальна для того, чтобы &man.config.8; мог обнаружить её.
	    Опять-таки, просмотрите файл конфигурации, и, если вы все еще не можете
	    решить проблему, напишите письмо в &a.questions;, включив в письмо файл
	    конфигурации ядра.  Скорее всего проблема будет решена быстро.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Не удаётся установить новое ядро:</term>

	<listitem>
	  <para>Если ядро собралось без проблем, но не удалось его установить
	    (команда <command>make install</command> или <command>make
	    installkernel</command> сообщила об ошибке), первое, что необходимо
	    проверить, не запущена ли ваша система с уровнем безопасности 1 или
	    выше (обратитесь к &man.init.8;).  Процедура установки пробует снять
	    флаг неизменяемости с текущего ядра и установить этот флаг для нового
	    ядра.  Так как на уровне безопасности 1 и выше запрещено снятие флага
	    неизменяемости для всех файлов в системе, установка должна
	    производиться на уровне безопасности 0 и ниже.</para>

	  <para>Информация выше применима только к &os; 4.X и более ранним версиям.
	    &os; 5.X, как и более поздние версии, не устанавливает этот флаг
	    на ядро и ошибка при установке ядра возможно указывает на более
	    фундаментальную проблему.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Ядро не загружается:<anchor
	  id="kernelconfig-noboot"></term>

	<listitem>
	  <para>Если ваше новое ядро не загружается или ему не удаётся обнаружить
	    ваши устройства  &mdash; не паникуйте!  К счастью, в &os; существует отличный
	    механизм для восстановления после установки несовместимого ядра.
	    Просто выберите ядро, которое хотите загрузить, в загрузчике &os;.
	    Доступ к нему вы можете получить, когда система делает обратный
	    отсчёт от
	    10 в меню загрузки.  Нажмите любую клавишу, кроме <keycap>Enter</keycap>,
	    введите <command>unload</command> и наберите
	    <command>boot /boot/<replaceable>kernel.old</replaceable>/kernel</command>,
	    или используйте любое
	    другое ядро, которое загрузится без проблем.  Во время
	    переконфигурирования ядра всегда полезно оставлять копию ядра, о
	    котором известно, что оно рабочее.</para>

	  <para>После загрузки с рабочим ядром вы можете проверить ваш файл
	  конфигурации и попробовать собрать ядро опять.  Очень полезным в данном
	  случае окажется файл <filename>/var/log/messages</filename>, в котором,
	  среди других записей, имеются сообщения ядра от каждой успешной загрузки.
	  Также, команда &man.dmesg.8; выведет сообщения ядра от текущей
	  загрузки.</para>

	  <note>
	    <para>Если у вас возникли проблемы со сборкой ядра, убедитесь, что вы
	      сохранили ядро <filename>GENERIC</filename> или другое рабочее ядро
	      под другим именем, чтобы оно не было удалено при следующей сборке.  Вы
	      не можете использовать <filename>kernel.old</filename>, потому что
	      при установке нового ядра <filename>kernel.old</filename>
	      перезаписывается последним установленным ядром, которое может
	      оказаться нерабочим.  Также, как можно скорее переместите рабочее
	      ядро в <filename class="directory">/boot/kernel</filename>,
	      так как некоторые команды, такие как &man.ps.1; будут работать
	      некорректно.  Для этого просто переместите каталог, содержащий
	      работоспособное ядро:</para>

	    <screen>&prompt.root; <userinput>mv /boot/kernel /boot/kernel.bad</userinput>
&prompt.root; <userinput>mv /boot/<replaceable>kernel.good</replaceable> /boot/kernel</userinput></screen>

	    <para>В версиях &os; до 5.X, для восстановления работоспособного
	      ядра используйте команду:</para>

	    <screen>&prompt.root; <userinput>chflags noschg /kernel</userinput></screen>

	    <para>Если вы обнаружите, что не можете этого сделать, скорее всего вы
	      работаете на уровне безопасности (&man.securelevel.8;) большем нуля.
	      Отредактируйте переменную <literal>kern_securelevel</literal> в файле
	      <filename>/etc/rc.conf</filename>, установите её в
	      <literal>-1</literal> и перезагрузитесь.  Вы можете установить её в
	      предыдущее состояние, когда будете довольны своим новым
	      ядром.</para>

	    <para>И, если вы захотите <quote>закрыть</quote> ваше новое ядро или
	      любой другой файл, таким образом, что он не сможет быть перемещен или
	      изменен, используйте следующую команду:</para>

	    <screen>&prompt.root; <userinput>chflags schg /kernel</userinput></screen>
	   </note>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Ядро работает, но &man.ps.1; больше не работает:</term>

	<listitem>
	  <para>Если вы установили версию ядра отличную от той, с которой были
	    собраны ваши системные утилиты, например, ядро от 5.X на системе 4.X,
	    большая часть системных команд, таких как &man.ps.1; и &man.vmstat.8;
	    не будут больше работать.  Вам потребуется <link
	    linkend="makeworld">перекомпилировать и установить систему</link>
	    той же версии исходных текстов, что и ядро.  Это одна из причин,
	    по которой не следует использовать версию ядра, отличную от версии всей
	    остальной системы.</para>
	</listitem>
      </varlistentry>
    </variablelist>
  </sect1>
</chapter>

<!--
     Local Variables:
     mode: sgml
     sgml-declaration: "../chapter.decl"
     sgml-indent-data: t
     sgml-omittag: nil
     sgml-always-quote-attributes: t
     sgml-parent-document: ("../book.sgml" "part" "chapter")
     End:
-->

