FAQ FreeBSD - Дистрибутивы FreeBSD. Часть 2
ОГЛАВЛЕНИЕ
13.8. Я написал некоторое добавление к ядру, кому его послать?
Обратитесь к соответствующему разделу Руководства, в котором описано, как это
сделать.
И спасибо вам за ваши усилия!
13.9. Как распознаются и инициализируются адаптеры ISA Plug N Play?
От: Фрэнка Дурды IV (Frank Durda IV)
Если рассматривать на самом низком уровне, то существует несколько портов ввода
/вывода, в которые должны выводить информацию все адаптеры PnP, когда компьютер
пытается выполнить запрос о наличии установленных адаптеров. Так что, когда
запускается процедура определения адаптеров PnP, она выполняет запрос о наличии
каких-либо адаптеров PnP, а все такие адаптеры выдают свой номер модели при
чтении того же порта ввода/вывода, поэтому процедура определения получит ответ
на свой запрос, состоящий из логически наложенных номеров моделей,
интерпретируемый как "да". В этом ответе по крайней мере один бит будет установ
лен в единицу. Затем код определения адаптеров может "выключать" адаптеры с ID
(назначаемыми Microsoft/Intel), большими, чем X. Потом следует попытка
определить, остались ли ещё адаптеры, отвечающие на запрос. Если ответ 0, то
адаптеров с ID, большими чем X, нет. После этого делается попытка определить
наличие адаптеров с номерами, меньшими чем X. Если они есть, то становится изв
естно, что есть адаптеры с номерами, меньшими, чем X. Тогда происходит запрос
адаптерам, большим чем X-(limit-4), на выключение. Запрос повторяется. Применив
этот метод полудвоичного поиска границ расположения ID достаточное количество
раз, код идентификации найдёт все адаптеры PnP, установленные в данной машине
за число итераций, гораздо меньшее, чем может занять перебор 2^64 возможных в
ариантов ID.
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 ответил "хулиган".
Так что они выполняют запись в порт статуса принтера для установки адресов, в
добавок используют этот адрес + 0x800, и ещё один порт ввода/вывода, который
может располагаться где угодно в диапазоне между 0x200 и 0x3ff, для чтения.
13.10. Поддерживает ли FreeBSD аппаратные платформы, отличные от x86?
Интерес к работе над поддержкой многоплатформенности во FreeBSD проявили
несколько групп разработчиков, и одна из попыток переноса на другую
архитектуру, FreeBSD/AXP (ALPHA), оказавшаяся достаточно удачной, в настоящее в
ремя доступна по адресу ftp://ftp.FreeBSD.org/pub/FreeBSD/alpha. Эта реализация
для ALPHA сейчас поддерживает всё увеличивающееся число машин ALPHA, в
частности, модели AlphaStation, AXPpci, PC164, Miata и Multia. Чтобы быть в
курсе событий, происходящих с этим проектом, подпишитесь на соответствующий <
Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.> список рассылки.
Также был проявлен интерес к переносу FreeBSD на платформу SPARC. Если вы
хотите подключиться к этому проекту, подпишитесь на соответствующий <
Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.> список рассылки. В список планируемых к поддержке
платформ совсем недавно добавились архитектуры IA-64 и PowerPC, дополнительную
информацию можно получить, подключившись к соответствующим спискам рассылки <
Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.> и/или <Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.>. Для обсуждение общих
вопросов, касающихся новых аппаратных платформ, предназначен список рассылки <
Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.>.
13.11. Мне нужно старшее число для написанного мною драйвера устройства.
Всё зависит от того, планируете вы сделать этот драйвер общедоступным или нет.
Если это так, то, пожалуйста, пошлите нам копию исходных текстов драйвера в
месте с соответствующими модификациями в файле files.i386, пример описания
устройства в файле конфигурации ядра и соответствующий код MAKEDEV для создания
специальных файлов устройств, которые использует ваше устройство. Если это не
так. или это невозможно из-за лицензионных ограничений, то для старшего числа
символьного устройства и старшего числа блочного устройства для этих целей были
зарезервированы значения 32 и 8 соответственно; используйте их. В любом случае.
мы будем рады услышать о вашем драйвере в списке рассылки <
Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.>.