В этой, довольно значительной, части handbook обсуждается
основы построения новых ядер для FreeBSD. Этот раздел будет интересен
и новичкам в администрировании и продвинутым админам.
5.1. Зачем строить ядро отличное от существующего?
5.2. Построение и установка нового ядра (english)
5.3. Файл конфигурации
5.4. Создание узлов устройств
5.5. Если, что-нибудь не получается
5.1. Зачем строить ядро отличное от существующего?
Построение нового ядра это один из важнейших ритуалов администрирования,
с которым администратор должен быть знаком.
Это процесс, занимающий достаточно времени,
обеспечивает улучшение работы вашей FreeBSD-системы.
В отличии от GENERIC-ядра,
который должен поддерживать любую возможную SCSII и сетевую карты, и кучу
всякого старого железа,
ваше собственное ядро содержит поддержку только для
железа вашего PC. Это имеет ряд преимуществ:
- Загрузка занимает меньше времени, потому что
не тратится время на поиск железа, которого у вас нет.
- Построенное заново ядро, довольно часто,
использует меньше памяти, что очень важно, поскольку ядро это процесс,
постоянно присутствующий в памяти, и неиспользуемый код занимает страницы
RAM, которые могли бы с большей пользой использовать ваши программы.
Таким образом, построение своего собственного ядра в системах
с дефицитом RAM, является делом первостепенной важности.
- Наконец, существует несколько опций ядра, которые вы можете настроить
под свои нужды, и вы можете включить поддержку тех драйверов устройств,
которых
нет GENERIC-ядре.
5.2. Построение и установка нового ядра
First, let us take a quick tour of the kernel build
directory. All directories mentioned will be relative to
the main /usr/src/sys directory, which is also
accessible through /sys. There are a number of
subdirectories here representing different parts of the
kernel, but the most important, for our purposes, are
i386/conf, where you will edit your custom
kernel configuration, and compile, which is the
staging area where your kernel will be built. Notice the
logical organization of the directory tree, with each
supported device, filesystem, and option in its own
subdirectory. Also, anything inside the i386
directory deals with PC hardware only, while everything
outside the i386 directory is common to all
platforms which FreeBSD could potentially be ported to.
Note: If there is not a
/usr/src/sys directory on your system, then the
kernel source has not been been installed. Follow the
instructions for installing packages to add this package
to your system.
Next, move to the i386/conf directory and copy
the GENERIC configuration file to the name you want to
give your kernel. For example:
# cd /usr/src/sys/i386/conf
# cp GENERIC MYKERNEL
Traditionally, this name is in all capital letters and,
if you are maintaining multiple FreeBSD machines with
different hardware, it is a good idea to name it after
your machine's hostname. We will call it MYKERNEL for
the purpose of this example.
Note: You must execute these and all of the
following commands under the root account or you will get
``permission denied'' errors.
Now, edit MYKERNEL with your favorite text editor. If
you are just starting out, the only editor available will
probably be vi, which is too complex to explain
here, but is covered well in many books in the
bibliography. Feel free to change the
comment lines at the top to reflect your configuration or the
changes you have made to differentiate it from GENERIC.
If you have build a kernel under SunOS or some other BSD
operating system, much of this file will be very familiar
to you. If you are coming from some other operating
system such as DOS, on the other hand, the GENERIC
configuration file might seem overwhelming to you, so
follow the descriptions in the
Configuration File
section slowly and carefully.
Note: If you are trying to upgrade your kernel from an
older version of FreeBSD, you will probably have to get a new
version of config(8) from the same place you got the new
kernel sources. It is located in /usr/src/usr.sbin, so
you will need to download those sources as well. Re-build and install
it before running the next commands.
When you are finished, type the following to compile and
install your kernel:
# /usr/sbin/config MYKERNEL
# cd ../../compile/MYKERNEL
# make depend
# make
# make install
The new kernel will be copied to the root directory as
/kernel and the old kernel will be moved to
/kernel.old. Now, shutdown the system and
reboot to use your kernel. In case something goes wrong,
there are some
troubleshooting instructions at the end of this
document. Be sure to read the section which explains how
to recover in case your new kernel
does not boot.
Note: If you have added any new devices (such
as sound cards) you may have to add some
device nodes to your
/dev directory before you can use them.
5.3. Файл конфигурации
Общий формат файла конфигурации очень прост.
Каждая строка содержит ключевое слово и один или больше аргументов.
Для простоты, многие строки содержат только один аргумент.
Что-нибудь типа # рассматривается в качестве комментария
и игнорируется.
В следующих разделах описаны все ключевые слова,
почти в том же порядке, в котором они присутствуют в
GENERIC, хотя некоторые связанные ключевые слова могут быть сгруппированы
в один раздел (например Сеть) даже если они были разбросаны
по всему GENERIC файлу.
Исчерпывающий лист опций и более подробные объяснения строк относящихся к
устройствам представлены в конфигурационном файле
LINT, находящемся в той же директории, что и GENERIC.
Если вы не уверены в необходимости, какой-лтбо строки, посмотрите сначала
информацию о ней в файле LINT.
Сейчас предпринимаются усилия, для большей организованности в управлении
опциями конфигурирования ядра. Традиционно, каждая опция
из файла конфигурации просто конвертировалась в вид -D``опция''
в строке CFLAGS в Makefile ядра. На деле это приводило
к жуткой неразберихе, когда было непонятно какая опция к какому файлу
относится.
В новой схеме, для каждый #ifdef, который связан с опцией,
эта опция ищется в заголовочном файле
opt_foo.h, который создается в директории, где
происходит компиляция программой config. Список
опций для config разбит на два файла: архитектурно-независимые
опции прописаны в файле
/sys/conf/options, архитектурно-зависимые -- в файле
/sys/arch/conf/options.arch,
где arch это например i386.
5.3.1. Обязательные ключевые слова
Эти ключевые слова требуются в каждом ядре, которое вы строите.
- machine ``i386''
- Первое ключевое слово это machine, поскольку
FreeBSD работает только на платформе Intel 386 и совместимых с ней,
то это соотвественно i386.
Замечание: любое ключевое слово, в котором цифры
используются в качестве текста, должны быть заключены в кавычки,
в противном случае,
config растеряется и будет думать, что вы имели в виду число 386.
- cpu ``cpu_type''
- Следующее ключевое слово это cpu, которое подключает
поддержку, для каждого CPU, с которым работает FreeBSD. Возможные значения
cpu_type:
- I386_CPU
- I486_CPU
- I586_CPU
- I686_CPU
и строки, включащие слово cpu, с разными
значениями поля
cpu_type могут присутствовать в вашем файле
конфигурации, так же как они присутствуют в файле
GENERIC. Для вашего собственного ядра вам лучше всего указать,
только тот cpu, который на самом деле стоит в вашей машине.
Если, например, у вас Intel Pentium, то используйте I586_CPU
в качестве cpu_type.
- ident machine_name
- Далее идет ident, который идентифицирует ядро.
Вам надо изменить название
GENERIC на любое другое, в данном примере -- MYKERNEL. Название, которое
вы запишите в ident, будет печататься, когда
вы будете загружать ядро, поэтому полезно дать ядру
отличающееся имя, если вы хотите сохранить это ядро наряду с обычным
(например вы хотите построить экспериментальное ядро).
Заметьте, что как и в случае с machine и cpu,
нужно заключить название ядра в кавычки, если в нем используются цифры.
Так как название ядра передается компилятору C для флага
-D, то не используйте такие имена, как DEBUG,
или что-нибудь еще, что можно спутать с именем машины или названием
CPU, например vax.
- maxusers number
- Эта позиция устанавливает размер для некоторых очень важных системных
таблиц. Это число будет рассматриваться, как приблизительное количество
пользователей одновременно работающих на вашей машине.
В нормальных условиях, вам нужно установить значение
maxusers равным, по крайней, четырем, особенно,
если вы используете X Window System или хотите что-нибудь компилировать.
По параметру
maxusers устанавливается другой очень важный параметр --
это максимальное количество процессов, которое расчитывается как 20 + 16 *
maxusers, таким образом если вы установите maxusers
равным одному, тогда на вашей машине может быть запущено одновременно
только 36 процессов, включая около 18 процессов, запускаемых системой при
старте, и около 15 процессов дополнительно будет создано, если вы
запустите X Window System. Даже такая простая задача, как
чтение man-страницы потребует запуска еще 9
процессов, которые фильтруют, распаковывают, показывают нужную информацию.
Если вы установите maxusers равным 4, то это позволит
работать 84 процессам одновременно, такого количества вполне достаточно для
большинства пользователей. Но, если вы, пытаясь запустить еще одну
программу, или у вас сервер с большим количеством пользователей (как сервер
Walnut Creek CDROM's FTP ), вдруг, увидите ужасное
сообщение об ошибке вида ``proc table full'', то в этом
случае вы можете увеличить maxusers и перестроить ядро.
Замечание: maxuser
нет ограничивает количество пользователей, которые могут зайти на
вашу машину. Он устанавливает размеры определенных таблиц,
причем эти размеры приблизительно соотвествуют тому количеству
пользователей, которое бы вы хотели иметь (т.е. размеры будут такие, как
будто максимальное число пользователей действительно не превышает
maxuser ). И эти размеры соответсвуют тому количеству
процессов, которое каждый из них, в среднем, запускает.
Ключевое слово, которое действительно
ограничивает количество одновременных
удаленных login это
псевдо-устройство pty 16.
- config kernel_name root on root_device
- В этой строчке определяется место хранения ядра с
именем kernel_name. Традиционно ядро называется
vmunix но во FreeBSD, это называется
kernel. В качестве kernel_name, вам надо всегда использовать
kernel, потому что изменение этого названия вызовет
многочисленные проблемы с работой утилит.
Во второй части строки определяется диск и раздел, где
искать корневую файловую и ядро.
Наверняка root_device будет:
wd0 для систем с не-SCSI дисками, или
sd0 для систем со SCSI дисками.
5.3.2. Общие опции
Эти строки обеспечивают поддержку различных
файловых систем и других опций.
- options MATH_EMULATE
- Эта строка указывает ядру моделировать (изображать)
математический сопроцессор, если на вашей машине его нет (386
или 486SX). сли у вас Pentium, 486DX, или
386 или 486SX с отдельной 387 или 487 микросхемой, вы можете
закомментировать эту строчку.
Замечание: Часто, режим эмулирования математического
сопроцессора работает not очень хорошо, в реализации
поставляемой FreeBSD. Если у вас нет математического сопроцессора
и вы хотите, чтобы все работало хорошо, мы советуем вам заменить эту опцию
на
GPL_MATH_EMULATE, для того, чтобы использовать
отличную математическую поддержку GNU,
которая не включена по умолчанию из-за правил лицензий
- options ``COMPAT_43''
- Совместимость с 4.3BSD. Оставьте эту строку; некоторые программы
начнут вести себя странно, если вы закомментируете эту строку.
- options BOUNCE_BUFFERS
- Устройства ISA и EISA, действующие в режиме совместимости
с ISA,
могут осуществлять DMA (Direct
Memory Access) к памяти объемом не больше 16 мегабайт.
Эта опция позволяет таким устройствам работать с системами, где объем памяти
больше
16 мегабайт.
- options UCONSOLE
- Позволяет пользователям открывать консоль,
что полезно при использовании X
Windows. Например, вы можете создать окно консоли,
запустив команду xterm -C, которая будет выводить сообщения
`write', `talk', и другие сообщения, посылаемые на консоль
ядром.
- options SYSVSHM
- Эта опция обеспечивает возможность работы
с разделяемой памятью в соответствии с System V. Эта возможность
используется в расширении XSHM в X
Windows, многие графические программы
(такие как проигрыватель фильмов XAnim, и Linux DOOM)
используют преимущества разделяемой памяти для
увеличения производительности.
Если вы используете X Window System, вам определенно нужно включить эту
опцию.
- options SYSVSEM
- Поддержка семафоров в соответствии с System V.
Используется меньше не очень часто, но добавляет всего несколько сотен
в ядро.
- options SYSVMSG
- Поддержка сообщений в соответствии с System V.
Как и в предыдущем случае увеличивает ядро ненамного.
Замечание: Команда ipcs(1) выдаст
список процессов, использующих одну из этих возможностей
System V.
5.3.3. Опции файловой системы
Данные опции добавляют поддержку различных файловых систем.
Вы должны подключить, по крайней мере, одну из них для поддержки
устройства с которого вы будете загружаться;
обычно это
FFS если вы загружаетесь с твердого диска,
или
NFS если у вас бездисковая станция и вы загружаетесь
с помощью Ethernet. Вы можете включить другие часто-используемые
файловые системы в ядро, но
не включайте поддержку файловых систем, которые вы собираетесь
использовать редко (может быть файловая система
MS-DOS?), так как они будут динамически загружаться
из директории Loadable Kernel Module (загружаемый модуль ядра)
/lkm как только вы смонтируете раздел такого типа.
- options FFS
- Основная файловая система жесткого диска;
оставьте эту опцию, если вы будете загружаться с жесткого диска.
- options NFS
- Сетевая файловая система. Если вы не собираетесь монтировать
разделы с файлового сервера Unix, то вы можете закомментировать
эту строку.
- options MSDOSFS
- MS-DOS Filesystem. Если вы не планируете
монтировать разделы DOS во время загрузки, то можете
смело закомментировать эту строку.
Эта опция будет автоматически подключаться, как только вы
смонтируете раздел DOS, как уже было сказано.
Также, прекрасный пакет mtools (в коллекции
ports) позволит вам работать с гибкими дисками DOS без процедур
mount и unmount
(при этом MSDOSFS даже не требуется).
- options ``CD9660''
- Файловая система ISO 9660 для CD-ROM.
Закомментируйте эту строку если, у вас нет устройства
CD-ROM drive или если вам очень редко будут нужны данные на CD
(эта файловая система будет динамически загружаться, как только вы
смонтируете CD). Аудио CD не требуют наличия этой файловой системы.
- options PROCFS
- Файловая система процессов. Это фиктивная файловая система монтируемая
как /proc, которая позволяет таким программам как
ps(1), выдавать вам достаточно информации о текущих
процессах.
- options MFS
- Файловая система отображения памяти.
В основном, это диск RAM для быстрого доступа к временным файлам,
полезно если у вас достаточно большой объем swap, который бы вы хотели
эффективно использовать. Самое лучшее место монтирования раздела
MFS это директория
/tmp, так как многие программы хранят свои
временные данные здесь. Для того, чтобы смонтировать диск MFS RAM как
/tmp, добавьте следующую строку в файл
/etc/fstab и перезагрузите систему, либо просто
напечатайте ее в командной строке
mount /tmp:
/dev/wd1s2b /tmp mfs rw 0 0
Замечание: Замените /dev/wd1s2b
на ваше название раздела swap, который будет записан в файле
/etc/fstab следующим образом:
/dev/wd1s2b none swap sw 0 0
Замечание: Файловая система MFS также может
загружаться динамически
not, таким образом вы
обязаны включить эту файловую систему в ваше ядро,
если хотите поэкспериментировать со всем этим.
- options QUOTA
- Включает дисковые квоты, точнее возможность их устанавливать.
Если ваша система предоставляет услуги многим пользователям и
вы не хотите, чтобы их данные переполняли раздел
/home, вы можете установить квоты на использование
диска для каждого пользователя. Для более полной информации
посмотрите раздел Disk Quotas.
5.3.4. Основные контроллеры и устройства
В этих разделах описаны основные контроллеры
дисков, лент и
CD-ROM, поддерживаемые FreeBSD. Есть отдельные разделы по
SCSI контроллерам и сетевым
network картам.
- controller isa0
- Все PC's поддерживаемые
FreeBSD имеют хотя бы один такой контроллер. Если у вас IBM PS/2
(Micro Channel Architecture), то пока что вы не сможете использовать
FreeBSD.
- controller pci0
- Включите это если у вас материнская плата
PCI. Это включает авто-определение карт
PCI и переход (шлюз) из PCI на ISA шину.
- controller fdc0
- Контроллер гибкого диска:
fd0 дисковод ``A:'' , а
fd1 дисковод ``B:''. ft0 это устройство для ленты
QIC-80 посаженный на floppy-контроллер. Закомментируйте строки, соответствующие тем устройствам,
которых у вас нет.
Замечание: поддержка ленты QIC-80 требует отдельной
фильтрационной программы называющейся ft(8), смотрите
страницу руководства для более полной информации.
- controller wdc0
- Это первичный IDE-контроллер. wd0 и wd1
являются первичным (master) и вторичным (slave) жесткими дисками
соответственно.
wdc1 -- вторичный IDE-контроллер, на который можно
разместить третий или четвертый диск, или
IDE CD-ROM. Закомментируйте те строки, которые не применяете
(если у вас SCSI диск, скорее всего, вам надо будет закомментировать все
шесть строк).
- device wcd0
- Это устройство обеспечивает поддержку
IDE CD-ROM. Обязательно проверьте, чтобы не были закомментированы
wdc0 и wdc1, если у вас более одного
IDE-контроллера и ваш CD-ROM установлен на карте второго контроллера.
Чтобы использовать эту возможность, вы должны включить строку
options ATAPI.
- device npx0 at isa? port ``IO_NPX'' irq 13 vector npxintr
- npx0 это интерфейс для работы с плавающей запятой
во FreeBSD, это либо аппаратный сопроцессор для математики, либо программа
эмулирования этого сопроцессора. Эту строку нельзя включать по
выбору, т.е. ее надо включать обязательно.
- device wt0 at isa? port 0x300 bio irq 5 drq 1 vector wtintr
- Поддержка ленточных устройств Wangtek и Archive
QIC-02/QIC-36
- Proprietary CD-ROM support (Поддержка фирменных CD-ROM)
- Следующие драйверы предназначены для, так называемых,
фирменных
CD-ROM. Эти устройства имеют собственный контроллер,
или могут быть вставлены в звуковую карту так же, как
SoundBlaster 16. Они не являются ни
IDE, ни SCSI. Наиболее старые одно- и двухскоростные
CD-ROMы используют эти интерфейсы, в то время как
новые четырех-скоростные скорее всего будут
IDE или
SCSI.
- device mcd0 at isa? port 0x300 bio irq 10 vector mcdintr
- Mitsumi CD-ROM (LU002,
LU005, FX001D).
- device scd0 at isa? port 0x230 bio
- Sony CD-ROM (CDU31, CDU33A).
- controller matcd0 at isa? port ? bio
- Matsushita/Panasonic CD-ROM (продаются Creative
Labs для SoundBlaster).
5.3.5. Поддержка SCSII устройств
В этом разделе описываются различные SCSI контроллеры и SCSI устройства,
поддерживаемые FreeBSD.
- SCSI Controllers
- Следующий десяток строчек включает поддержку
различных типов SCSI-контроллеров. Закомментируйте все, чего нет
на вашей машине:
- controller bt0 at isa? port ``IO_BT0'' bio irq ? vector btintr
- Большинство контроллеров Buslogic
- controller uha0 at isa? port ``IO_UHA0'' bio irq ? drq 5 vector uhaintr
- UltraStor 14F и 34F
- controller ahc0
- Adaptec 274x/284x/294x
- controller ahb0 at isa? bio irq ? vector ahbintr
- Adaptec 174x
- controller aha0 at isa? port ``IO_AHA0'' bio irq ? drq 5 vector ahaintr
- Adaptec 154x
- controller aic0 at isa? port 0x340 bio irq 11 vector aicintr
- Adaptec 152x и звуковые карты, использующие Adaptec AIC-6360 (медленные!)
- controller nca0 at isa? port 0x1f88 bio irq 10 vector ncaintr
- Карты ProAudioSpectrum, использующие NCR 5380 или Trantor T130
- controller sea0 at isa? bio irq 5 iomem 0xc8000 iosiz 0x2000 vector seaintr
- 8 битовый контроллер Seagate ST01/02 (медленный!)
- controller wds0 at isa? port 0x350 bio irq 15 drq 6 vector wdsintr
- Контроллер Western Digital WD7000
- controller ncr0
- Контроллер NCR 53C810, 53C815, 53C825, 53C860, 53C875 PCI SCSI
- options ``SCSI_DELAY=15''
- Это запись говорит ядру сделать паузу
15 секунд перед тем как проверить наличие SCSI
устройства в системе. Если у вас только IDE-диск,
вы можете игнорировать это, иначе вы можете уменьшить это число,
скажем до 5 секунд, для ускорения загрузки. Если вы так сделали и у
FreeBSD начались проблемы с распознаванием SCSI-устройств, конечно же, надо
восстановить прежнее значение.
- controller scbus0
- Если у вас есть хоть какие-то SCSI-контроллеры, то эта строка
обеспечивает общую поддержку SCSI.
Если у вас нет ничего, относящегося к SCSI, вы можете закомментировать
эту строку и еще следующие три строки.
- device sd0
- Поддержка жестких SCSI-дисков.
- device st0
- Поддержка ленточных SCSI-устройств.
- device cd0
- Поддержка SCSI CD-ROM.
Заметим, что цифра 0 в предыдущих примерах,
ввдит в легкое заблуждение: все эти устройства автоматически конфигурируются
(именуются и проч.) системой, как только она их обнаруживает;
в независимости от того, сколько их на самом деле висит на
SCSI шине(ах),
и какие у них ID.
Если вы хотите ``навязать'' специфические ID на определенные устройства,
то обратитесь к соответствующему разделу файла конфигурации LINT.
5.3.6. Поддержка консоли, шины мыши и X сервера
Вы должны выбрать один из двух типов консолей, и, если вы планируете
использовать X Window System с консолью vt220, включите опцию
XSERVER и, возможно,
шину мыши или устройство мыши PS/2.
- device sc0 at isa? port ``IO_KBD' tty irq 1 vector scintr
- sc0 это драйвер консоли по умолчанию,
который похож (во всяком случае по названию) на SCO консоль.
Поскольку большинство полнлэкранных программ получают доступ к консоли через
библиотеку базы данных терминалов, например через
termcap, то не имеет большого значения, используете вы это
(sc0)
или vt0, драйвер консоли совместимый с VT220.
При входе систему, установите переменную TERM
в ``scoansi'', если полноэкранные программы ругаится, при использовании
такого типа консоли.
- device vt0 at isa? port ``IO_KBD'' tty irq 1 vector pcrint
- Это VT220-совместимый драйыер консоли, совместимый с VT100/102 (т.е. он
понимает VT100/102, а наоборот нет).
Он хорошо работает на некоторых laptops, которые аппаратно несовместимы с
sc0. После входа в систему установите переменную
TERM в ``vt100'' или ``vt220''. Этот драйвер очень полезен, если
вы собираетесь заходить на много всяких разных машин в сети,
может случиться, что в termcap
или terminfo нет записей о sc0
-- вто время как ``vt100'', понимается практически на всех платформах.
- options ``PCVT_FREEBSD=210''
- Нужен для
драйвера консоли vt0.
- options XSERVER
- Применим только с драйвером консоли vt0.
Подключает код необходимый для запуска
сервера X Window XFree86
под драйвером консоли vt0.
- device mse0 at isa? port 0x23c tty irq 5 vector ms
- Используйте это устройство, если у вас карта шины мыши Logitech или
ATI InPort.
Замечание: Если у вас последовательная мышь, то
забудьте про те две строки, и вместо этого, проверьте чтобы
соответствующий
последовательный
порт был включен (скорее всего
COM1).
- device psm0 at isa? port ``IO_KBD'' conflicts tty irq 12 vector psmintr
- Используйте это устройство, если мышь подключена к
порту мыши PS/2.
5.3.7. Последовательные и параллельные порты
Они существуют почти во всех системах. Если вы подключили принтер на
один из таких портов, то раздел Печать документа handbook будет вам
очень полезна. Если вы используете модем, то Dialup access
пояснит детали настройки последовательного порта, для возможности
пользоваться такими устройствами.
- device sio0 at isa? port ``IO_COM1'' tty irq 4 vector siointr
- sio0 --
sio3 это четыре последовательных порта, которые в
MS-DOS обозначаются COM1 -- COM4 соответственно.
Заметим, что если у вас внутренний модем подключен на
COM4, а последовательный порт на COM2, то вам придется изменить
IRQ модема на 2 (по непонятным техническим причинам IRQ 2 = IRQ 9), для доступа к нему во FreeBSD.
Если у вас многопортовая последовательная карта, посмотрите
страницу руководства по sio(4), для более полной информации
о правильных значениях для этих строк. Некоторые видеокарты
(например основанные на микросхемах
S3) используют адреса IO в виде
0x*2e8, и, поскольку многие дешевые последовательные
карты не могут полностью кодировать 16-bit IO адресное пространство,
они конфликтуют с такими картами, и делают использование
порта
COM4 практически невозможным.
Каждый последовательный порт должен иметь уникальный
IRQ (если только вы не используете многопортовую карту,
где поддерживаются разделяемые прерывания
), поэтому нельзя использовать IRQs, установленные для COM3 и COM4 по
умолчанию.
- device lpt0 at isa? port? tty irq 7 vector lptintr
- lpt0 -- lpt2
это три порта принтера, которые могут быть на вашей машине.
У многих пристутствует лишь один, поэтому, если у вас в наличии
не все то комментируйте ненужные строки.
5.3.8. Сеть
FreeBSD, как, впрочем, весь Unix в целом, делает уделяет
большое внимание сетевым возможностям. Поэтому, даже если у вас
нет карты Ethernet, обратите особое внимание на обязательные опции
и поддержку сетевых возможностей dial-up.
- options INET
- Поддержка сети.
Оставьте эту опцию даже если вы не собираетесь испеолбзовать сеть.
Многим программам требуется, по крайней мере, сеть типа loopback (т.е.
сетевые соединения внутри вашего PC) поэтому эта опция является строго
обязательной.
- Ethernet cards
- Следующие строки подключают поддержку различных карт Ethernet.
Если у вас нет сетевой карты, то вы можете закомментировать все эти строки.
В противном случае, вам надо будет включить поддержку ваших(ей) карт(ы):
- device de0
- карты Ethernet на основе Digital Equipment DC21040,
DC21041 или DC21140 chips
- device fxp0
- Intel EtherExpress Pro/100B
- device vx0
- 3Com 3C590 и 3C595 (плохая)
- device cx0 at isa? port 0x240 net irq 15 drq 7 vector cxintr
- Cronyx/Sigma multiport
sync/async (с Cisco или PPP framing)
- device ed0 at isa? port 0x280 net irq 5 iomem 0xd8000 vector edintr
- Western Digital и SMC 80xx and 8216; Novell NE1000
и NE2000; 3Com 3C503; HP PC Lan Plus (HP27247B и HP27252A)
- device el0 at isa? port 0x300 net irq 9 vector elintr
- 3Com 3C501 (медленная!)
- device eg0 at isa? port 0x310 net irq 5 vector egintr
- 3Com 3C505
- device ep0 at isa? port 0x300 net irq 10 vector epintr
- 3Com 3C509 (плохой)
- device fe0 at isa? port 0x240 net irq ? vector feintr
- Fujitsu MB86960A/MB86965A Ethernet
- device fea0 at isa? net irq ? vector feaintr
- карта DEC DEFEA EISA FDDI
- device ie0 at isa? port 0x360 net irq 7 iomem 0xd0000 vector ieintr
- AT&T StarLAN 10 и EN100; 3Com 3C507;
малоизвестный NI5210
- device ix0 at isa? port 0x300 net irq 10 iomem 0xd0000 iosiz 32768 vector ixintr
- Intel EtherExpress 16
- device le0 at isa? port 0x300 net irq 5 iomem 0xd0000 vector le_intr
- Digital Equipment EtherWorks 2 and EtherWorks
3 (DEPCA, DE100, DE101, DE200, DE201, DE202,
DE203, DE204, DE205, DE422)
- device lnc0 at isa? port 0x300 net irq 10 drq 0 vector lncintr
- карты Lance/PCnet (Isolan, Novell NE2100,
NE32-VL)
- device ze0 at isa? port 0x300 net irq 5 iomem 0xd8000 vector zeintr
- IBM/National Semiconductor PCMCIA ethernet
контроллер.
- device zp0 at isa? port 0x300 net irq 10 iomem 0xd8000 vector zpintr
- 3Com PCMCIA Etherlink III
Замечание: Для определенных карт (например для
NE2000) вам надо будет изменить порт и/или IRQ,
поскольку нет ``сиандарта'' по размащению этих карт.
- pseudo-device loop
- loop это основное устройство типа
loopback для TCP/IP. Если вы делаете telnet или
FTP на localhost
( 127.0.0.1), то это делается с помощью этого
псевдо-устройства. Обязательная опция.
- pseudo-device ether
- ether нужно только в том случае, если у вас есть карта
Ethernet; эта опция подключает программу поддерживающую общий протокол
Ethernet.
- pseudo-device sl number
- sl нужен для поддержки протокола SLIP (Serial Line Internet
Protocol). Этот протокол был почти целиком вытеснен протоколом
PPP, который легче устанавливать,
который лучше подходит для соединений типа модем-модем,
при этом он более эффективен и более мощный. Параметр number,
идущий после
sl, определяет количество одновременных сессий SLIP,
которые надо поддерживать. В нашем руководстве документе есть более
полная информация о SLIP client или server.
- pseudo-device ppp number
- ppp нужен для поддержки ядром PPP (Point-to-Point
Protocol) для подключения в Internet типа dial-up.
Существует также версия PPP, реализованная как пользовательское приложение,
которое использует
tun и предлагает большую гибкость и дополнительные
возможности, как например автодозвон (demand dialing).
Если вы еще не передумали использовать этот драйвер PPP,
то почитайте раздел PPP в режиме ядра
этог руководства. Как и в случае с устройством sl,
number определяет сколько одновременных сессий
PPP надо поддерживать.
- pseudo-device tun number
- tun используется программами для PPP, работающего в
пользовательском режиме.
Эту программу легко и быстро запускать. Есть также дополнительные
возможности, например автодозвон.
Число после tun
количество одновременных сессий PPP, которые надо поддерживать. Для более
полной информации смотри раздел PPP в пользовательском режиме.
- pseudo-device bpfilter number
- Фильтр пакетов, сделанный в Berkeley. Это псевдоустройство
позволяет устанавливать сетевые интерфейсы в раскрепощенный режим,
который забирает все пакеты, рассылаемые по broadcast
(например ethernet). Эти пакеты могут быть скачаны на диск
и/или исследованы с помощью программы
tcpdump(1). Заметим, реализация этой возможности
может серьезно повредить сетевой безопасности вашей системы.
number, стоящий после bpfilter это количество интерфейсов,
которые могут опрашиваться одновременно.
Не обязательная опция, не рекомендуется применять, если есть малейшие
опасения о
взломах через сеть и прочих неприятностях.
Не все сетевые карты поддерживают эту возможность.
5.3.9. Звуковые карты
Это первый раздел, в котором содержатся строки, которых нет
ядре GENERIC. Чтобы включить поддержку звуковой карты,
вам нужно будет скопировать соответствующие строки из файла
LINT (который содержит поддержку для
всех устройств) например такие:
- controller snd0
-
Общая программа звукоывх драйверов.
Нужна для всех следующих сетевых карт кроме
pca.
- device pas0 at isa? port 0x388 irq 10 drq 6 vector pasintr
-
ProAudioSpectrum digital audio и MIDI.
- device sb0 at isa? port 0x220 irq 7 conflicts drq 1 vector sbintr
-
SoundBlaster digital audio.
Замечание: Если ваш SoundBlaster на другом
IRQ (например 5), измените irq 7
на, например, irq 5 и уберите ключевое слово
conflicts. Также, вы должны добавить строку:
options ``SBC_IRQ=5''
- device sbxvi0 at isa? drq 5
-
SoundBlaster 16 digital 16-bit audio.
Замечание: Если ваш SB16 на другом
16-bit DMA канале (например 6 или 7), измените
ключевое слово
drq 5 соответствующим образом, и добавьте строку:
options
"SB16_DMA=6"
- device sbmidi0 at isa? port 0x330
-
Интерфейс 16 MIDI. Если у вас
SoundBlaster 16, вы должны включить эту строку,
иначе ядро не скомпилируется.
- device gus0 at isa? port 0x220 irq 10 drq 1 vector gusintr
-
Gravis Ultrasound.
- device mss0 at isa? port 0x530 irq 10 drq 1 vector adintr
-
Microsoft Sound System.
- device opl0 at isa? port 0x388 conflicts
-
AdLib FM-synthesis audio. Включите эту строку для пользователей
AdLib, SoundBlaster, и ProAudioSpectrum, если вы хотите проигрывать
файлы MIDI припомощи программы
playmidi (в коолекции ports).
- device mpu0 at isa? port 0x330 irq 6 drq 0
-
Отдельная карта Roland MPU-401.
- device uart0 at isa? port 0x330 irq 5 vector ``m6850intr''
-
Отдельный 6850 UART для MIDI.
- device pca0 at isa? port ``IO_TIMER1'' tty
-
Цифровое аудио на колонках PC. Похоже это будет не очень
хорошее качество и потребляющий много ресурсов
CPU,
так что мы вас предупредили (но это не требует наличия звуковой карты).
Замечание: Существует дополнительная документация в
/usr/src/sys/i386/isa/sound/sound.doc.
Кроме того, если вы добавили какое-нибудь из вышеперечисленных
устройств, обязательно создайте звуковые
узлы устройств.
5.3.10. Псевдо-устройства
Драйверы псевдо-устройств это части ядра,
действующие как драйвера устройств, но для них нет соответствующего
устройства в вашем компьютере. Псевдо-устройства
относящиеся к сети
в том разделе, оставшиеся будут описаны ниже.
- pseudo-device gzip
- gzip позволяет запускать программы FreeBSD, которые
были сжаты при помощи gzip. Программы в директории
/stand сжаты, поэтому было бы неплохо добавить эту опцию в
ядро.
- pseudo-device log
- log используется для журналирования
сообщений ядра об ошибках. Обязательная опция.
- pseudo-device pty number
- pty это ``псевдо-терминал'' или моделированный
порт входа. Он используется входящими сессиями telnet
и rlogin, xterm-ами, и некотрыми другими приложениями, как например
emacs. number
определяте количество pty, которые можно создать.
Вам нужно будет больше, чем значение равное 16, которое установлено по
умолчанию в GENERIC; вам, наверняка, понадобится большее число
одновременно работающих окон xterm и/или удаленных logins, поэтому
увеличьте это число, но оно должно быть не более
64.
- pseudo-device snp number
- Подсматривающее устройство. Это псевдо-устройство позволяет
одной сессии терминала просматривать другую используя команду
watch(8). Заметим, что реализация этой возможности имеет
большие последствия для безопасности и секретности.
number после snp это общее количество одновременно работающих
сессий snoop(подсматривающих). Не обязательная опция.
- pseudo-device vn
- Драйвер Vnode. Позволяет работать с файлом, как с устройством,
после создания, с помощью команды
vnconfig(8). Это драйвер может быть полезен
при работе с
images для гибких дисков и при использовании файла, как устройства для
swap (например swap файл в MS Windows). Не обязательная опция.
- pseudo-device ccd number
- Склеенные (последовательно) диски. Это псевдо устройство
позволяет вам присоединять (конкатенировать) несколько разделов
диска в один большой
``meta''-диск. number после ccd это общее количество
присоединенных дисков (не общее количество дисков, которые могут быть
присоединены), которое можно создать (т.е. это, как мы поняли, количество
``meta''-дисков).
(Смотрите man-страницы ccd(4) и ccdconfig(8)
для более полной информации.) Не является обязательной.
5.3.11. Джойстик, колонки, прочее
В этом разделе описаны прочие устройства, поддерживаемые FreeBSD,
которые не вошли в предыдущие
разделы. Ни одна из ниженаписанных строк не входит в файл
GENERIC, их надо будет скопировать из этого документа handbook
или из файла LINT
(кторый содержит поддержку для каждого устройства):
- device joy0 at isa? port ``IO_GAME''
- устройство джойстик для PC.
- pseudo-device speaker
- Поддерживает шумовые эффекты в стиле IBM BASIC для колонок PC.
Вот некоторые забавные программы, которые его используют
/usr/sbin/spkrtest, которая является shell
скриптом, проигрывающим некоторые простенькие песенки, ит программа
/usr/games/piano которая позволяет играть на клавиатуре, как
на пианино (эта программа есть на вашем диске, только если вы установили
пакет games). Кроме того, есть замечательная
текстовая ролевая игра NetHack (в коллекции ports), которую можно
отконфигурировать так, что она будет использовать это устройство, чтобы
проигрывать мелодии, когда вы в играете на музыкальных инструментах в
процессе игры.
Также смотрите
pca0 устройство.
5.4. Создание узлов устройств
Почти каждое устройство определенное в ядре имеет
соответствующий файл
``node(узел)'' в директории /dev. Эти ``узлы'' выглядят, как
обыкновенные файлы, но на самом деле это записи в ядре, которые программы
используют чтобы получить доступ к устройству.
shell скрипт /dev/MAKEDEV, который выполняется, когда
вы первый раз устанавливаете операционную систему,
создает ``узлы'' для почти всех поддерживаемых устройств.
Но не все, поэтому когда вы добавляете поддержку нового устройства,
этот скрипт проверяет есть ли соответствующий файл в этой (/dev) директории,
и если нет, то добавляет. Вот простой пример:
Предположим вы добавляете в ядро поддержку IDE CD-ROM.
Строка, которую надо добавить:
controller wcd0
Это значит, что вам надо искать записи начинающиеся с
wcd0 в директории /dev,
после этого, возможно, идет буква, например `c', или перед этим может
быть буква 'r', которая означает `raw (сырое)' устройство. Это означает,
что нужных файлов нет, поэтому надо войти в директорию
/dev и выполнить команду:
# sh MAKEDEV wcd0
Когда MAKEDEV закончит работу, вы увидите файлы
wcd0c и rwcd0c в директории
/dev, что свидетельствует о правильном выполнении скрипта.
Для звуковых карт команда:
# sh MAKEDEV snd0
создает соответствующие файлы. Замечание: если созданы узлы устройств
для таких устройств, как звуковые карты, то в ситуации,
когда ваша машина доступна другим пользователям (по сети), будет
целесообразно защитить эти устройства от внешнего доступа, путем добавления
их в файл
/etc/fbtab. Для более полной информации, смотрите man fbtab.
Проделайте такую же процедуру для всех устройств, которых нет в ядре
GENERIC и для которых нет записей в файле /etc/fbtab.
Замечание: Для всех SCSI-контроллов используются одни и те же
файлы в директории /dev, поэтому не надо их создавать.
Кроме того, для сетевых карт и псевдо-устройств SLIP/PPP вообще не
бывает соответствующих
файлов в директории /dev, поэтому не беспокойтесь о них.
Существует четыре категории проблем, возникающих при построении
ядра. Это следующие категории:
- Не работает команда Config
- Если команда config
рушится когда вы даете ей описание ядра,
то, скорее всего, у вас какая-нибудь простенькая ошибка.
К счастью, config печатает номер строки, в которой что-то не
так, поэтому при помощи текстового редактора, например vi,
вы быстренько доберетесь до этого места в конфигурационном файле. Например,
если вы увидите слелующее:
config: line 17: syntax error
то вы сможете, в vi, добраться до этого места написав
``17G'' в командном режиме. Убедитесь в том, что ключевые слова написаны
правильно, сверившись с файлом GENERIC
или другим справочником.
- Неудачно завершается команда make
- Если рушится команда make,
то чаще всего это говорит об ошибках в конфигурационном файле, которые не
были обнаружены при выполнении команды
config. Еще раз просмотрите файл конфигурации, и
если не смогли обнаружить ошибку, то пошлите почту в
список рассылки FreeBSD, в котором рассматриваются общие вопросы
freebsd-questions@FreeBSD.ORG
в письме изложите конфигурацию вашего ядра, обычно они отвечают достаточно
быстро.
- Ядро не загружается
- Если ваше новое ядро не желает загружаться, или не распознает устройства,
не паникуйте! К счастью, у BSD существует отличный механизм
для возвращения работоспособности системы в случае неподходящих ядер.
Просто, в приглашении загрузки FreeBSD, напишите название ядра,
которое вы хотите загрузить
(например ``kernel.old''), вместо того, чтобы просто нажать ``Enter''.
При переконфигурировании ядра, неплохо сохранять работающее ядро.
После загрузки при помощи хорошего ядра,
вы можете проверить конфигурационный файл и попробовать построить ядро
заново.
Наш очень хороший помощник файл
/var/log/messages, в котром записываются, среди прочего,
все сообщения ядра, при каждой удачной загрузке.
Кроме того, команда dmesg(8) выводит все сообщения ядра
текущей загрузки.
Замечание: если у вас проблемы с построением ядра,
то обязательно сохраните ядро
GENERIC, или какое-то другое ядро, про которое известно,
что оно работает; причем это ядро стоить сохранить под названием,
которое не забудется при следующих построениях.
Вы не можете полагаться на kernel.old
потому что при установке нового ядра,
kernel.old становится копией последнего установленного
ядра, которое могло быть нефункциональным.
Кроме того, передвиньте работающее ядро
в правильное место размещения ядер, иначе такие команды как
ps(1) не будут работать правильно. Правильная команда
``разблокировки'' файла ядра, котоый команда
make установила (для того, чтобы передвинуть
другое ядро насовсем) это:
# chflags noschg /kernel
И если вы хотите ``заблокировать'' ваше новое ядро,
т.е. передвинуть его в другое место или в какой-нибудь файл, то это нельзя
делать при помощи следующей команды:
# chflags schg /kernel
- Ядро работает, но не работает ps!
- Если вы установили версию ядра, отличающуюся
от той версии, с помощью которой были построены
системные утилиты, например экспериментальное
ядро
``2.2.0'' в системе 2.1.0-RELEASE, многие системные команды,
как например ps(1) и
vmstat(8) не будут работать совсем. Вы должны
перекомпилировать библиотеку
libkvm также, как и те утилиты.
Это одна из причин почему плохо использовать версию ядра отличную
от всей остальной операционной системы.
|