yes1111 (yes1111) wrote,
yes1111
yes1111

Category:

Записки пингвиновода-любителя. Scientific Linux, DOSEMU и прямой доступ к LPT-портам



Некоторое время назад я уже касался темы прямого доступа к LPT-портам из DOS-приложений, запускаемых в эмуляторе DOSEMU, работающего под управлением ОС Linux. Но в этом посте речь шла преимущественно об Ubuntu. А на днях довелось мне 2 спектрофотометра связывать через LPT-порты с компьютером, работающим под управлением Scientific Linux 6.3 (клон RHEL6). Возникших в процессе работы особенностей не так уж и много, но их незнание вполне способно убить заметное количество времени и нервных клеток. Изложенные ниже рекомендации с высокой вероятностью будут справедливы и для других клонов RHEL6 - например, CentOS 6.

Итак, имеем:
- 2 периферийных устройства (спектрофотометры) с интерфейсными платами, рассчитанными на подключение к LPT-порту;
- ПО, реализующее обмен данными. Написано в начале 90-х годов на Borland C 3.1 под MS-DOS;
- компьютер под управлением Scientific Linux 6.3, оснащенный двумя 2-направленными LPT-портами. При этом один порт расположен на дополнительной карте ISA и сконфигурирован  с помощью джамперов как LPT1 (базовый адрес 378h, IRQ7), а интегрированный порт на материнской плате — через BIOS Setup как LPT2 (базовый адрес 278h, IRQ5). Фотографии карты и подробности можно посмотреть здесь.

Используемое интерфейсное ПО требует прямого доступа к "железу" портов, поэтому, как и в случае с программатором (см. вышеупомянутый пост), DOSEMU должен его обеспечить. Для этого:

1. Устанавливаем пакет dosemu-1.4.0-1.i386.rpm отсюда. С другими версиями (в т.ч. из репозиториев) ПРЯМОЙ ДОСТУП К ПОРТАМ ПОЛУЧИТЬ НЕ УДАСТСЯ! В частности, версия из пакета dosemu-1.4.0-12.2058svn.el6.i686.rpm (репозиторий rpmfusion-free-release) при запуске просто игнорирует файл /etc/dosemu.conf - вместе со всем, что в нем написано! Почему именно - не знаю, глубоко копать времени не было.

2. Запрещаем SELinux (иначе значение переменной vm.mmap_min_addr=0 установить не удастся).
Т.е. вроде бы оно и присвоится, но dosemu все равно будет упорно ругаться на vm.mmap_min_addr > 0. Для этого:
- Открываем файл /etc/selinux/config:
- Меняем в нем:

SELINUX=disabled
- Перезагружаемся.

3. Открываем /etc/sysctl.conf. Дописываем:

vm.mmap_min_addr=0

Перезагружаемся.

4. Чтобы при запуске dosemu с ключом -s рабочая папка не менялась на /root, редактируем файл /etc/sudoers:

- строку

Defaults always_set_home - закомментировать;

-строку

Defaults env_keep += "HOME" - раскомментировать.

5. Открываем /etc/dosemu/dosemu.conf. Пишем в разделе ## Direct hardware access (не обязательно именно там, но чтобы легче было ориентироваться самому):

$_ports = "fast range 0x378 0x37f"
$_ports = $_ports, " fast range 0x278 0x27f"


Если в системе присутствует только порт LPT1, то нужна только верхняя строка.

6. Запускаем dosemu командой:

dosemu -s

(Можно создать кнопку запуска в терминале с той же командой)
Tags: linux, записки сумасшедшего
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments