VirtualBox это виртуальная машина для архитектуры x86, разработанная фирмой Innotek и поддерживаемая Oracle. Существует две версии: полная сборка VirtualBox с проприетарной лицензией и редакция с открытым исходным кодом VirtualBox Open Source Edition (GPL).
Она проще в конфигурировании, чем QEMU и чуть медленнее, чем VMware.
Примечание: Если вы испытываете какие-либо проблемы с ‘захватом’ курсора мыши в окне виртуальной машины Virtualbox с запущенной в нём ROS, то перейдите к вкладке «Машина» и выберите там «Отключить интеграцию мыши», затем вновь щёлкните по окну с запущенной сессией ВМ, теперь всё должно работать.
Содержание
- 1 Запуск ReactOS Live CD
- 2 Получение отладочных сообщений
- 2.1 Windows
- 2.1.1 Использование VMwareGateway
- 2.2 Linux
- 2.2.1 Используя minicom
- 2.2.1.1 Настройка последовательного порта в minicom
- 2.2.1.2 Перенаправление в файл (в Linux-хосте)
- 2.2.2 Используя socat
- 2.2.2.1 Только для просмотра
- 2.2.2.2 В интерактивном окне (т.е. для получения обратной трассировки)
- 2.2.1 Используя minicom
- 2.3 Вывод в последовательный порт при использовании com0com
- 2.1 Windows
- 3 Установка дополнений гостевой ОС
- 4 Настройка аудио
- 4.1 Известные проблемы
- 5 Отладчик, встроенный в VirtualBox (низкоуровневый отладчик)
- 5.1 Активация отладчика
- 5.2 Использование отладчика
- 6 Дополнительная информация
Запуск ReactOS Live CD
Далее следует инструкция по созданию совместимой с ReactOS виртуальной машины в среде VirtualBox с последующим монтированием LiveCD в неё. Для подготовки инструкции использовалась среда Virtualbox версии 4.2.14 r86644 запущенная в Windows 7 x64, однако для других операционных систем и их версий процесс подготовки виртуальной машины, скорее всего, будет аналогичен.
- Загрузите самую свежую версию образа диска LiveCD с http://www.reactos.org/download
- Запустите VirtualBox.
- Нажмите на кнопку ‘Создать’.
- Введите имя виртуальной машины и выберите тип машины ‘Microsoft Windows’, версия — ‘Windows XP’. Нажмите Next.
- Укажите объём оперативной памяти, которое вы хотите выделить виртуальной машине. Необходимый минимум — 64 Мб, однако рекомендуется выделять 256 Мб и более.
- Всегда добавляйте виртуальный жёсткий диск, даже если система будет запускаться с CD. Для загрузки системы необходим жёсткий диск. Вы можете создать новый виртуальный жёсткий диск, или же воспользоваться созданным ранее. Нажмите Создать для создания новой ВМ.
- Выделите созданную ВМ и нажмите Настроить.
- Перейдите на вкладку ‘Носители’ и выберите диск ‘Пусто’ в списке устройств IDE-контроллера.
- В панели Атрибуты выберите файл образа Live CD и поставьте флажок в поле ‘Живой CD/DVD’.
- Нажмите OK. Всё готово для загрузки ReactOS.
Если вы не можете выбрать в ReactOS правильное разрешение экрана, то прочтите эту инструкцию, хотя речь в ней идёт о Windows 8, однако всё сказанное там справедливо и в отношении ReactOS.
Получение отладочных сообщений
Windows
Необходимо предпринять следующие действия:
1) Настроить последовательный порт в VirtualBox.
Разумеется, существуют и другие виртуальные машины, но все они большей или меньшей степени функционируют аналогично VirtualBox и тоже могут выводить отладочные данные в COM-порт.
- Скачайте VirtualBox, если вы этого ещё не сделали.
- Вполне очевидно, что для получения отладочных данных от ReactOS, вам также потребуется отладочная сборка ReactOS. Для отладки необходимо использовать ТОЛЬКО отладочную сборку. Кроме того, вам потребуется 7-Zip для распаковки ISO-образа ReactOS из файла .7z.
- Когда откроется окно VirtualBox, нажмите на пункт «Свойства» и выберите пункт «COM-порты».
Задайте Режим порта = Хост-канал, пометьте галочкой пункт Создать канал, путь к порту: \.piperos_pipe.
ВАЖНО: Не изменяйте порт «COM1», который появляется в ниспадающем списке. Оставьте его как COM1.
2) скачайте и запустите PuTTY или любой другой понравившийся вам терминал последовательного порта (например, HyperTerminal,… ).
Эта программа потребуется для создания протоколов отладки. PuTTY может прослушивать COM-порт и выводить данные с него в файл. Если вы не знаете, какой именно вариант поставки PuTTY вам нужен, то скачивайте файл putty.exe «For Windows on Intel x86» («Для Windows на архитектуре Intel x86»). Программа не нуждается в установке, просто скачайте её и запомните папку, где вы разместили скачанный файл. В Windows Vista программа должна быть запущена от имени Администратора, как и любое другое приложение, работающее с именованными каналами.
- В древовидном списке в левой части окна выберите Session. В правой части окна под строчкой Connection Type («Тип соединения»), выберите Serial («Последовательное»). Под строкой Serial Line («Путь к последовательному соединению») введите \.piperos_pipe. Под надписью Speed («Скорость передачи данных»), введите «115200». Если вам необходимо производить запись в протокол, то перейдите в древовидный список слева и выберите подпункт Logging пункта «Session». Под строчкой Session Logging («Протоколирование данных сессии», выберите All session output («Все данные сессии»).
- В строке Log file name («Имя файла протокола») задаётся имя и размещение файла протокола отладки. Для смены папки с протоколом воспользуйтесь кнопкой «Browse» («Обзор»), однако обязательно запомните имя и путь к папке, куда вы его сохранили!
- Возвратитесь назад к древовидному списку в левой части окна и выберите подпункт Serial («Последовательное») пункта Connection («Соединение»). Установите параметр Flow Control («Контроль потока») в значение None («Нет»). PuTTY теперь настроена. Обратите также внимание, что в главном окне PuTTY вы можете сохранять и загружать созданные вами конфигурации программы, что значительно упрощает работу с ней.
- Итак, после того, как вы выбрали тип соединения по последовательному порту, задали скорость порта 115200 бод, а также ввели путь к именованному каналу (\.piperos_pipe), можете начинать отладку. Разумеется, вместо ros_pipe вы можете использовать любое другое уникальное имя, только не забывайте пользоваться схемой именования \.pipe[имя_канала].
- Нажмите на кнопку «Open» («Открыть») в нижней части окна PuTTY, это приведёт к активации встроенных в PuTTY функций создания протоколов отладки, что выразится в открытии чёрного окна с мигающим зелёным курсором. В это окно будет выводиться большое количество текстовых сообщений во время отладки. После окончания работы с ReactOS, вы можете открыть файл с протоколом отладки, кроме того, можно просто скопировать в буфер обмена всё содержимое чёрного окна PuTTY. Когда вы выключаете виртуальную машину, PuTTY переходит в неактивное состояние и выводит сообщение об ошибке, однако, когда вы перезапустите виртуальную машину, вы можете подключиться к сессии заново, для этого вам нужно лишь нажать правой кнопкой на заголовке окна PuTTY и выбрать пункт меню Restart session (Перезапустить сессию).
- Сначала запустите ReactOS в виртуальной машине, выберите загрузку в режиме отладки (DEBUG MODE), затем откройте PuTTY и смотрите на протокол отладки.
-
Выбор режима отладки
-
ReactOS запущена + идёт вывод в PuTTY
Имеется предположение о том, что при передаче большого количества данных через именованные каналы может происходить повреждение выводимых в них данных. Если при отладке вы заметили такое поведение системы, то существует ещё один способ получения отладочного протокола:
Com0com: Это мост между VirtualBox и PuTTY. Эта программа даёт вам возможность создать несколько пар виртуальных COM-портов, однако вам потребуется лишь одна пара (например Virtual Port Pair 0). Скачайте и установите com0com. Дополнительную информацию вы найдёте в статье com0com. В окне настройки программы вы увидите имена виртуальных последовательных портов (по умолчанию: «CNCA0» и «CNCB0»). Проверьте, правильно ли установлен драйвер com0com (например, при помощи Диспетчера устройств). Запустите виртуальную машину. В VirtualBox, пререйдите в «Свойства», «COM-порты», установите в списке «Режим порта» значение «Хост-устройство» (не «Хост-канал»). Затем, в поле Путь к порту/файлу введите «\.CNCA0». Далее, запустите Putty; переставьте переключатель в значение «Serial», а в поле «Serial line» введите «CNCB0», и нажмите на кнопку «open». Как уже упоминалось ранее, должно появиться чёрное окно, и, когда вы запустите ReactOS в отладочном режиме, в этом окне будет появляться текст, предмтавляющий собой протокол отладки.
ВАЖНО: В 64-х битных системах Windows Vista, а также в более новых версиях ОС Windows для 64-битной архитектуры вы должны использовать драйвер com0com, имеющий цифровую подпись.
Использование VMwareGateway
Необходимо загрузить приложение VMwareGateway. В качестве службы его можно запустить воспользовавшись ключом командной строки /r (в Windows Vista вы должны вначале запустить CMD с правами Администратора системы). Загрузить сборку для x86/x64 можно здесь, при её использовании в Vista/Win7 не потребуется запускать VirtualBox с полномочиями Администратора. Далее, необходимо запустить службу, используя команду SC:
sc start vmwaregateway
В случае необходимости, отключите блокировку программы сетевым экраном. И наконец, используйте свой любимый telnet-клиент для подключения к localhost на порт 567.
Для настройки виртуальной машины, установите её в режим Host Pipe с следующим адресом канала:
\.pipevmwaredebug
Убедитесь, что не установили галочку Create Pipe. VMwareGateway уже создал канал. Данные отладки должны появиться в вашем telnet-клиенте PuttyTel.
Linux
- Установите пакет VirtualBox, способ установки зависит от используемого вами дистрибутива
В Debian или Ubuntu:
sudo apt-get install virtualbox
- Разумеется для отладки ReactOS вам также потребуется отладочная сборка ReactOS. ( Необходимо использовать ТОЛЬКО отдалочные сборки. Кроме того, вам потребуется 7-Zip для извлечения файла образа в формате ISO из архива 7z.
- Настройте последовательный порт в VirtualBox.
Произведите настройку VirtualBox в соответствии с картинкой чуть ниже.
-
- После открытия окна VirtualBox, нажмите на вкладку Свойства. Щёлкните на COM-порты.
В раскрывающемся списке Режим порта выберите Хост-канал, поставьте галочку около параметра Создать канал, параметр Путь к порту/файлу: /tmp/ReactOS-Debug.pipe
ВАЖНО: Не меняйте номер порта с «COM1» на что-либо другое. Оставьте его как COM1.
Используя minicom
Это краткое руководство по использованию терминального приложения minicom. Прежде всего установите его, набрав:
sudo apt-get install minicom
Настройка последовательного порта в minicom
- Выполнив команду «sudo minicom -s» вы сможете задать порт и сохранить файл конфигурации приложения (dfl = default)
- Выберите «Configure serial ports«. Назовите устройство unix#pipe_path где «pipe_path» это файл вроде /tmp/ReactOS-Debug.pipe, который будет выполнять роль канала между виртуальной машиной и minicom.
Убедитесь, что pipe_path задан абсолютно одинаково и в minicom, и в VirtualBox.
- Сохраните файл конфигурации при помощи Save config (dfl)
- Выход по Exit
- теперь, после запуска ВМ, введите «minicom» без sudo для запуска minicom от имени пользователя
Перенаправление в файл (в Linux-хосте)
Запустив minicom, нажмите Ctrl-A, а затем L. Введите имя файла, в который будут записываться сообщения.
Используя socat
Только для просмотра
socat unix-client:pipe_path stdout
Также вы можете выполнить это:
socat unix-client:pipe_path stdio
Замените «pipe_path» на путь к каналу, созданному вами в VirtualBox (т.е. «/tmp/ReactOS-Debug.pipe»).
В том случае, если вы хотите перенаправить вывод socat в файл, воспользуйтесь следующей командой:
socat -u unix-client:pipe_path stdio OPEN:log_file_name,creat,trunc
Где log_file_name это файл, в который VirtualBox должен производить вывод данных из последовательного порта.
Если в ReactOS произойдёт критический сбой, то вы всё равно сможете вводить команды в окне VirtualBox — т.е. внутри отладочной сессии. Вы увидите вводимые и выводимые данные в окне консоли, в котором запущен socat.
В интерактивном окне (т.е. для получения обратной трассировки)
В терминальном окне/вкладке выполните:
$socat UNIX-CONNECT:/tmp/ReactOS-Debug.pipe PTY,link=/tmp/vbox_term
А в другом терминальном окне/вкладке выполните:
$screen /tmp/vbox_term
Вывод в последовательный порт при использовании com0com
Установите и настройте Com0com в соответствии с руководством по com0com.
Активируйте первый последовательный порт на вашей машине ReactOS. Используйте номер порта «COM1», режим «хост-устройство» и путь к порту «COM4» или другой, в зависимости от того, какой виртуальный порт вы создали первым в comocom.
Подсоедините ваш терминальный клиент ко второму виртуальному порту и запустите VirtualBox.
Установка дополнений гостевой ОС
В окне виртуальной машины зайдите в меню «Устройства» — «Установить дополнения гостевой ОС». CD с дополнениями будет смонтирован в CD-привод, откройте его, запустите файл VBoxWindowsAdditions.exe и следуйте инструкциям программы установки.
ПРИМЕЧАНИЕ: Чтобы установить поддержку Direct3D (Direct3D Support) загрузите ReactOS в безопасном режиме, выбрав в Freeloader пункт ReactOS, нажав F8 и выбрав Safe Mode.
Настройка аудио
ReactOS имеет ограниченную поддержку звука еще с версии 0.3.9, но рекомендуется проверять звук в транке.
В настройках машины VirtualBox, разрешите аудио и задайте следующие настройки:
- Аудиодрайвер: Windows DirectSound
- Аудио-контроллер: ICH AC97
После установки ReactOS:
- Загрузите драйвер Intel AC 97 при помощи Менеджера приложений ReactOS
- Извлеките файлы в C:ReactOS
- Перезапустите виртуальную машину
- Установите и запустите ваш любимый аудиопроигрыватель или мультимедиа-приложение (т.е. Winamp, VLC, MPlayer)
- Откройте аудиофайл и включите режим воспроизведения
Известные проблемы
- Драйвер AC97 поддерживает только аудиопоток PCM в диапазоне 8000-44.100Кгц, 16Бит и 2 канала.
- Конвертирование частоты дискретизации пока не поддерживается
- При смене частоты дискретизации аудиопотока могут возникнуть проблемы в работе драйвера.
Отладчик, встроенный в VirtualBox (низкоуровневый отладчик)
Встроенный отладчик имеется не только в QEMU, свой отладчик есть и в VirtualBox. Для более детального изучения этого отладчика прочтите главу «12.1.3. The built-in VM debugger» файла руководства пользователя VirtualBox.
Активация отладчика
Отладчик ВМ доступен во всех версиях VirtualBox, однако по умолчанию он отключен, поскольку зачастую простому пользователю он практически не нужен. Существует два способа доступа к нему:
- Консольное окно отладчика, отображаемое параллельно с основным окном ВМ
- При помощи протокола telnet на порту 5000
Сам по себе отладчик может быть активирован тремя способами:
- Непосредственным запуском ВМ из командной строки VirtualBox —startvm с дополнительными аргументами —dbg,—debug, или —debug-command-line. Для дополнительных сведений прочтите справочные материалы по использованию VirtualBox.
- Установкой переменной окружения VBOX_GUI_DBG_ENABLED или VBOX_GUI_DBG_AUTO_SHOW в значение true перед запуском процесса VirtualBox. Установка этих переменных (проверяется лишь их наличие) будет принята во внимание и использована даже тогда, когда уже запущен самый первый процесс VirtualBox — окно выбора виртуальной машины. Во всех впоследствии запущенных ВМ отладчик будет активирован изначально.
- Установка параметров GUI/Dbg/Enabled в true в файле конфигурации перед запуском ВМ. Эти параметры можно установить как глобально, так и для каждой ВМ в отдельности. Если нужно установить в отдельности для каждой ВМ — измените соответствующий машине файл .vbox, он представляет собой файл настроек виртуальной машины в формате XML.
Все эти параметры находятся:
- X:Users%username%.VirtualBoxVirtualBox.xml — для глобальной настройки
Путь внутри XML: VirtualBox/Global/ExtraData
- …%VM_NAME%.vbox — для локальной настройки
Путь внутри XML: VirtualBox/Machine/ExtraData
Затем внутри вышеупомянутых путей в XML добавьте ещё один элемент: <ExtraDataItem name=»GUI/Dbg/Enabled» value=»true»/>
В результате в VirtualBox появится новый пункт меню ‘Debug’. В этом меню пользователь может получить доступ к консоли отладчика.
Примечание: возможно при таком способе активации отладчика потребуется перезапуск операционной системы.
Использование отладчика
Синтаксис команд отладчика ВМ является некоторым подобием отладчиков от Microsoft и IBM, используемых в DOS, OS/2 и Windows. Пользователи, ранее работавшие с symdeb, CodeView, или отладчиком ядра OS/2, смогут без малейших проблем начать работать и с отладчиком ВМ VirtualBox. Наиболее важной и нужной из всех команд является команда ‘help’.
Для получения дополнительных сведений обратитесь к руководству по отладке VirtualBox.
Дополнительная информация
- Перенос файлов из основной ОС на виртуальный жёсткий диск
ReactOS | ||
---|---|---|
Доклады | ||
О ReactOS • ARWINSS • ЧеЗа | ||
Информация | Новости | Выпуски новостей • Переводы блогов • Новости проекта • Видео • ReactOS на Хабре • USB от Вадима Галянта |
Разработка | Руководство по программированию • Отсутствующая функциональность • Ветви разработки • Компоненты системы • ReactOS и Wine • План работ • Roadmap ядра by Vgal • Разработчики • Совместимость с dll Windows • Наиболее значимые изменения за год • Используемые проекты • Google Summer of Code • Известные проблемы | |
Порты | AMD64 • ARM • Xbox • PowerPC | |
Компоненты | Файловые системы • Режим совместимости • Отчеты об ошибках • Печать • USB • Ядро | |
Загрузчик | Восстановление MBR • Загрузка из GRUB • Параметры загрузки | |
Прочее | ARWINSS • Приложения в ReactOS • Оформление ReactOS • Координаторы • «Пасхальные яйца» • Монетизация | |
Другое | Типы ядер • FreeWin95 | |
Помощь | ||
RAM-диск ReactOS | по PXE • с жесткого диска | |
Разработка | Стиль написания кода • Стандарты RC-файлов • Работа с документацией • Венгерская нотация • GNU Indent • [ Subversion : ветви • слияние • использование TortoiseSVN ] • Основы перевода • Отправка патчей | |
Репорты | Отладка в VirtualBox • Отладка на экран • Добавление программы в менеджер приложений • Отправка отчетов | |
Отладка | Com0com • GDB • Kdbg • Rossym.gdb • Roswin.gdb • WinDBG • Руководство по WinDBG • Включение трассировки ядра • Коды DPRINT • Удалённый отладчик ReactOS | |
Сборка | CMake • RBuild • Файлы RBuild • Автоматическое копирование файлов • Сборка MINGW-w64 • Сборка модулей • Среда сборки | |
Тестирование | VirtualBox • VMware • QEMU • Hyper-V • Необходимый объём диска • Перенос файлов на виртуальный диск • Установка ReactOS • Установка драйверов | |
Сеть | Общие папки • Samba • NFS | |
Игры | Установка DirectPlay | |
Обновление ReactOS • Загрузочная флешка • Чем можно помочь проекту • Создание нового пользователя • Звук и сеть в VirtualBox • Съемка и публикация видео • IRC-канал • Сторонние компоненты • FAQ • ReactOS как рабочая станция • ReactOS и UEFI | ||
Обзоры | Оболочка • NTVDM • WOW • Community Edition • История сайта • ReactOS Server • Криптография • ПО времен XP |
The specifics vary depending on the type of physical host on which VirtualBox is running.
Windows |
Windows |
The data gets transmitted through a named pipe. The pipe name needs to be registered with the following format |
macOS |
macOS |
The connection is made through a local domain socket. Using tmp as the socket filename is a common practice that provides the VirtualBox user with privileges such as writing to the pipe. |
Linux |
Linux |
Linux users can make use of multiple tools that establish a connection to a local domain socket. One that is widely used and available in many Linux distros is Socat. VirtualBox operates under the premise that the socket or pipe it references exists. When you are implementing a direct connection between two virtual machines, one machine creates a pipe or socket and the second VM attaches to it. |
VirtualBOX configuration
In this scenario, the VirtualBox can be configured to create the local domain socket non-Windows hosts, the named pipe, or itself, etc. Also, the VirtualBox must assume that the socket or pipe is in existence already.
In the case of a direct connection between two virtual machines, configure one virtual machine to develop a socket or pipe and the other one to attach to it.
Raw File: The virtual serial port output can be sent to a file. This is helpful for collecting diagnostic output. Any file can be used. The only requirement is that VirtualBox users has enough privileges to write and create.
TCP Socket: This helps forward serial traffic over TCP/IP. It can act as a TCP client that connects to servers or a server itself. The option allows for the direct connection between the remote machine and the guest’s serial port via TCP.
1. TCP Server: The current Pipe/Socket checkbox needs to be deselected and the port number specified in the address/path field. The port number can be 23 or 2023. In the case of UNIX-like systems, the port number has to be more than 1024.
2. TCP Client: For the purpose of creating virtual null-modem cable over the LAN/Internet, the other end should connect via TCP, while specifying the hostname: port in the Path/Address field. When the «Connect to Existing Pipe/Socket» box is ticked, the TCP socket will go into client mode.
As you can see, 4 serial ports can be configured or each virtual machine. However, multiple port numbers can be picked.
I am running a certain application on Ubuntu (16.04) in VirtualBox, while VirtualBox is running on Windows 10 (host).
In Simulink (running on my host), I have a simulation where at the last stage, I gather some values. I want to output these values over a serial connection at a certain baud rate to the application that is running on VirtualBox (i.e. QGroundControl station).
So first part of my question — VirtualBox:
In VirtualBox, I enabled the serial port and chose a host pipe in port mode, as shown in:
In the picture you can see that COM6 is used, but I used COM1 and COM2 instead. I got the same result for both.
I am not that used to working with VirtualBox, so I don’t really know if this means I have now created a connection between my host and guest or if I still need to activate or connect them in any way?
Second part of my question — Simulink:
In Simulink, I want to output my values using a serial send (because I think that is the easiest way? If there is a better way, please tell me), but if I want to select a port, no ports are shown, as you can see in:
What do I need to do/change in VirtualBox/Simulink to get my COM port to show up?
Last part — MATLAB:
Because in Simulink, no COM ports were shown. I wanted to check for available ports in MATLAB, but apparently all my ports are closed:
>> info = instrhwinfo('serial')
info =
HardwareInfo with properties:
AvailableSerialPorts: {0x1 cell}
JarFileVersion: 'Version 3.8'
ObjectConstructorName: {0x1 cell}
SerialPorts: {0x1 cell}
Access to your hardware may be provided by a support package. Go to the Support Package Installer to learn more.
If I try to open one of my ports by using the fopen()-command, I get this message:
Error using serial/fopen
Open failed: Port: COM1 is not available. No ports are available.
Use INSTRFIND to determine if other instrument objects are connected to the requested device.
Using «INSTRFIND» shows that all ports are closed.
Because the description in the help and manual is very poor and others have had similar problems, I decided to write this guide after lots of trials.
Original it was posted in the Windows Hosts section for XP guest, but has now added Windows 7 settings.
How to add a physical serial port.
In Guest Settings for Serial Ports set as follow
Port1: Checked
Port Number: COM1
Port Mode: Host Device
Windows Host:
Port/File Path: COM1:
Note the colon in COM1: (not semicolon). I have experienced the guest could become unstable without it.
For a host port number higher than 9, the naming \.comX where X is the port number, is required. This can also be used for a one digit port number.
Linux Host:
Port/File Path: /dev/ttyS1
For other COM port than 1 replace the digit with port number.
Also remember the IRQ and I/O Port settings.
If the guest needs to see another port than COM1, change the Port Number to the requested port.
If using a user defined IRQ for the guest, IO APIC may have to be enabled.
Save the settings and start the guest.
Open the Device Manager in the guest and go to the Ports (COM & LPT) section.
If you see a COM3 port with a yellow warning icon skip the following sections.
XP:
Open Add Hardware from the Control Panel.
After searching for hardware select ‘Yes, I have already connected the hardware’ and Next.
Go to the bottom and select ‘Add a new hardware device’
Select ‘Install the hardware that I manually select from a list’
Select ‘Ports (COM & LPT)’
Select ‘Communication Port’ from Standard port types.
Continue with Next until finished.
WIN7:
From the Action menu select Add legacy hardware.
Select Next, ‘Install the hardware that I manually select from a list’ and Next
Select ‘Ports (COM & LPT)’ and Next
Select ‘Communication Port’ from Standard port types.
Continue with Next and Finish.
In the Device Manager you should now see the COM3 port with a yellow warning icon.
Open Properties for the COM3 port.
Select Advanced from Port Settings.
Choose COM1 from the ‘COM Port Number’ (Ignore possible ‘In Use’)
In the Resources tab select ‘Set Configuration Manually’ if you see it.
In Windows 7 uncheck ‘Use automatic settings’
Select the configuration that corresponds to the VirtualBox settings as noted – likely configuration 0000.
Close the box and you should be asked to reboot.
After reboot the COM1 port should now be working.
How to add an USB serial port.
Important: Depending on version ‘VirtualBox Extension Pack’ must be installed to use an USB serial adapter.
You have the choice of installing the device USB driver on the host or cancel this installation, but the VirtualBox’s host routing must be installed when the device is accessed for the first time in the guest.
In guest Settings for USB set as follow
Enable USB Controller: Checked
Enable USB 2.0: Checked
Add the driver (e.g. FTDI USB <-> Serial)
Save the settings and start the guest.
From the menu or status bar of VirtualBox frame check the Serial Port in the USB section.
Install the USB driver in the guest — I have found it is a good idea to restart the guest after the host routing is done and before the driver installation. If still a problem with the USB initializing the following procedure usually will do the job link.
In the guest the port number can be changed in the Device Manager, as well as settings for buffers, timers, etc.
As an Embedded Software Engineer serial port access is very critical requirement for me irrespective off which OS I am using and how I am using it (I mean with or without virtualization).
I have Windows XP as primary Operating System, however, I need to work on Linux for lot of hobby projects. I hate to manage two computers for two reasons first is it makes workplace really messy with extra wires and Second is I always need some space to keep items like Power Supplies, Oscilloscopes, Programmers, Debuggers etc. which are unavoidable.
So I installed Kubuntu as Guest OS on my Windows Host and I wanted to access the host serial port for debugging purposes. Virtual Box does provide this feature and its quite easy to configure as well. The problem is, it can be done in more then one way and that’s where user might get confused that’s why I am writing this post. Before jumping into action we will just find little more information about serial ports
How Serial Ports are Named:
In windows like operating systems serial ports are named like COM1, COM2 and so on while in Linux they are named like /dev/ttyS0, /dev/ttyS1 and so on. As my example involves both operating systems it might create some confusion, as a rule of thumb what will call COM1 in windows will be /dev/ttyS0, COM2 will be /dev/ttyS1 and so on. Even though the names are different they refer to the same Interrupt and IO ports and that’s how we map these names.
Name Under Windows | Name Under Linux | IO Address | Interrupt Request (IRQ) |
COM 1 | /dev/ttyS0 | 0x3F8 | 4 |
COM 2 | /dev/ttyS1 | 0x2F8 | 3 |
COM 3 | /dev/ttyS2 | 0x3E8 | 4 |
COM 4 | /dev/ttyS3 | 0x2E8 | 3 |
Setup & Requirement:
My computer has four serial port COM1, COM2, COM3 & COM4 . My requirement is very simple I want to access COM3 in my Kubuntu guest installed under Virtual Box Virtual Machine. (We could have taken COM1 itself but that will be little bit confusing so we will stick to COM3 first, once we know how to do it we can access any port in similar manner).
VirtualBox Configuration:
The next step is to configure virtual box to connect virtual serial port in guest OS to physical serial port on host. This is pretty easy if you know what to IGNORE on the serial port configuration dialog of Virtual Box. Lets get started with the configuration now, Open the serial port configuration dialog box for the virtual machine of interest, by default Port0 Tab will be visible. For our purpose IGNORE IRQ, IO PORT and Create Pipe fields.
- On Port0 Tab select Enable Serial Port check box (you will not be able to change any other setting till you check this one).
- Port Number : This field refers to port number under guest OS, we want to map it to COM1 (/dev/ttyS0) so select COM1 (remember it has nothing to do with physical ports)
- Port Mode: We want to connect virtual device to physical device on host so set it to “Host Device”
- Port Path: For “Host Device” port mode this field refers to physical device port number on host, we want to connect to COM3 on host so enter COM3 here.
Check out the screen shot below for Virtual Box Configuration.
Virtual Box Serial Port Settings
That’s it just set these 3 fields to correct values and you are done.
Now lets check if it really works or not, as I said my virtual machine runs Kubuntu so the serial port COM1 (Technically the port with IRQ= 4 and I/O Port = 0x3f8) will be mapped to /dev/ttyS0.
Verification Under Guest OS:
To verify the serial port operation under guest OS we need some Kind of Serial Port terminal for gust OS. As our guest OS is Kubuntu I have used Cutecom. Now the actual verification can be done in two ways.
- Short Pin 2 and 3 of the physical serial port, this will short the Rx and Tx pins of the serial port and whatever you send through terminal will echoed back to the terminal.
- Connect any RS-232 device to serial port and verify it with the device specific commands or application.
I will choose the first method because it will work for everyone, so short RX and Tx pins for your physical serial port and configure Cutecom to set the device to /dev/ttyS0, make other settings as per screen shot below.
Cutecom Settings
See it in action below:
Working Serial Port Under Guest OS
Final Thoughts:
- In order to map COM1 to /dev/ttyS0 we need to set both Port Number and Port Path fields to COM1 in Virtual Box serial port settings.
- Even though I have tested it on Kubuntu it should work on any Linux destro.
- If your guest OS is Windows you can use the Hyper Terminal program and port name given in Port Number field of Virtual Box serial port settings.
- Please note that the selected physical port can not be accessed by the Host when the Virtual Machine using that port is running.
Links Related to This Post:
- VirtualBox
- Cutecom
- Serial Port Information @ Beyond Logic