LINUX.ORG.RU

как сделать эмуляцию serial порта на usb-устройстве?


1

1

В windows'е для определенного устройства есть специальный драйвер. Как мне его воспроизвести на linux mint 15? http://dumpz.org/753081/ - вот код драйвера.



Последнее исправление: ksenofor (всего исправлений: 1)

Ответ на: комментарий от ziemin

Написать драйвер. Что за устройство-то?

Самодельное - дали поюзать, описали протокол взаимодействия по Serial-порту, дали драйвер под винду..)

ksenofor
() автор топика
Ответ на: комментарий от ziemin

Как драйвер под венду называется?

mchpcdc.inf

ksenofor
() автор топика

Cмотри драйвер usbserial.

anonymous
()
Ответ на: комментарий от ksenofor

Установи пакет tinyserial, запускай com /dev/ttyACM0 [скорость]. Или тупо screen используй — он-то у всех установлен.

А еще можно при помощи setserial или minicom настроить "порт" и фигачить посредством echo туда всякую дребедень, считывая tailf'ом.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Да, конечно. Я бы даже не начинал разбираться, если б протокола не было )))

ksenofor
() автор топика
Ответ на: комментарий от Eddy_Em

В общем, похоже, ТС собирается сделать «то, не знаю, что». Трудно ему придется.

Для того тему и завел - спросить совета. tinyserial в mint'е нету. $ /dev/ttyACM0 не появляется. С setserial и minicom не разобрался. Да. Трудно.

ksenofor
() автор топика
Ответ на: комментарий от ksenofor

Как страшно жить.

Вынимаешь железку, вставляешь, смотришь dmesg что там определилось. В девайсах у тебя появятся ttyACM0 или ttyU0. На него и натравливаешь cu или minicom.

Par example: cu -s 9600 -l /dev/ttyU0

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от ksenofor

Либо эта самоделка глючит либо драйвер её не опознаёт.

Попробуй lsusb, может он его покажет. Но то, что в dmesg его не видно это плохой признак.

Кабель к нему тоже самопальный идёт?

ziemin ★★
()
Ответ на: комментарий от ziemin

Кабель к нему тоже самопальный идёт?

Покупной обычный Mini usb - Crc-драйвер успешно ищется и встает на винде - только-что попробовал.

ksenofor
() автор топика
Ответ на: комментарий от ksenofor

/dev/ttyACM0 не появляется

Ну ты как маленький прямо! Запусти udevadm monitor и воткни железяку. Если по выхлопу удева не поймешь, то dmesg тебе, возможно, что-то подскажет.

А если это не CDC, а хитрожопая вантузная НĒХ, то придется при помощи libusb что-нибудь пилить.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от ksenofor

dmesg что говорит? А lsusb? А udevadm monitor при втыкании железяки?

Если все молчат, производитель железки — козел.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

libusb что-нибудь пилить.

До неё только дошел - уже завтра буду разбираться. Через pyusb делаю:

>>> import usb

In [35]: usb.core.find(bDeviceClass=1)

In [36]: usb.core.find(bDeviceClass=0)
Out[36]: <usb.core.Device at 0x1728190>

In [37]: usb.core.find(bDeviceClass=3)

In [38]: usb.core.find(bDeviceClass=2)

In [39]: usb.core.find(bDeviceClass=2)
Out[39]: <usb.core.Device at 0x1728450>

In [40]: dev = usb.core.find(bDeviceClass=2)

путем исключения после втыкания и вытыкания usb-девайсов, становится понятно, что что-то там видно на usb-порте... вопрос тепрь, как с этим «что-то» работать, через вот эту либу.

ksenofor
() автор топика
Ответ на: комментарий от ksenofor

после втыкания и вытыкания usb-девайсов, становится понятно, что что-то там видно на usb-порте...

Посмотри через lsusb, что за VID и PID у железяки. А еще глянь, какое устройство ей соответствует (/dev/bus/usb/[BUS]/[DEV]) и попробуй его открыть в обычном последовательном терминале. Вдруг случится чудо? Тогда просто правило для удева напишешь для этих VID и PID, чтобы симлинк делал.

Eddy_Em ☆☆☆☆☆
()

Есть нормальные железные эмуляшки от старых нокиа. Банка пива.
Правда получается не com1, com2 и с програматорами правильно не сростется.
Если конечно для этого нужно. rts, cts и тп.

hbars ★★★★★
()

Поднял задницу - нашел.
Bus 005 Device 002: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Оно.

hbars ★★★★★
()

вот код драйвера

USB CDC ACM Vendor and Product ID Definitions VID 04D8 PID 000A

Гуглишь «linux VID 04D8 PID 000A» и находишь что стоит его один раз воткнуть в Ubuntu 10.04 - оно начинает рабоать везде. Так что выкинь нахер свой минт и ставь убунту.

http://www.mail-archive.com/linux-usb@vger.kernel.org/msg05638.html

I did not change anything. No patches, nothing. I just loaded «usbserial», «cdc_acm» and «ftdi_sio», plugged in the device and it worked. I added the modules to /etc/modules and the board gets ready with the RPi boot. Perfect! The only difference is, that I plugged it once into my notebook with Ubuntu 10.04 (2.6.+).

Волшебный дистрибутив - сам пользуюсь :)

anonymous
()
Ответ на: комментарий от anonymous

Возможно ТС-у просто нужно вручную сделать:

$ modprobe usbserial $ modprobe cdc_acm

и воткнуть девайс. Возможно тогда оно подцепится в Mint.

kuzulis ★★
()
Ответ на: комментарий от Ttt

Главное — чтобы cdc_acm был:

usb_storage            47385  0 
usbhid                 37036  0 
hid                    85974  2 hid_generic,usbhid
scsi_mod              133434  4 uas,usb_storage,libata,sd_mod
usbcore               150440  8 uas,uhci_hcd,uvcvideo,usb_storage,ehci_hcd,usbhid,cdc_acm,xhci_hcd
usb_common               955  1 usbcore

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от vasily_pupkin

/me разрыдался

Ок. Вы то, без сомнения, родились с полным пониманием как работает компьютер с периферией на низком уровне - у вас это знание было прошито в генах. Я не обладал таким даром, поэтому прошу, рыдайте дальше.

ksenofor
() автор топика
Ответ на: комментарий от Eddy_Em

Запусти udevadm monitor и воткни железяку.

При втыкании ничего не происходит, но...

http://dumpz.org/754067/ - вот что происходит, когда кликаю по кнопкам на железяке. При чем он Всегда, через какое-то время (довольно быстрое), ставит на remove..

Что с этим можно дальше делать?

ksenofor
() автор топика
Ответ на: комментарий от ksenofor

Нормально: устройство появляется. Просто, там, наверное, VID/PID кривые: вот умолчальные правила и не срабатывают. Добавь правило для udev'а, которое будет симлинк делать.

А remove там происходит, похоже, из-за того, что программист был рукожопый: без коннекта устройство откидывается в спячку. В общем, лучший вариант  — сменить прошивку железяки. Если это сложно, то написать простую программульку, которая будет открывать устройство и постоянно с ним поддерживать контакт (через libusb).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

«В общем, лучший вариант — сменить прошивку железяки.» - а что именно в прошивке требуется поменять? Я могу прийти к разработчику, он же в неё и зашивал программу - что мне ему сказать, чтоб поправил? :)

ksenofor
() автор топика
Ответ на: комментарий от ksenofor

а что именно в прошивке требуется поменять?

VID/PID, протоколы, класс устройства:

...
  0x02,   /* bNumInterfaces: 2 interface */
...
  0x06,   /* bmCapabilities */
...
  0x02,   /* bNumEndpoints: Two endpoints used */
  0x0A,   /* bInterfaceClass: CDC */

и т.д.

В интернете полным-полно примеров правильной настройки всех этих дескрипторов для нормальной CDC.

Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.