SWD Software Ltd. - официальный дистрибьютор QNX на территории России и стран бывшего СССР Операционная система реального времени QNX
Инструменты для создания надёжных встраиваемых систем и
интеллектуальных устройств любой сложности
QNX Software Systems - разработчик встраиваемой операционной системы QNX
Курсы по ОСРВ QNX Neutrino
Требования к знаниям языка С у слушателей курсов и семинаров
Полезные материалы
Публикации
Переводы
Полезные советы
Обзоры, отчеты и сравнения
Главная страница > Обучение > Полезные материалы > Полезные советы > Настройка PCMCIA-устройств в QNX4 Сделать страницу стартовой Послать ссылку коллеге Версия для печати

Настройка PCMCIA-устройств в QNX4

Запуск сервера PCMCIA

Утилита pcmciatrap может быть очень полезной для определения какой сервер PCMCIA запустить и с какими параметрами:

pcmciatrap - Autodetect PCMCIA adapter and optionally start correct driver. pcmciatrap [options] [query] Print command line necessary to start driver. pcmciatrap [options] start Start driver. Options: -q Quiet output -v Verbose output for debugging.

Команда pcmciatrap start запустит соответствующий вашей системе сервер PCMCIA.

После того как это будет сделано, вы сможете использовать команду pin для просмотра статистики PCMCIA:

pin - display information about PCMCIA devices and servers (QNX) pin [options]... [command] Options: -n node Information about server on this node -s socket Information about this socket only (1 based) Commands: status Show status of each socket (default) resources Port, irq and memory resources config Attempt to make configuration file entries cis Decode CIS on card clear Clear all resource tables on server file Cause server to reread configuration file

Например, команда pin без параметров покажет количество слотов и информацию об установленных устройствах:

Sock Win Type Flags PID Base Size IRQ Base Size DMA 1 Empty ----MF---------- None 2 Empty ----MF---------- None

Конфигурирование ресурсов

Следующим шагом следует определить, какие ресурсы могут использоваться PCMCIA-картами. Сервер PCMCIA пытается выделить ресурсы картам по мере их установки, и следует убедиться, что не возникнет конфликта. Для этого надо отредактировать файл /etc/config/pcmcia.<номер_узла> . Этот файл может выглядеть примерно так:

[resources] memory = 0xd0000-0xd1fff ports = 0x280-0x29f, 0x300-0x33f rports = 0x2e8+8, 0x3e8+8, 0x170+8, 0x376+2 irqs = 12,7,5,3

Расшифровка строк такова:

[resources]

Эта строка говорит серверу PCMCIA о том, что мы сейчас будем определять набор ресурсов, который он может использовать, и является обязательной.

memory = 0xd0000-0xd1fff

Это определяет диапазон допустимых адресов памяти.

ports = 0x280-0x29f, 0x300-0x33f

Порты ввода/вывода, которые могут быть использованы картами. Если портов недостаточно, то не все устройства смогут запуститься.

rports = 0x2e8+8, 0x3e8+8 0x170+8 0x376+2

Порты ввода/вывода, которые сервер PCMCIA не должен использовать.

irqs = 12,7,5,3

Допустимые значения IRQ, которые могут присваиваться картам.

Конфигурирование карт

Чтобы QNX4 могла автоматически распознавать и конфигурировать карты, информацию о них надо предварительно поместить в специальный файл /etc/config/pcmcia.cards, в котором содержится список всех поддерживаемых карт. Записи имеют тот же формат, что и вывод команды pin config:

; socket 1 [device] manufacturer = "Socket Communications Inc" product = "Socket EA PCMCIA LAN Adapter Revision E" info1 = "Ethernet ID 00C01B006B0D" regbase = 0x10000 config = 0x01, 0x0601, irq any, io any+32 (width=16) config = 0x03, 0x0601, irq any, io 0x2a0-0x2bf (width=16) config = 0x05, 0x0601, irq any, io 0x2c0-0x2df (width=16) config = 0x07, 0x0601, irq any, io 0x2e0-0x2ff (width=16) config = 0x09, 0x0601, irq any, io 0x300-0x31f (width=16) config = 0x0b, 0x0601, irq any, io 0x320-0x33f (width=16) config = 0x0d, 0x0601, irq any, io 0x340-0x35f (width=16) config = 0x0f, 0x0601, irq any, io 0x360-0x37f (width=16) register = 0, 0x40, 0x40 ; level mode interrupts

Любые строки, начинающиеся с '#' или ';', рассматриваются как комментарии и игнорируются.

Расшифровка строк:

[device]

Указывает на начало описания устройства.

manufacturer = "Socket Communications Inc"

Имя производителя - используется сервером PCMCIA для сравнения с информацией, считанной из информационной структуры CIS при установке карты. Могут использоваться макросимволы типа * и ?.

product = "Socket EA PCMCIA LAN Adapter Revision E"

Наименование продукта, как оно указывается производителем карты. Если установлены несколько карт одного производителя, то для идентификации карты будет использоваться наименование продукта. Может содержать макросимволы.

info1 = "Ethernet ID 00C01B006B0D"

Строки info1 и info2 являются необязательными и содержат дополнительную информацию о карте.

regbase = 0x10000

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

config = 0x01, 0x0601, irq any, io any+32 (width=16) config = 0x03, 0x0601, irq any, io 0x2a0-0x2bf (width=16) config = 0x05, 0x0601, irq any, io 0x2c0-0x2df (width=16) config = 0x07, 0x0601, irq any, io 0x2e0-0x2ff (width=16) config = 0x09, 0x0601, irq any, io 0x300-0x31f (width=16) config = 0x0b, 0x0601, irq any, io 0x320-0x33f (width=16) config = 0x0d, 0x0601, irq any, io 0x340-0x35f (width=16) config = 0x0f, 0x0601, irq any, io 0x360-0x37f (width=16)

Здесь присутствуют следующие поля (слева направо):

"индекс"
Числовая константа, обозначающая значение индекса конфигурации, которое будет записано в регистр конфигурации карты.

"тип"
Тип карты:

- 0x0201 - последовательное/модемное устройство на базе 8250/16450 - 0x0301 - параллельный порт PC - 0x0401 - ATA-НЖМД - 0x0501 - видеоадаптер VGA - 0x0601 - NE2000-совместимая сетевая карта - 0x0602 - карта NCR Wavelan - 0x8001 - SCSI-адаптер Adaptec T340 (NCR53C400) - 0x8101 - New Media .WAV Jammer "ресурс" Указывает какие ресурсы требуются в данной конфигурации . Возможные значения:

irq
Определяет присваиваемый карте IRQ. Множество значений может быть указано в виде irq | irq | irq , в этом случае может быть использовано любое из них.

io
Допустимые значения портов ввода/вывода. Возможные варианты описания:

- <начальный_адрес>-<конечный_адрес> - <начало>+<длина> - ANY+<длина>

width
Задает разрядность портов. Содержит "width=8" для 8-битных портов и "width=16" для 16-битных.

offset
На настоящий момент не поддерживается.

mem
Обозначает дипазон памяти со страничным выравниваем (на границу 4K).

Файл /etc/config/pcmcia.cards содержит текущий список всех описаний, которые работают с QNX4. Добавить карту в этот список можно следующим образом:

pin config > /tmp/pin.cfg cat /tmp/pin.cfg >> /etc/config/pcmcia.cards

После добавления необходимо перезапустить сервер PCMCIA и выполнить команду pin. Вы должны увидеть что-то вроде этого:

Sock Win Type Flags PID Base Size IRQ Base Size DMA 1 0 NE2000 C---I-+--------W None 0x280 32 5 2 Empty ----MF---------- None

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

Sock Win Type Flags PID Base Size IRQ Base Size DMA 1 0 Unknown C---MF---------- None 2 Empty ----MF---------- None

то это означает, что PCMCIA карта обнаружена (флаг С), но ее тип неизвестен. Как правило, причина этого состоит в том, что в описании карты не указан ее тип. Откройте с помощью текстового редактора файл /etc/config/pcmcia.cards. В поле "тип" замените во всех строках "config=" описания этой карты значение 0xffffffff на одно из перечисленных выше (например, для NE2000-совместимых сетевых карт это будет 0x0601).

После изменения файла /etc/config/pcmcia.cards необходимо перезапустить сервер PCMCIA и снова выполнить команду pin.

Запуск драйвера устройства

Теперь, когда команда pin правильно определяет карту, осталось только запустить соответствующий драйвер для вашего оборудования. QNX позволяет динамический запуск и остановку драйверов устройств из командной строки. Так для примера с NE2000 совместимой сетевой картой команда будет выглядеть:

Net.ether1000 -l2 -i5 -p280 &

Иногда здесь ожидает неприятный сюрприз, например:

Net.ether1000 -l2 -i5 -p320 -v & Net.ether1000 Driver Initializing ... I/O Port Base ....... 0320 %3 + 4929 Running Net.ether1000 -l2 -i5 -p320 -v Trying as 16 bit card Memory Verification Failed, Exiting Net.ether1000: INITIALIZATION ERROR 10 Net.ether1000: INITIALIZATION ERROR 04

В большинстве таких случаев помогают следущие рекомендации (в зависимости от конкретной ситуации вам может понадобиться выполнить либо оба пункта, либо будет достаточно одного из них):

1) (здесь имеет место именно это) В выбранной автоматически конфигурации используются неудачные значения адреса порта и IRQ. IRQ 5 часто бывает занято, а порт 0x320 часто используется звуковыми картами. Принудительно заставьте сервер PCMCIA выбрать другую конфигурацию карты, для чего измените описание доступных ресурсов в файле /etc/config/pcmcia.<номер_узла> следующим образом:

[resources] memory = 0xd4000-0xd5fff ports = 0x340-0x3ff (было 0x320-0x33f) irqs = 11, 12

2) В файле /etc/config/pcmcia.cards неправильно указана разрядность портов. Уберите строчки "(width=16)" из строк "config = ..." описания данной карты.

Рассказать друзьям:

     Рейтинг@Mail.ru