Есть DOS на виртуальной машине, в ней специализированное ПО, которое не хочет запускаться из-за того что не видит на PCI порту устройство (пока мне не понятно, должно это быть какое либо специальное устройство или любое).
1. То есть в теории, что бы программа перешла к следующим шагу, нужно сэмулировать средствами VirtualBox или самой DOS подключенное PCI устройство. Как это сделать?
2. На сколько я знаю, подключить физическое PCI устройство хост-маишны к виртуальной машины VirtualBox не получиться... А может ли какая либо другая система визуализации это делать? К примеру Proxmax?
Никак.
Програмулина не видит физческого устройства на шине PCI. Проверяется как правило просто - запрос на определенный порт, который должен быть, если отклика нет - аля улю.
Можно только написать драйвер устройства для хоста и пробрасывать его в DOS. Задача сравнима по сложности с написанием своего драйвера.
То есть - если есть девайс и он втыкается в PCI (правда PCI еще найти надо) - воткнуть и пробросить. Если нет - то только писать свой имитатор девайса.
запрос на определенный порт, который должен быть, если отклика нет - аля улю.
Не определенный, судя по логам, она шарит по всем PCI портам, но ищет именно плату MOXA. причем откликается на разные платы, разных годов и не только PCI еще с ISA.
Вопрос в том, как ПО определяет, что подключена именно плата MOXA?
То есть - если есть девайс и он втыкается в PCI (правда PCI еще найти надо) - воткнуть и пробросить. Если нет - то только писать свой имитатор девайса.
Дивейс есть, но пока не уверен, что можно PCI устройство пробросить в VirtualBox...
как ПО определяет, что подключена именно плата MOXA?
PCI ID, Vendor ID. Также как любая ось определяет, что я воткнул в USB клаву, а не электронный ключ.
Вполне возможно она просто пробегает по всем возможным диапазонам. Ведь кроме PCI, была еще EISA (интересно, помнит кто-то еще такую шину?), тоже 32-битная. Но мама дорогая, как же сложно было там настроить банальную сетевуху!
Можно попробовать. Воткнуть в хост шелезяку, дрова не нужны. Попробовать пробросить ее в виртуалку - вот там нужны будут дрова.
Попробовать пробросить ее в виртуалку - вот там нужны будут дрова.
Теоретически, дрова в таком случае будет не проблема, поскольку со стандартными драйверами плата инициализируемый, но обмен не работает. Но думаю, что можно будет использовать другие номера COM портов...
Проблема в том, что в VB нельзя пробросить PCI устройство:( (Вроде как только в Linux можно это сделать)
Вообщем пока такие варианты вижу:
1. Пробовать другую систему визуализации (Пока думаю про Proxmax)
2. Попробовать запустить спец.ПО в Linux, возможно есть способы запустить там ДОСовское ПО, так как мне кажется, что в Linux по проще будет различные маневры проводить...
Ну, там есть qemu, есть dosbox, есть bochs. Как там пробрасываются устройства не знаю, dosbox - он для игрух больше, хотя qemu (+libvirt) - это собственно и есть proxmox :)
Тут что можно придумать:
- ставится любой линух, kvm, libvirt
- создается виртуалка с досом (нужен досовый инсталлер, хотя бы системная дискета или образ оной)
- в нее пробрасывается устройство целиком.
- для того, чтобы устройство отвязать от шины на хосте нужно будет несколько потанцевать с iommu и виртуализацией устройств - это читать темы как пробросить видеокарту в винду
Есть еще вариант поставить ESXi - один хост бесплатный, управлять им по сети. Там немного проще пробросить устройство в машину, но это будет выделенный хост, работать за ним нельзя.
CityCat4, Пока мне кажеться более простым вариантом Proxmax, посольку в нем я хоть что то понимаю:)
При условии, что там можно будет PCI устройство пробросить, этот момент я пока не анализировал:(
anton13ms, Proxmox - это надстройка над линухом. То есть внутри там тот же KVM, а следовательно, могут быть проблемы с пробросом устройства. Хотя конечно же критерий истины - практика.
UPD: Вполне возможно, что там есть некая гуевая конфигурялка по пробросу, как в ESXi - это значительно облегчит дело
Под DOS - никак. Для этого нужно, чтобы процессор работал в защищенном режиме.
Остается виртуализация.
Свое устройство можно написать под bochs
Физическое устройство можно прокинуть на KVM и XEN (ну его нафиг), но они оба работают под Linux
ВАЖНО - Proxmox - не гипервизор, это просто управляйка. Внутри у нее все тот же KVM
Так позвольте теперь мои мысли в кучу собрать:)
1. Сэумулировать средстами самого DOS невозможно, так? А что значит в защищенном режиме?
2. Я так понимаю писать под bochs, будет стоить мне 1001 бессонных ночей?:)
3. В принципе есть небольшой опыт работы с Proxmox, можно попробовать через него, но существует вероятность, что спец. ПО требует не просто любое PCI уйстроство, а какое то конкретное? хотя мне не понятно как оно его может идентифицировать... Я правельно поинмаю, что в случае с Proxmox, мне в любом разе понадобятся драйвера PCI устройства под DOS?
Армянское Радио, Ситуация такая, есть ПК на котором DOS и некое спец ПО, в него воткнут через PCI плата MOXA адаптер на четыре COM порта. Аппаратка деградировала, фирма закупать такие компоненты не имеет возможности.
Возникает два варианта:
1. Перевести ПО на другое железно (но оно несколько отличается)
2. Перенести ПО на виртуальную машину.
Армянское Радио, На данный момент проблема в том, что судя по скупым логам спец. ПО, она шарит по PCI портам и ищет там устройство, не находит и ругается... То есть, было бы не плохо, подсунуть ей какую то обманку:(
1. На данный момент материнская плата Gigabyte GA-EG41MF-US2H, а устройство MOXA CP-114EL, такая https://moxa.ru/shop/boards/pci_express/cp-114el/c...
2. ПО занимается тем, что опрашивает через COM порты устройства по RS485, выводит эти данные на экран и отправляет дальше по сети.
На сколько я понимаю, ПО берет информацию об устройстве из драйвера? А значит без эмуляции именно этого драйвера обмануть ПО мне вряд ли удастся?
Я натолкал, порты работают (то есть данные по COM порту из виртуальной DOS в реальный порт на хост-машине Windows передаются).
Но возникла другая проблема, спец. ПО на DOS, не запускается без физической платы на PCI:(
Не знаю, как обойти этот момент:( Нужно заставить спец. ПО думать, что якобы воткнута плата в порт...
Virtual DOS Machine(VDM) в OS/2(ArcaOS) умеет работать напрямую с железом, но это сильное джедайство. Не проще поставить какой-нибудь FreeDOS и драйвер для вашей железки.
Дело в том, что официальный драйвер для этой железки почему то не завелся:(
Точнее, он завелся, но просто сыпит что то в канал:(
То есть у меня на другой стороне COM порта, подключена MOXA 1150 (преобразователь USB/RS485) и лампочка приема на нем не переставая горит. А если, я с другой стороны, что ли бо в порт отправляю, то оно ко мне возвращаться, как будто MOXA под досом в режиме петли работает, но в ней режим loop отключено.
Поддержка Moxa отвечает, что драйвер рабочий, возможно индивидуальная несовместимость с материнской платой...
Кстати, пробовал проверять эту плату Moxa под Windows 10 работает без замечаний...
anton13ms, Вот вам и надо выяснить почему не завёлся, а не наворачивать слои абстракции. Может сигнальные линии неправильно выставлены(DTR, DSR, TR etc), может ещё что.
Может сигнальные линии неправильно выставлены(DTR, DSR, TR etc)
они выставлены точно так же, как и при подключении через Windows 10 были выставлены.
может ещё что.
Может, но пока не знаю что, но связано это либо с ОС либо с драйвером, либо с несовместимостью материнской платы с платой расширения COM...
а не наворачивать слои абстракции.
Пока это самый реальный способ, то есть если удасться заставить спец. ПО думать что PCI карта воткнута, то скорее всего все получиться... Дело за малым:)))
Сугубо в качестве интереса, а что за железка такая. И почему вы думаете что программа будет работать без нее?
И какой смысл от нее?
Если же нужно что то перегнать. Напишите свой драйвер. Вот как например тут.
Основная идея повесить обработчик на прерывание и обрабатывать его в своем коде. Так https://www.drdobbs.com/writing-ms-dos-device-driv...
Это плата расширения COM портов фирмы Moxa, программа судя по всему определяет запущен ли драйвер этой моксы или нет. Драйвер в свою очередь без физически подключенного устройства не запуститься...
Свяжитесь со службой поддержки и попросите буквально следующее:
"Для работы в программе такой то необходимо использовать ваше программное обеспечение для драйверов устройства ХХХ, прошу предоставить эмулятор порта, для этого устройства".
Думаю не откажут. Если же нет, качаете их драйвер и с помощью IDA вставляете заглушки которые всегда возвращают True
anton13ms, IDA это ультимативное решение если нет исходников, декомпилирует все, единственный минус нужно знать ассемблер.
Насчет написать действительно хорошая идея, обычно железные компании не отмораживаются насчет софта. Единственно как всегда нужно хорошо объяснить зачем это вам нужно. Часто даже инженеры сами с интересом подключатся