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

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

8.1.

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

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

Примечание:

Новый файл kernel будет установлен в каталог /boot/kernel вместе со своими модулями, а старое ядро и его модули будут сдвинуты в каталог /boot/kernel.old, так что если вы допустите ошибку в следующей конфигурации, то сможете загрузить предыдущую версию вашего ядра.

8.2.

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

Наверное, вы удалили npx0 (посмотрите справку по npx(4)) из вашего файла конфигурации ядра, потому что у вас нет математического сопроцессора. Устройство npx0 является ОБЯЗАТЕЛЬНЫМ. Где-то в вашем оборудовании всё же присутствует устройство, обеспечивающее поддержку вычислений с плавающей точкой, которое уже не является отдельной микросхемой, как это было в старые добрые времена 386 процессоров. Вы должны включить поддержку устройства npx0. Даже если вам удастся построить ядро без поддержки npx0, оно всё равно не загрузится.

8.3.

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

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

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

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

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

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

8.4.

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

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

Проблема состоит в том, что во 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, и ваше дерево исходных текстов отличается от того, которое использовалось для построения работающей в данный момент системы (например, вы выполняете построение 10.0-RELEASE на системе 9.3-RELEASE). Если вы пытаетесь выполнить обновление, то, пожалуйста, прочитайте файл /usr/src/UPDATING, обратив особое внимание на раздел <<COMMON ITEMS>> в его конце.

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

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

8.6.

Каким образом можно определить, какой планировщик используется в работающей системе?

Проверьте существование sysctl-переменной kern.sched.quantum. Если она у вас есть, то вы должны увидеть примерно такое сообщение:

% sysctl kern.sched.quantum
kern.sched.quantum: 99960

Если sysctl-переменная kern.sched.quantum существует, то у вас используется планировщик 4BSD (sched_4bsd(4)). Если это не так, то вы получите сообщение об ошибке, которое выдаст sysctl(8), (и которое вы можете проигнорировать):

% sysctl kern.sched.quantum
sysctl: unknown oid 'kern.sched.quantum'

Название используемого планировщика доступно напрямую в виде значения sysctl-параметра kern.sched.name:

% sysctl kern.sched.name
kern.sched.name: 4BSD

8.7.

Что такое kern.sched.quantum?

kern.sched.quantum определяет максимальное количество тактов, которое процесс может выполняться, не будучи прерванным. Этот параметр специфичен для планировщика 4BSD, так что вы можете использовать его наличие для определения типа используемого планировщика.

Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.

По вопросам, связанным с этой документацией, пишите в рассылку <doc@FreeBSD.org>.