Имеется pcmcia адаптер BestConnectivity 1-port RS-232. Это устройство работает в Windows XP, работало в дистрибутиве Mandriva 2007 (2.6.25) и в дистрибутиве ALT Linux Server 4.0 (2.6.18). После перехода на Пятую Платформу (2.6.30) данный адаптер перестал функционировать. Сообщения dmesg после инсталляции карты: [ 107.492554] pcmcia 0.0: pcmcia: registering new device pcmcia0.0 [ 107.589269] 0.0: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A [ 250.938128] pcmcia_socket pcmcia_socket0: pccard: card ejected from slot 0 [ 261.136052] pcmcia_socket pcmcia_socket0: pccard: PCMCIA card inserted into slot 0 [ 261.136390] pcmcia 0.0: pcmcia: registering new device pcmcia0.0 [ 261.176921] ttyS0: detected caps 00000700 should be 00000100 [ 261.176940] 0.0: ttyS0 at I/O 0x3f8 (irq = 3) is a 16C950/954 Вывод lspcmcia -vv [root@asus /]# lspcmcia -vv Socket 0 Bridge: [yenta_cardbus] (bus ID: 0000:08:01.0) Configuration: state: on ready: yes Voltage: 5.0V Vcc: 5.0V Vpp: 0.0V Available IRQs: 3, 4, 5, 7, 10, 11 Available ioports: 0x00000100 - 0x000003af 0x000003e0 - 0x000004ff 0x00000820 - 0x000008ff 0x00000a00 - 0x00000aff 0x00000c00 - 0x00000cf7 0x0000a000 - 0x0000bfff Available iomem: 0x000c0000 - 0x000fffff 0xfcc10000 - 0xfce1ffff 0xfd030000 - 0xfde9ffff 0xfe0b0000 - 0xfe8effff Socket 0 Device 0: [serial_cs] (bus ID: 0.0) Configuration: state: on Product Name: CF GEN Identification: manf_id: 0x0279 card_id: 0x950b function: 2 (serial) prod_id(1): "CF" (0x44ebf863) prod_id(2): "GEN" (0x69bf4c92) prod_id(3): --- (---) prod_id(4): --- (---) Устройство /dev/ttyS1 не создаётся.
(В ответ на комментарий №0) > Сообщения dmesg после инсталляции карты: > [ 107.492554] pcmcia 0.0: pcmcia: registering new device pcmcia0.0 > [ 107.589269] 0.0: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A > [ 250.938128] pcmcia_socket pcmcia_socket0: pccard: card ejected from slot 0 > [ 261.136052] pcmcia_socket pcmcia_socket0: pccard: PCMCIA card inserted into > slot 0 > [ 261.136390] pcmcia 0.0: pcmcia: registering new device pcmcia0.0 > [ 261.176921] ttyS0: detected caps 00000700 should be 00000100 > [ 261.176940] 0.0: ttyS0 at I/O 0x3f8 (irq = 3) is a 16C950/954 Не совсем понятно, что именно тут делалось - карта менялась в процессе работы? Какое именно устройство было вставлено на 107 секунде после загрузки, и на что было заменено на 261 секунде? > Устройство /dev/ttyS1 не создаётся. Судя по сообщениям ядра, для первой карты было зарегистрировано устройство ttyS1, для второй - ttyS0. Что выводит команда ls -la /sys/class/tty/ttyS* при вставленной проблемной карте? Ещё представляет интерес содержимое файла /proc/tty/driver/serial, и уточните сборку ядра (uname -r). Кстати, /dev/ttyS1 должен был присутствовать даже при отсутствии карты - устройства /dev/ttyS0.../dev/ttyS3 регистрируются всегда для возможности использования setserial с нестандартными устройствами.
(В ответ на комментарий №1) > Не совсем понятно, что именно тут делалось - карта менялась в процессе работы? да. > Какое именно устройство было вставлено на 107 секунде после загрузки, и на что pcmcia-modem Psion Datacom 56k Это устройство опознаётся как ttyS1 и работает нормально. > было заменено на 261 секунде? Вставлена проблемная карта - адаптер RS-232 > > Устройство /dev/ttyS1 не создаётся. Опечатка. При подключении проблемного устройства не создаётся ttyS0. > Судя по сообщениям ядра, для первой карты было зарегистрировано устройство > ttyS1, для второй - ttyS0. Что выводит команда Да. > > ls -la /sys/class/tty/ttyS* lrwxrwxrwx 1 root root 0 Nov 16 20:48 /sys/class/tty/ttyS0 -> ../../devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0/tty/ttyS0 lrwxrwxrwx 1 root root 0 Nov 16 2009 /sys/class/tty/ttyS1 -> ../../devices/platform/serial8250/tty/ttyS1 lrwxrwxrwx 1 root root 0 Nov 16 2009 /sys/class/tty/ttyS2 -> ../../devices/platform/serial8250/tty/ttyS2 lrwxrwxrwx 1 root root 0 Nov 16 2009 /sys/class/tty/ttyS3 -> ../../devices/platform/serial8250/tty/ttyS3 > при вставленной проблемной карте? Ещё представляет интерес содержимое файла > /proc/tty/driver/serial, и уточните сборку ядра (uname -r). serinfo:1.0 driver revision: 0: uart:16C950/954 port:000003F8 irq:3 tx:24 rx:0 1: uart:unknown port:000002F8 irq:3 2: uart:unknown port:000003E8 irq:4 3: uart:unknown port:000002E8 irq:3 2.6.30-std-def-alt14
С точки зрения ядра устройство ttyS0 есть; если при этом файл /dev/ttyS0 отсутствует - это, вероятно, проблемы udev. Можно проверить, что происходит, следующим образом: 1) До подключения карты запустить: /sbin/udevadm monitor --env (писать в файл без буферизации оно, похоже, не умеет, поэтому нужно либо потом забирать результат из scrollback в терминале, либо предварительно запустить script monitor.log для сохранения вывода сразу в файл). 2) Подключить карту - udevadm monitor выведет информацию о событиях, обрабатываемых udev. 3) Подождав на всякий случай несколько минут, проверить наличие файла /dev/ttyS0 (и права на него, если он всё-таки есть), после чего скопировать весь вывод udevadm monitor.
(В ответ на комментарий №3) > 1) До подключения карты запустить: > > /sbin/udevadm monitor --env [root@asus ~]# udevadm monitor --env monitor will print the received events for: UDEV - the event which udev sends out after rule processing KERNEL - the kernel uevent KERNEL[1258474859.481643] add /devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0 (pcmcia) UDEV_LOG=3 ACTION=add DEVPATH=/devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0 SUBSYSTEM=pcmcia SOCKET_NO=0 DEVICE_NO=00 MODALIAS=pcmcia:m0279c950Bf02fn00pfn00pa44EBF863pb69BF4C92pc00000000pd00000000 SEQNUM=3287 KERNEL[1258474859.481712] remove /devices/platform/serial8250/tty/ttyS0 (tty) UDEV_LOG=3 ACTION=remove DEVPATH=/devices/platform/serial8250/tty/ttyS0 SUBSYSTEM=tty SEQNUM=3288 MAJOR=4 MINOR=64 KERNEL[1258474859.481751] add /devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0/tty/ttyS0 (tty) UDEV_LOG=3 ACTION=add DEVPATH=/devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0/tty/ttyS0 SUBSYSTEM=tty SEQNUM=3289 MAJOR=4 MINOR=64 UDEV [1258474859.490625] remove /devices/platform/serial8250/tty/ttyS0 (tty) UDEV_LOG=3 ACTION=remove DEVPATH=/devices/platform/serial8250/tty/ttyS0 SUBSYSTEM=tty SEQNUM=3288 DEVNAME=/dev/ttyS0 MAJOR=4 MINOR=64 DEVLINKS=/dev/char/4:64 UDEV [1258474859.497727] add /devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0 (pcmcia) UDEV_LOG=3 ACTION=add DEVPATH=/devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0 SUBSYSTEM=pcmcia SOCKET_NO=0 DEVICE_NO=00 MODALIAS=pcmcia:m0279c950Bf02fn00pfn00pa44EBF863pb69BF4C92pc00000000pd00000000 SEQNUM=3287 UDEV [1258474867.104425] add /devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0/tty/ttyS0 (tty) UDEV_LOG=3 ACTION=add DEVPATH=/devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0/tty/ttyS0 SUBSYSTEM=tty SEQNUM=3289 ID_NM_MODEM_PROBED=1 DEVNAME=/dev/ttyS0 MAJOR=4 MINOR=64 DEVLINKS=/dev/char/4:64 KERNEL[1258474902.284729] remove /devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0/tty/ttyS0 (tty) UDEV_LOG=3 ACTION=remove DEVPATH=/devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0/tty/ttyS0 SUBSYSTEM=tty SEQNUM=3290 MAJOR=4 MINOR=64 KERNEL[1258474902.284781] add /devices/platform/serial8250/tty/ttyS0 (tty) UDEV_LOG=3 ACTION=add DEVPATH=/devices/platform/serial8250/tty/ttyS0 SUBSYSTEM=tty SEQNUM=3291 MAJOR=4 MINOR=64 KERNEL[1258474902.284822] remove /devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0 (pcmcia) UDEV_LOG=3 ACTION=remove DEVPATH=/devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0 SUBSYSTEM=pcmcia SOCKET_NO=0 DEVICE_NO=00 MODALIAS=pcmcia:m0279c950Bf02fn00pfn00pa44EBF863pb69BF4C92pc00000000pd00000000 SEQNUM=3292 UDEV [1258474902.289279] remove /devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0/tty/ttyS0 (tty) UDEV_LOG=3 ACTION=remove DEVPATH=/devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0/tty/ttyS0 SUBSYSTEM=tty SEQNUM=3290 DEVNAME=/dev/ttyS0 ID_NM_MODEM_PROBED=1 MAJOR=4 MINOR=64 DEVLINKS=/dev/char/4:64 UDEV [1258474902.293662] add /devices/platform/serial8250/tty/ttyS0 (tty) UDEV_LOG=3 ACTION=add DEVPATH=/devices/platform/serial8250/tty/ttyS0 SUBSYSTEM=tty SEQNUM=3291 DEVNAME=/dev/ttyS0 MAJOR=4 MINOR=64 DEVLINKS=/dev/char/4:64 UDEV [1258474902.297652] remove /devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0 (pcmcia) UDEV_LOG=3 ACTION=remove DEVPATH=/devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0 SUBSYSTEM=pcmcia SOCKET_NO=0 DEVICE_NO=00 MODALIAS=pcmcia:m0279c950Bf02fn00pfn00pa44EBF863pb69BF4C92pc00000000pd00000000 SEQNUM=3292 > 3) Подождав на всякий случай несколько минут, проверить наличие файла > /dev/ttyS0 (и права на него, если он всё-таки есть), после чего скопировать > весь вывод udevadm monitor. Один раз вставил. Через пару минут вытащил. Подождал. Устройство не появилось. Выводе нечто странное, как будто устройство вставляли-вытаскивали несколько раз.
А есть возможность на всякий случай посмотреть dmesg от тех ядер, с которыми это устройство работало? (В ответ на комментарий №4) > Один раз вставил. Через пару минут вытащил. > Подождал. Устройство не появилось. Что значит "не появилось"? Вообще-то файл /dev/ttyS0 должен был присутствовать почти всё время, просто при обращениях к нему, если устройство на самом деле не подключено, возвращается ошибка EIO. > Выводе нечто странное, как будто устройство вставляли-вытаскивали несколько > раз. То, что происходило с /dev/ttyS0, само по себе нормально - перед добавлением настоящего порта удаляется заглушка /devices/platform/serial8250/tty/ttyS0, после удаления вновь подсовывается заглушка. Непонятно тут другое. Сначала подключение прошло вроде бы нормально: > KERNEL[1258474859.481751] add > /devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0/tty/ttyS0 (tty) ... > UDEV [1258474867.104425] add > /devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0/tty/ttyS0 (tty) > UDEV_LOG=3 > ACTION=add > DEVPATH=/devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0/tty/ttyS0 > SUBSYSTEM=tty > SEQNUM=3289 > ID_NM_MODEM_PROBED=1 > DEVNAME=/dev/ttyS0 > MAJOR=4 > MINOR=64 > DEVLINKS=/dev/char/4:64 Это событие обрабатывалось почти 8 секунд - в это время выполнялась попытка определить тип модема вызовом /lib/udev/nm-modem-probe, в конечном итоге модем так и не был обнаружен (есть только ID_NM_MODEM_PROBED=1). Но затем через 35 секунд произошло отключение устройства: > KERNEL[1258474902.284729] remove > /devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0/tty/ttyS0 (tty) > UDEV_LOG=3 > ACTION=remove > DEVPATH=/devices/pci0000:00/0000:00:14.4/0000:08:01.0/0.0/tty/ttyS0 > SUBSYSTEM=tty > SEQNUM=3290 > MAJOR=4 > MINOR=64 Если это событие пришло до физического отключения карты, значит, отключение было вызвано чем-то другим. Можно попробовать временно убрать файл /lib/udev/rules.d/77-nm-probe-modem-capabilities.rules В этом случае не будет вызываться nm-modem-probe - возможно, этот вызов каким-то образом нарушает работу порта, а в более старых системах NetworkManager (или его компонента для работы с модемами) просто не было.
(В ответ на комментарий №5) > А есть возможность на всякий случай посмотреть dmesg от тех ядер, с которыми > это устройство работало? К сожалению нет. :-( > Что значит "не появилось"? Вообще-то файл /dev/ttyS0 должен был присутствовать > почти всё время, просто при обращениях к нему, если устройство на самом деле не > подключено, возвращается ошибка EIO. Файлов группы ttyS* просто нет. Вот если вставляю pcmcia-модем, то файл устройства появляется. И существует до тех пор, пока не вставлю проблемную карту. Как только вставляю - файл пропадает. > Это событие обрабатывалось почти 8 секунд - в это время выполнялась попытка > определить тип модема вызовом /lib/udev/nm-modem-probe, в конечном итоге модем > так и не был обнаружен (есть только ID_NM_MODEM_PROBED=1). Но затем через 35 > секунд произошло отключение устройства: Фишка в том, что данное устройство НЕ модем. Просто адаптер rs-232. Использую для консольного подключение к различным цискам и всяким другим устройствам у которых есть rs-232. > Можно попробовать временно убрать файл > > /lib/udev/rules.d/77-nm-probe-modem-capabilities.rules > > В этом случае не будет вызываться nm-modem-probe - возможно, этот вызов > каким-то образом нарушает работу порта, а в более старых системах > NetworkManager (или его компонента для работы с модемами) просто не было. Попробую, конечно. Хотя если вставлять модем, то он-то работает. nm про него ничего не говорит, но minicom с ним работает как и положено. О результатах сообщу вечером (по МСК).
Чуток дополнений (и что я сразу не догадался) После загрузки ядра [vitls@asus ~]$ date; ls -l /dev/ttyS* Срд Ноя 18 18:52:41 MSK 2009 crw-rw---- 1 root uucp 4, 64 Ноя 18 18:52 /dev/ttyS0 crw-rw---- 1 root uucp 4, 65 Ноя 18 2009 /dev/ttyS1 crw-rw---- 1 root uucp 4, 66 Ноя 18 2009 /dev/ttyS2 crw-rw---- 1 root uucp 4, 67 Ноя 18 2009 /dev/ttyS3 Вставили карту куда-то пропал ttyS0 [vitls@asus ~]$ date; ls -l /dev/ttyS* Срд Ноя 18 18:52:47 MSK 2009 crw-rw---- 1 root uucp 4, 65 Ноя 18 2009 /dev/ttyS1 crw-rw---- 1 root uucp 4, 66 Ноя 18 2009 /dev/ttyS2 crw-rw---- 1 root uucp 4, 67 Ноя 18 2009 /dev/ttyS3 Подождали 10 секунд, опять появился [vitls@asus ~]$ date; ls -l /dev/ttyS* Срд Ноя 18 18:52:58 MSK 2009 crw-rw---- 1 root uucp 4, 64 Ноя 18 18:52 /dev/ttyS0 crw-rw---- 1 root uucp 4, 65 Ноя 18 2009 /dev/ttyS1 crw-rw---- 1 root uucp 4, 66 Ноя 18 2009 /dev/ttyS2 crw-rw---- 1 root uucp 4, 67 Ноя 18 2009 /dev/ttyS3
Вот теперь понятно, что происходит. При подключении устройства сначала удаляется старый /dev/ttyS0 (заглушка для setserial), потом обрабатывается событие для добавления нового порта ttyS0, и только после завершения обработки этого события вновь создаётся файл устройства /dev/ttyS0. Но для последовательных портов, обслуживаемых драйвером serial_cs, в правилах udev (в уже упоминавшемся файле /lib/udev/rules.d/77-nm-probe-modem-capabilities.rules) прописан вызов программы /lib/udev/nm-modem-probe, выполняющей распознавание типа модема; если на самом деле модема на этом порту нет, nm-modem-probe не получает ответа и завершается по таймауту, при этом появление /dev/ttyS0 задерживается. Попробуйте дождаться появления порта и попытаться с ним поработать - возможно, на самом деле порт работает (но в случае, если устройство подключено к порту перед вставкой карты, туда пойдут AT-команды от nm-modem-probe - убедитесь, что они не вызовут неприятностей). Либо, как уже предлагалось, уберите мешающий в данном случае файл /lib/udev/rules.d/77-nm-probe-modem-capabilities.rules - тогда такой задержки быть не должно. Отключить вызов nm-modem-probe для таких портов в общем случае нельзя - существуют PCMCIA-модемы, использующие такой же чип PCMCIA->RS-232 и имеющие те же идентификаторы, в результате определить наличие модема можно только путём передачи AT-команд в порт. Можно только подправить правила на своей машине, если не требуется использовать подобные модемы совместно с NetworkManager (или другими программами, использующими результат распознавания модема через NetworkManager); хотя тут есть ещё одна проблема - файлы в /lib/udev/rules.d не считаются файлами конфигурации, и при обновлении пакета будут перезаписаны без предупреждения. Либо, если NetworkManager на самом деле не используется для настройки сети, можно просто удалить этот пакет.
(В ответ на комментарий №8) Теперь показываю самое интересное. http://yfrog.com/elminicomshot1p Устройство есть, но оно не работает как положено. Вместо обыкновенного английского текста в кодировке видит некий мусор. Для справки, подключенное устройство - Cisco 1605 Настройки порта стандартные для цисок: 9600 8N1 Мне кажется, что всё дело в [vitls@asus ~]$ dmesg | grep ttyS [ 64.765084] ttyS0: detected caps 00000700 should be 00000100 Насколько я помню, в ядре 2.6.18 такого не было.
исправлено временем. Или железа нет, или оно работает. Если не так - переоткройте.