Chapter 8. Конфигурирование ядра

8.1. Я хочу изменить настройки ядра. Это сложно?
8.2. Я не могу скомпилировать ядро. Отсутствует _hw_float.Почему?
8.3. Почему моё ядро такое большое (больше 10МБ)?
8.4. Почему появляеются конфликты прерываний при включении поддержки многопортовыx коммуникационных адаптеров.
8.5. Почему мне не удаётся откомпилировать ни один вариант ядра, даже GENERIC?

8.1. Я хочу изменить настройки ядра. Это сложно?

Вовсе нет! Обратитесь к соответствующему разделу Руководства, который посвящён этому вопросу.

Note: Мы рекомендуется сохранить копию вашего нового файла ядра /kernel в файл kernel.ГГММДД после того, как вы получите нормально работающее ядро. Также сделайте резервную копию нового каталога /modules в каталог /modules.ГГММДД. В таком случае, если вы испортите что-либо в вашем конфигурационном файле, то сможете загрузить резервное ядро, вместо того, чтобы начинать всё снова с kernel.GENERIC. Это, в частности, имеет смысл, если вы производите загрузку системы с контроллера, который не поддерживается в стандартном ядре GENERIC.

8.2. Я не могу скомпилировать ядро. Отсутствует _hw_float.Почему?

Позвольте мне угадать. Вы, наверное, удалили npx0 (посмотрите справку по npx(4)) из вашего файла конфигурации ядра, потому что у вас нет сопроцессора, да? А вот и неправильно! :-) Строка npx0 ОБЯЗАТЕЛЬНА. Даже если у вас нет математического сопроцессора, вы должны включить поддержку устройства npx0.

8.3. Почему моё ядро такое большое (больше 10МБ)?

Скорее всего, вы компилировали ядро в отладочном режиме. Ядра, построенные в этом режиме, содержат много символьной информации, которая используется для отладки и сильно увеличивает размер ядра. Заметьте, что, если вы работаете с FreeBSD версии 3.0 и старше, то уменьшения производительности при использовании отладочного ядра нет или оно незначительно, однако отладочное ядро полезно иметь под рукой на случай аварийного завершения работы системы.

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

  • В конфигурационном файле вашего ядра нет строчки, имеющей такой вид:

        makeoptions DEBUG=-g
    
  • Вы не запускали утилиту config(8) с опцией -g.

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

8.4. Почему появляеются конфликты прерываний при включении поддержки многопортовыx коммуникационных адаптеров.

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

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

    #
    # Высокоскоростной многопортовый коммуникационный адаптер - 16550 UARTS
    #
    device sio2 at isa? port 0x2a0 tty irq 5 flags 0x501 vector siointr
    device sio3 at isa? port 0x2a8 tty flags 0x501 vector siointr
    device sio4 at isa? port 0x2b0 tty flags 0x501 vector siointr
    device sio5 at isa? port 0x2b8 tty flags 0x501 vector siointr

8.5. Почему мне не удаётся откомпилировать ни один вариант ядра, даже GENERIC?

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

  • Вы не используете новые цели make buildkernel и make installkernel, и ваше дерево исходных текстов отличается от того, которое использовалось для построения работающей в данный момент системы (например, вы выполняете построение 4.3-RELEASE на системе 4.0-RELEASE). Если вы пытаетесь выполнить обновление, то, пожалуйста, прочитайте файл /usr/src/UPDATING, обратив особое внимание на раздел "COMMON ITEMS" в его конце.

  • Вы используете новые цели make buildkernel и make installkernel, но выполнение цели make buildworld не было завершено. Полное и корректное выполнение цели make buildkernel зависит от файлов, генерирующихся при выполнении цели make buildworld.

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