2013-04-08 3 views
4

Я пытаюсь научиться писать код C, который будет считываться из последовательного порта в Linux. Я нашел то, что кажется хорошим учебником here.Подключение последовательного порта между хостом и гостем с помощью Virtualbox

Я хочу, чтобы иметь возможность протестировать этот код, поэтому я думаю, что мне нужен либо последовательный порт, либо способ записи на последовательный порт, пока читается код сверху.

Я запускаю Ubuntu 10.04 как виртуальную машину на своем Mac с помощью виртуального бокса. Моя идея состояла в том, чтобы настроить виртуальное последовательное соединение и написать от хоста к гостю. Надеюсь, что-то так же просто, как cat "Hello World" > /tmp/fake_serial в хост-терминале, и для этого читать программу по ссылке выше.

Возможно ли это? Я попытался добавить последовательный порт с помощью виртуального окна, и когда я попытаюсь выполнить приведенную выше команду, я получаю сообщение об ошибке, что я не могу записать в сокет.

Второй вариант, о котором я думал, использовал в гостевой ОС что-то вроде minicom, чтобы подключиться, чтобы сказать /dev/ttyS1, и писать сообщения для моего кода для чтения в одно и то же время. Опять же, если предположить, что скорость передачи и другие настройки в порядке, возможно ли это?

У меня нет большого опыта работы с последовательными портами, поэтому я буду благодарен за любые предложения по поводу наилучшего способа сделать это. Заранее спасибо.

ответ

5

Чтобы получить эту работу, я просто добавил другую виртуальную машину Ubuntu на VirtualBox и соединил два вместе через виртуальный последовательный порт. Моя основная, оригинальная VM, которую я использую для большого развития, будет называться VM1. Новая виртуальная машина с небольшим жестким диском, который будет использоваться только для отправки сообщений в VM1, будет называться VM2. Это и Ubuntu 10.04 VM.

В VirtualBox выберите Настройки для VM1, перейдите к портам, а также изменить параметры следующим образом: VM1 Settings

Теперь переходим к VM2 и выберите Настройки, порты, а затем изменить следующим образом:

VM2 Settings

Теперь сначала вам нужно запустить VM1. Когда это загрузится, загрузите VM2. Теперь вы можете открыть терминал в VM1 и ввести screen /dev/ttyS0 38400 (возможно, вам нужно будет запустить sudo apt-get install screen, прежде чем это сработает). Затем перейдите к VM2, откройте терминал и введите echo "Hello" > /dev/ttyS0.

Вы должны увидеть Hello в терминале, открытом в VM1. Когда вы закончите запуск экрана, нажмите ctrl-a k, чтобы убить его, иначе, если вы попытаетесь сделать другие вещи с помощью последовательного порта, вы можете получить сообщение об ошибке, говорящее, что порт занят.

+3

Спасибо. Это было именно то, что я искал: D У меня есть только один вопрос: есть ли способ использовать только одну виртуальную машину и использовать главный компьютер для записи в трубу? – webNeat

+0

Это работает для меня до тех пор, пока я выдаю sudo с помощью команды экрана: «sudo screen/dev/ttyS0 38400» –

1

Когда мне приходилось проходить тестирование последовательного порта с моей реальной виртуальной машины, я закончил тестирование типа «loop back». Я взял два USB-Serial converters и RS232 F-F adaptor и подключил свою машину к себе. Затем в VirtualBox в разделе «Настройки-> USB» вы можете маршрутизировать один из двух USB-последовательных преобразователей, которые будут «принадлежать» вашим VirtualBox.

Как только вы подключите преобразователи, вы зарегистрируетесь на Mac и один с компьютером «Ubuntu», тогда вы можете выполнять последовательную связь как обычно между двумя машинами.

Вы также можете использовать emulate a virtual serial port, используя pty (устройство псевдо-телетайпа), но я не уверен в этом, так как я считаю, что способность делать это была заблокирована в новых ядрах.

+0

Спасибо за предложение, я не имел необходимые адаптеры, к сожалению, так придумали с обходом себя. – James

1

Я столкнулся с аналогичной ситуацией с гостевым QNX, используя VirtualBox 5.0.10 на хосте Ubuntu 14.04.

Мое решение кажется достаточно общим для применения к вышеупомянутому случаю.

Я настроил гостевой VM таким же образом, что установка Kells1986 его VM1:

Под "Последовательные порты" закладка/"Port1":

  • проверка "Enable Serial Port"
  • набор "Номер порта" на "COM1"
  • набор "IRQ" до "4"
  • набор "/ O Port I" к "0x3f8"
  • набор "Port Mode" в «Host Труба "
  • снимите флажок« Подключиться к существующей трубе/розетке »
  • установить« Путь/Адрес »на доступный путь к файловой системе (например, "/ Главная/safayet/vmSerialPipe")

Согласно VirtualBox manual:

Вы можете сказать, VirtualBox подключить виртуальный последовательный порт программного обеспечения конвейеру на хосте. ... На компьютере Mac, Linux или Solaris используется локальный доменный сокет ... В Linux существуют различные инструменты, которые могут подключаться к локальному доменному соку или создавать его в режиме сервера. Самый гибкий инструмент - socat и доступен как часть многих дистрибутивов.

A domain socket является IPC mechanism on UNIX systems похожим на трубу.

Я подключен к «трубе» конца виртуального последовательного порта на хосте Ubuntu, используя socat команду:

socat - UNIX-CONNECT:/home/safayet/vmSerialPipe 
+0

Как подключиться к гостевому последовательному порту с хоста (Linux) - именно то, что я искал. – CivFan

Смежные вопросы