реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Трансляция ttyUSBx Linux в COMx Windows
Kirill_Good
сообщение Mar 1 2012, 06:52
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528



Здравствуйте!

Есть GUI программа под Windows, которая работает с COM портом. В ней есть окно где можно выбрать один из присутсвующих COM портов в Windows для записи и чтения. Эта программа нужна для установки значений регистров микросхемы на отладочной плате. Данные передаются по USB. На плате размещен MK Atmel для конвертации USB в SPI(интерфейс микросхемы для записи регистров).

Есть custom плата с FTDI чипом(USB<->SPI) для работы с микросхемой из предыдущего абзаца. Для работы c ним была написана программа под Linux(libftdi, libftdispi, libusb). Но оказалось, чтобы добиться такой же функциональности как у программы(произодителя) под Windows нужно много времени. И захотелось прикрутить Windows приложение к разработанному Linux приложению.

Встала задача как это сделать. Сначала я пробовал запуск с помощью Wine, создал бы файл в /dev/ и транслировал его в среду Wine. Не получилось. Затем пришла другая идея. Запуск на виртуальной машине Windows XP GUI программы. Создание с помощью сторонней программы виртуального COM порта. Программка создает на одном конце СОМ порт на другом клиентский сокет. На хостовой Linux Ubuntu я сделал сокет сервер, который транслировал в данные в ftdi. Это все работает, но с одним ограничением. Запись в регистры проходит на ура, но чтение, возможно из за задержек сокетов, сравается. Программа на Windows ждет запрошенных данных и по какому то таймауту говорит, что возможно пробемы в соединении кабеля, хоят данные приходят.

Как поступить? Как можно ещё извратиться? Или проще написать утилиту работы с FTDI под Windows и все, вроде у FTDI есть библиотеки, но это все время.
Go to the top of the page
 
+Quote Post
Olej
сообщение Mar 1 2012, 09:31
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458



Цитата(Kirill_Good @ Mar 1 2012, 09:52) *
Встала задача как это сделать. Сначала я пробовал запуск с помощью Wine, создал бы файл в /dev/ и транслировал его в среду Wine. Не получилось. Затем пришла другая идея. Запуск на виртуальной машине Windows XP GUI программы.


сэр понимает вкус в извращениях bb-offtopic.gif

а какую конкретно виртуальную машину (tools) вы используете?
от этого может многое меняться.

мне почему-то кажется, что самыми адекватными (приближающимися к реальным) здесь были бы VirtualBox, а ещё более QEMU (хотя VirtualBox и написан на базе QEMU).
Go to the top of the page
 
+Quote Post
Kirill_Good
сообщение Mar 1 2012, 10:11
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528



Цитата(Olej @ Mar 1 2012, 13:31) *
сэр понимает вкус в извращениях bb-offtopic.gif


Хотелось быстрое решение, на реализацию вышеописанного потребовалось полдня. Я использую VirtualBox. Конфигурация сети виртуальной машины была использована и NAT и сетевой мост, т.е. dhcp использовался офисной сети, но результат от этого не менялся.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Mar 1 2012, 18:24
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(Kirill_Good @ Mar 1 2012, 10:52) *
получилось. Затем пришла другая идея. Запуск на виртуальной машине Windows XP GUI программы. Создание с помощью сторонней программы виртуального COM порта. Программка создает на одном конце СОМ порт на другом клиентский сокет. На хостовой Linux Ubuntu я сделал сокет сервер, который транслировал в данные в ftdi.


Тут QEMU так и напрашивается - он может эмулировать виртуальный последовательный порт для гостевой ОС и редиректить его на разнообразные устройства на хост-системе Linux - выбирай на любой вкус. Никакие сторонние утилиты тут не нужны.

http://wiki.qemu.org/download/qemu-doc.html
Цитата
‘-serial dev’

Redirect the virtual serial port to host character device dev.
...


там много вариантов - например вам можно в псевдо TTY устройство перенаправить, в своей программе слушать и перенаправлять данные, можно и сеть использовать если у вас уже есть готовый вариант - просто перенаправить на нужный порт локалхоста, думаю все должно получиться.

Сообщение отредактировал sasamy - Mar 1 2012, 18:32
Go to the top of the page
 
+Quote Post
Kirill_Good
сообщение Mar 2 2012, 03:36
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528



Цитата(sasamy @ Mar 1 2012, 22:24) *
Тут QEMU так и напрашивается - он может эмулировать виртуальный последовательный порт для гостевой ОС и редиректить его на разнообразные устройства на хост-системе Linux - выбирай на любой вкус. Никакие сторонние утилиты тут не нужны.

http://wiki.qemu.org/download/qemu-doc.html


там много вариантов - например вам можно в псевдо TTY устройство перенаправить, в своей программе слушать и перенаправлять данные, можно и сеть использовать если у вас уже есть готовый вариант - просто перенаправить на нужный порт локалхоста, думаю все должно получиться.


Спасибо за ответ! Я часто встречал этот QEMU, но так и руки не доходили разобраться. Если там так легко перенаправлять, то тогда это способ должен помочь. То есть если в системе /dev присутствует ttyUSBx, и я сделаю трансляцию СОМx <-> ttyUSBx, то драйвер который будет непосредственно работать с физическим устройством, это драйвер Linux, а не гостевой? В VirtualBox этот номер не проходит просто, там гипервизор мультиплексирует доступ к аппаратуре между драйвером гостевой и хостовой ситемой.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Mar 2 2012, 07:30
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(Kirill_Good @ Mar 2 2012, 07:36) *
То есть если в системе /dev присутствует ttyUSBx, и я сделаю трансляцию СОМx <-> ttyUSBx, то драйвер который будет непосредственно работать с физическим устройством, это драйвер Linux, а не гостевой? В VirtualBox этот номер не проходит просто, там гипервизор мультиплексирует доступ к аппаратуре между драйвером гостевой и хостовой ситемой.


Честно говоря не совсем понял. То что вы хотите и в VirtuaBox делается легко
http://sasamy.narod.ru/vb/scr1.png
http://sasamy.narod.ru/vb/scr2.png
http://sasamy.narod.ru/vb/scr3.png

я думал вам поток нужно еще в своей программе обрабатывать. В этом примере нет аппаратных портов - это ноутбук, ttyUSB0 - преобразователь usb<->serial, как видите гипертерминал вполне нормально работает с подключенной платой без каких-либо драйверов в гостевой системе для pl-2303

Сообщение отредактировал sasamy - Mar 2 2012, 07:54
Go to the top of the page
 
+Quote Post
Kirill_Good
сообщение Mar 2 2012, 09:55
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528



Цитата(sasamy @ Mar 2 2012, 11:30) *
Честно говоря не совсем понял. То что вы хотите и в VirtuaBox делается легко
http://sasamy.narod.ru/vb/scr1.png
http://sasamy.narod.ru/vb/scr2.png
http://sasamy.narod.ru/vb/scr3.png

я думал вам поток нужно еще в своей программе обрабатывать. В этом примере нет аппаратных портов - это ноутбук, ttyUSB0 - преобразователь usb<->serial, как видите гипертерминал вполне нормально работает с подключенной платой без каких-либо драйверов в гостевой системе для pl-2303


Спасибо! Это то, что нужно. Я невнимательно изучил вкладку COM порты.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th July 2025 - 03:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01421 секунд с 7
ELECTRONIX ©2004-2016