Bug 22305 - Не работает pcmcia rs-232
Summary: Не работает pcmcia rs-232
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: kernel-image-std-def (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Vitaly Chikunov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-11-16 19:02 MSK by Vitaly Lopatin
Modified: 2018-06-25 08:17 MSK (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vitaly Lopatin 2009-11-16 19:02:31 MSK
Имеется 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 не создаётся.
Comment 1 Sergey Vlasov 2009-11-16 19:17:57 MSK
(В ответ на комментарий №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 с нестандартными устройствами.
Comment 2 Vitaly Lopatin 2009-11-16 20:55:01 MSK
(В ответ на комментарий №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
Comment 3 Sergey Vlasov 2009-11-16 23:55:15 MSK
С точки зрения ядра устройство ttyS0 есть; если при этом файл /dev/ttyS0 отсутствует - это, вероятно, проблемы udev.  Можно проверить, что происходит, следующим образом:

1) До подключения карты запустить:

  /sbin/udevadm monitor --env

(писать в файл без буферизации оно, похоже, не умеет, поэтому нужно либо потом забирать результат из scrollback в терминале, либо предварительно запустить script monitor.log для сохранения вывода сразу в файл).

2) Подключить карту - udevadm monitor выведет информацию о событиях, обрабатываемых udev.

3) Подождав на всякий случай несколько минут, проверить наличие файла /dev/ttyS0 (и права на него, если он всё-таки есть), после чего скопировать весь вывод udevadm monitor.
Comment 4 Vitaly Lopatin 2009-11-17 19:24:08 MSK
(В ответ на комментарий №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.

Один раз вставил. Через пару минут вытащил.
Подождал. Устройство не появилось.
Выводе нечто странное, как будто устройство вставляли-вытаскивали несколько раз.
Comment 5 Sergey Vlasov 2009-11-17 22:03:25 MSK
А есть возможность на всякий случай посмотреть 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 (или его компонента для работы с модемами) просто не было.
Comment 6 Vitaly Lopatin 2009-11-18 07:47:48 MSK
(В ответ на комментарий №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 с ним работает как и положено.
О результатах сообщу вечером (по МСК).
Comment 7 Vitaly Lopatin 2009-11-18 18:54:59 MSK
Чуток дополнений (и что я сразу не догадался)

После загрузки ядра
[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
Comment 8 Sergey Vlasov 2009-11-18 20:23:03 MSK
Вот теперь понятно, что происходит. При подключении устройства сначала удаляется старый /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 на самом деле не используется для настройки сети, можно просто удалить этот пакет.
Comment 9 Vitaly Lopatin 2009-11-20 18:55:36 MSK
(В ответ на комментарий №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 такого не было.
Comment 10 Anton Farygin 2018-06-25 08:17:53 MSK
исправлено временем. Или железа нет, или оно работает. Если не так - переоткройте.