Как запустить 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
- Допустимые значения векторов прерываний, которые могут присваиваться картам.
Конфигурирование карт
Чтобы ОС QNX могла автоматически распознавать и конфигурировать карты, информацию о них надо
предварительно поместить в специальный файл /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 менеджером для сравнения с информацией
считанной из Card Information Structure (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 Serial/ modem devices with 8250/16450 devices
- 0x0301 PC Parallel ports
- 0x0401 ATA Hard Disk
- 0x0501 VGA Adaptor
- 0x0601 NE2000 compatible network card
- 0x0602 NCR Wavelan Card
- 0x8001 Adaptec T340 SCSI Adaptor (NCR53C400)
- 0x8101 New Media .WAVJammer
- ресурс
- Указывает какие ресурсы требуются в данной конфигурации . Возможные значения:
irq
- Определяет присваиваемый карте IRQ. Множество значений может быть указано в
виде irq | irq | irq , в этом случае любое из них может быть использовано.
- io
- Допустимые значения портов ввода/вывода. Возможные варианты описания:
- начало - конец
- начало + длина
- ANY + длина
- width=8
- width=16
- offset=
offset сейчас не поддерживается
- mem
обозначает дипазон памяти с выравниваем по 4K странице
Файл /etc/config/pcmcia.cards содержит текущий список всех описаний,
которые работают с QNX. Добавить карту в этот список можно следующим образом:
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 -p 280 &
Иногда здесь ожидает неприятный сюрприз, например:
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)В этом случае мы видим, что в выбранной автоматически конфигурации используются
неудачные значения адреса порта и прерывания. Прерывание 5 часто бывает занято,
а адрес порта 0x320 обычно используется soundblaster'ом. Принудительно заставьте PCMCIA драйвер выбрать другую конфигурацию
карты, для чего измените описание доступных ресурсов в файле /etc/config/pcmcia.узел следующим образом:
[resources]
memory = 0xd4000-0xd5fff
ports = 0x340-0x3ff (было 0x320-0x33f)
irqs = 11, 12
2)в файле /etc/config/pcmcia.cards
убрать (width=16) из строк config = ... описания данной карты