 | Конфигурирование PCMCIA устройств
PCMCIA
PCMCIA утройства иногда также называются устройствами PC-Card. Это тонкие, размером с кредитную карту, модули изначально проектировавшиеся с расчетом на hot-swap и легкость транспортировки. Наибольшее распространение получили они в ноутбуках. Однако некоторые десктопные и серверные конфигурации также имеют PCMCIA интерфейсы, зачастую установленные на внешних креплениях и подсоединенные через различные шины (специальные PCI или ISA карты, USB-трансляторы и т.д.). Различное оборудование может быть реализовано в размерах PCMCIA карт, включая Wireless и Ethernet адаптеры, микродрайвы, flash-диски, модемы, SCSI-адаптеры и многое другое специфическое оборудование.
Технически, PCMCIA интерфейс представляет из себя переходник к расположенным ниже уровнем ISA или PCI шинам. В большинстве случаев, передача происходит прозрачным образом -- одни и те же модули ядра или программы, которые взаимодействуют с ISA или PCI устройством, используются для обслуживания протокола обмена предоставляемого PCMCIA. Единственное настоящее различие PCMCIA устройств заключается в распознавании события при установке устройства и определении типа карты, для которого следует загрузить драйвер.
В настоящее время оборудование PCMCIA скрывается в тени USB и/или Firewire устройств. Несмотря на то, что PCMCIA обладает более удобным конструктивом (обычно скрывающий карту в корпусе), USB более универсален для широкого круга машин. В результате многие устройства, прежде выпускавшиеся в стандарте PCMCIA, нынче оформляются в виде устройств в стиле USB "dongle", а старые доступны только на распродажах.
Определение PCMCIA устройства (часть первая)
В современных ядрах -- 2.4 и выше -- поддержка PCMCIA доступна в виде модуля ядра. Современные дистрибутивы такую поддержку включают, но если вы собираете свое собственное ядро, включите опции CONFIG_HOTPLUG, CONFIG_PCMCIA и CONFIG_CARDBUS. Ранее такая поддержка обеспечивалась пакетом pcmcia-cs.
Модули pcmcia_core и pcmcia отвечают за поддержку PCMCIA
устройств. Модуль yenta_socket так же загружается для поддержки интерфейса CardBus (PCI-over-PCMCIA):
% lsmod | egrep '(yenta)|(pcmcia)'
pcmcia 21380 3 atmel_cs
yenta_socket 19584 1
pcmcia_core 53568 3 atmel_cs,pcmcia,yenta_socket
|
При установке карты в PCMCIA слот демон cardmgr обращается к базе данных /etc/pcmcia/config и загружает тот драйвер, который нужен.
Определение PCMCIA устройства (часть вторая)
Теперь взглянем на процесс идентификации PCMCIA устройства в действии. Я вставляю карту в Linux лэптоп со слотом PCMCIA, с включенной поддержкой указанных ранее модулей ядра. Я могу воспользоваться программой cardctl для просмотра информации об имеющемся оборудовании:
% cardctl ident
Socket 0:
product info: "Belkin", "11Mbps-Wireless-Notebook-Network-Adapter"
manfid: 0x01bf, 0x3302
function: 6 (network)
|
Эта информация предоставляется модулем ядра pcmcia_core, запросившего ее у физической карты. Как только идентификация проведена, cardmgr сканирует базу данных для того, чтобы найти соответствующий драйвер. Выглядит это примерно так:
% grep -C 1 '0x01bf,0x3302' /etc/pcmcia/config
card "Belkin FSD6020 v2"
manfid 0x01bf,0x3302
bind "atmel_cs"
|
В этом случае нам нужен модуль ядра atmel_cs для поддержки wireless интерфейса, предоставляемого этой картой. Вы можете увидеть это, заглянув в /var/lib/pcmcia/stab или /var/run/stab, в зависимости от вашей системы:
% cat /var/run/stab
Socket 0: Belkin FSD6020 v2
0 network atmel_cs 0 eth2
|
Получение отладочной информации о PCMCIA устройстве
В приведенном выше примере выполнявшиеся этапы были незаметны. Карта была опознана, драйвера загружены, и все было подключено. Это идеальная ситуация. Если же что-то не в порядке, вы можете обнаружить, что драйвер, который надо загрузить, не найден.
Если вы уверены, что ваше PCMCIA может использовать имеющийся драйвер (например, он совместим с другим чипсетом), вы можете запустить insmod вручную для загрузки подходящего модуля. Или же, если вы постоянно используете эту карту, вы можете отредактировать /etc/pcmcia/config для того, что бы добавить поддержку этой карты, указав необходимый драйвер. Однако в случае, если ваше предположение относительно модуля не оправдалось, вам следует убедиться, что карта действительно совместима с какой-то другой известной PCMCIA картой.
Настройка загрузки PCMCIA может быть сделана через установочный скрипт /etc/pcmcia/, поименованный согласно функциональной категории. Например, когда 802.11b карта, подобная той, что загружалась в предыдущем примере, запускается скрипт /etc/pcmcia/wireless. Вы можете настроить эти скрипты, если устройство требует специальных настроек.
Использование "схем" для различных конфигураций
Если у вас возникает необходимость использовать PCMCIA устройство в различных конфигурациях, вы можете воспользоваться командой cardctl scheme для установки (или запроса) конфигурации. Например:
% sudo cardctl scheme foo
checking: eth2
/sbin/ifdown: interface eth2 not configured
Changing scheme to 'foo'...
Ignoring unknown interface eth2=eth2.
% cardctl scheme
Current scheme: 'foo'.
|
В этом случае, я в действительности не определяю схему foo, но если вы ее измените, то произойдет реконфигурация. Схемы могут быть использованы в настроечных скриптах при помощи анализа переменной $ADDRESS:
# in /etc/pcmcia/network.opts (called by /etc/pcmcia/network)
case "$ADDRESS" in
work,*,*,*)
# definitions for network in work scheme ...
;;
default,*,*,*)
# definitions for network in default scheme ...
;;
esac
|
Конечно, вы можете устанавливать схемы в инициализационных скриптах или переключать их событиями (через задания cron, GUI интерфейс и т.д.).
|  |