В Чтобы сделать релиз, вам нужно иметь три вещи: Во-первых, вам нужно
работать с ядром, включающим драйвер Во-вторых, вам нужно иметь на диске полное дерево CVS. Чтобы
добиться этого, вы можете использовать После этого запустите Наконец, вам нужно свободное место для построения системы.
Допустим, что свободное место есть в каталоге
/some/big/filesystem и, как в примере выше, вы поместили
дерево CVS в каталог /home/ncvs:
Полный релиз будет строиться в каталоге
/some/big/filesystem/release и по окончании этого процесса
дистрибутив, готовый к помещению на FTP-сервер, будет находиться в
каталоге /some/big/filesystem/release/R/ftp. Если вы захотите
построить SNAP другой ветки, не -current, то можете указать
Весь процесс создания инсталляционных дисков и дистрибутивов
исходных текстов и бинарников автоматизирован в файле
/usr/src/release/Makefile. Информации, в нём содержащейся,
должно быть достаточно, чтобы начать. Однако, должны вас предупредить,
что этот процесс включает в себя выполнение ``make world'' и поэтому
занимает много времени и дискового пространства.
Да, так и должно быть; как говорит название этой команды, ``make
world'' выполняет построение всех системных файлов с нуля, так
что в итоге можете быть уверены, что получите чистую рабочую
систему (вот почему это занимает столько времени).
Если в момент запуска команд ``${DESTDIR}. Однако некоторые случайные
комбинации модификаций совместно используемых библиотек и версий
компилируемых программ при исполнении команды ``
Адаптеры SCSI Adaptec 1542 позволяют программно изменять скорость
доступа к шине. Предыдущие версии драйвера 1542 пытались определить
максимально возможную скорость работы и установить это значение. Мы
обнаружили, что у некоторых пользователей это приводило к нарушению
работоспособности системы, поэтому эта возможность сейчас вынесена
в параметр конфигурации ядра ``
Да, это можно делать .
Команда split в современных BSD-системах имеет опцию ``Вот пример из файла /usr/src/Makefile.
Обратитесь к соответствующему И спасибо вам за ваши усилия!
От: Если рассматривать на самом низком уровне, то существует несколько
портов ввода/вывода, в которые должны выводить информацию все адаптеры
PnP, когда компьютер пытается выполнить запрос о наличии установленных
адаптеров. Так что, когда запускается процедура определения адаптеров
PnP, она выполняет запрос о наличии каких-либо адаптеров PnP, а все
такие адаптеры выдают свой номер модели при чтении того же порта
ввода/вывода, поэтому процедура определения получит ответ на свой
запрос, состоящий из логически наложенных номеров моделей,
интерпретируемый как ``да''. В этом ответе по крайней мере один бит
будет установлен в единицу. Затем код определения адаптеров может
``выключать'' адаптеры с ID (назначаемыми Microsoft/Intel), меньшими,
чем X. Потом следует попытка определить, остались ли ещё адаптеры,
отвечающие на запрос. Если ответ ``ID представляет собой два 32-разрядные числа (всего их 2ˆ64)
+ 8 бит контрольной суммы. Первые 32 бита являются идентификатором
производителя. Они никогда не сообщаются, однако часто бывает, что
различные типы адаптеров от одного и того же производителя имеют
различные 32-битные значения идентификатора производителя.
Необходимость в 32 разрядах только для задания производителя адаптера
выглядит несколько излишним.
Оставшиеся 32 бита являются серийным номером, ethernet-адресом,
чем-либо, делающим этот адаптер уникальным. Производитель не должен
выпускать других адаптеров, имеющих то же самое значение этих битов,
если, конечно, у них не разные идентификаторы производителя. Таким
образом, вы можете иметь несколько адаптеров одинакового типа, но с
различными 64-разрядными номерами.
Группы по 32 бита не богут быть нулевыми. Это позволяет при
логическом объединении OR их номеров получать ненулевое значение во
время начального поиска адаптеров.
Как только система определила ID всех адаптеров, она активизирует
каждый адаптер, по одному за раз (через те же порты ввода/вывода), и
определяет, какие ресурсы требуются данному адаптеру, какие возможные
прерывания доступны итд. Сканирование и сбор информации происходит
по всем адаптерам.
Эта информация соотносится с содержащейся в файлах ECU на диске
или в MLB BIOS. Поддержка PnP из ECU и BIOS для аппаратуры на
MLB обычно имеет синтетический характер, и периферия не выполняет
полностью поцедуру настоящего PnP. Однако, используя BIOS и
информацию из ECU, процедура инициализации может обнаружить устройства
PnP, которые не могут быть найдены другим способом.
Затем устройства PnP опрашиваются ещё раз для назначения им портов
ввода/вывода, DMA, IRQ и адресов отображаемой памяти. Теперь
устройства должны иметь именно такие настройки и они должны оставаться
такими до следующей перезагрузки, хотя нигде не сказано, что вы не
можете их менять, когда захотите.
Здесь сделано много упрощений, однако общую идею вы должны уловить.
Microsoft использовала для PnP некоторые порты статуса первого
принтера, по их логике, не существует адаптеров, использующих эти
адреса для ввода/вывода. Я обнаружил один такой адаптер принтера от
IBM, который декодирует запись в порт статуса в момент начального
опроса устройств PnP, на что MS ответил ``хулиган''. Так что они
выполняют запись в порт статуса принтера для установки адресов,
плюс используют этот адрес +
Интерес к работе над многоплатформенной поддержкой во FreeBSD
проявили несколько групп разработчиков, и одна из попыток переноса,
FreeBSD/AXP (ALPHA), оказавшейся достаточно удачной, в настоящее
время доступна в виде релиза 3.0 SNAP по адресу Всё зависит от того, планируете вы сделать этот драйвер
общедоступным или нет. Если это так, то, пожалуйста, пошлите нам
копию исходных текстов драйвера вместе с соответствующими
модификациями в файле files.i386, пример описания устройства
в файле конфигурации ядра и соответствующий код
В ответ на вопрос о других методах размещения каталогов могу
сказать, что используемая в настоящее схема не претерпела изменений
с 1983 года. Эти соглашения были предназначены для оригинальной
файловой системы FFS, я никогда их не пересматривал. Эта схема
прекрасно работает, позволяя избежать переполнения групп дорожек.
Как некоторые из вас замечали, она работает плохо при поиске.
Большинство файловых систем создаются из архивов, которые были
созданы с глубиной первого поиска (aka ftw). Это приводит к тому, что
их каталоги размещаются на нескольких группах дорожек, создавая
наихудший случай для последующего поиска глубиной один. Если бы
было известно общее количество каталогов, которые должны быть созданы,
быходом было бы создание (общее количество / количество групп дорожек)
на дорожку группу перед переходом. Обычно это число определяется чисто
эвристически. Даже при использовании маленького фиксированное числа,
скажем 10, значительно улучшает ситуацию. Чтобы различать операции
восстановления от обычных операций (где текущий алгоритм подходит),
вы можете использовать объединение в кластеры объёмом до 10, если они
делаются в окне, равным 10 секундам. Во всяком случае, я думаю, что
это требует некоторых экспериментов. Кирк МакКузик (Kirk McKusick), Сентябрь 1998
[Этот раздел был вырезан из письма, написанного
[<ben@rosengart.com> отправил письмо, содержащее следующее
аварийное сообщение системы]
[Если] вы увидите такое сообщение, просто его воспроизвести и
послать нам не достаточно. Указатель инструкций, выделенный мною,
важен, к сожалению, его значение зависит от конфигурации ядра.
Другими словами, его значение меняется в зависимости от конкретного
ядра, которое вы используете. Если вы используете ядро GENERIC
одного из снэпшотов, то кто-то ещё может отследить функцию, вызвавшую
ошибку, но если вы работаете со специально отконфигурированным ядром,
то только Вот что вы должны сделать:
Зачастую люди приводят подобные аварийные сообщения, на редко кто
утруждается привести соотвествие указателя инструкций с функцией в
таблице символов ядра.
Лучшим способом выяснить причину, вызвавшую аварийный останов,
является создание аварийного дампа системы, а затем использование
Во всяком случае, обычно я использую такой способ:
[Замечание: Так как теперь ядра FreeBSD 3.x по умолчанию
имеют формат Elf, вы должны использовать команду
Заметьте, что ВАМ Чтобы включить сброс аварийного дампа, вам нужно отредактировать
файла /etc/rc.conf, чтобы /etc/rc.conf, скрипты /var/crash.
ЗАМЕЧАНИЕ: аварийные дампы FreeBSD обычно имеют размер, равный
физическому объёму оперативной памяти вашей машины. Так что если
у вас 64МБ ОЗУ, вы получите дамп размером 64МБ. Поэтому вы должны
удостовериться, что в каталоге /var/crash достаточно места
для хранения дампа. Либо вы можете вручную запустить Как только вы получили аварийный дамп, вы можете выполнить
трассировку вызовов с помощью
Заметьте, что при этом может быть выведено несколько экранов
информации; в идеале вы должны использовать Теперь, если вы в самом деле душевнобольной и у вас есть второй
компьютер, то можете настроить [Билл (Bill) добавил: "Я забыл обратить ваше внимание
на одну вещь: если у вас включена поддержка DDB и ядро переходит
в режим отладки, вы можете намеренно вызвать аварийный останов
(и создание аварийного дампа), набрав 'panic' в командной строке
ddb. Этот процесс может снова вызвать отладчик. В этом случае
наберите 'continue' и процесс будет завершён созданием аварийного
дампа." -ed]
По умолчанию при работе с форматом ELF символы, определённые в
выполнимом файле, не доступны динамическому загрузчику. Поэтому
при вызове функции dlsym(), которая осуществляет поиск по
дескриптору, полученному после вызова dlopen(NULL, flags),
желаемый результат достигнут не будет.
Если вы хотите осуществить поиск в выполнимом файле процесса с
помощью функции dlsym(), вам нужно компоновать выполнимый
файл с опцией -export-dynamic По умолчанию размер адресного пространства ядра равен 256 МБ во
FreeBSD 3.x и 1 ГБ во FreeBSD 4.x. Если вы используете FreeBSD
в качестве сервера с интенсивной сетевой нагрузкой (скажем,
большой FTP или HTTP сервер), вы можете обнаружить, что 256 МБ
недостаточно.
Каким же образом можно увеличить адресное пространство? Здесь
есть два момента. Во-первых, вам нужно указать ядру выделить
большее количество адресного пространства для самого ядра. Во-вторых,
так как ядро загружается в верхнюю часть адресного пространства, вам
нужно уменьшить адрес загрузки так, чтобы он не вышел за верхнюю
границу.
Первая проблема решается увеличением значения константы
src/sys/i386/include/pmap.h. В случае 1
ГБ адресного пространства он должен выглядеть примерно так:
Для вычисления значения Для достижения второй цели вам нужно правильный адрес для загрузки
ядра: просто отнимите размер адресного пространства (в байтах) от
0x100100000; результат будет равным 0xc0100000 для адресного
пространства в 1 ГБ. Установите значение константы src/sys/i386/conf/Makefile.i386 в это значение; затем
установите значение счётчика в начале списка секций в файле
src/sys/i386/conf/kernel.script в то же самое значение, как
это сделано здесь:
После этого переконфигурируйте и перестройте ядро. Вы можете
столкнуться с проблемами при работе утилит /usr/include/vm/).
ЗАМЕЧАНИЕ: Размер адресного пространства ядра должен быть
кратен четырём мегабайтам.
[