DLPortIO x64 та 64-bit Windows.

На жаль, драйвера та бібліотеки DriverLINX (DLPortIO.sys + DLPortIO.dll) не існує для версій Windows під архітектуру x86-64 (AMD64, Intel64). Принаймні, я такого не знаходив. Scientific Software Tools, Inc. (http://www.sstnet.com) припинила підтримку цього драйвера, передала його іншій фірмі, та й там, здається, дотепер є лише його 32-бітний варіант.
На щастя, існує комплект InpOut32 (hwinterface.sys+inpout32.dll), а також 64-бітна версія InpOutx64 з драйвером hwinterfacex64.sys.

Після додавання в бібліотеку InpOut32.dll необхідних для сумісності з DLPortIO.dll функцій та зміни імені на DLPortIO комплект на базі hwinterfacex64.sys стає заміною DriverLINX для 64-бітних OS (Windows XP 64, Vista 64, Windows 7 64). avreal, як і інші програматори AVR, може працювати через цю модифіковану бібліотеку з адаптерами на порт LPT.

Саме такий комплект було викладено на форумі підтримки PonyProg під назвою DLPortIO x64. Але в ньому нема функцій блочного доступу до портів на зразок DlPortWritePortBufferUchar та іншх, які були в оригінальній DLPortIO.dll. Як наслідок, програми, що потребують таких функцій, з ним не працюють. Починаючи з версії 1.28r2, avreal при відсутності потрібної функції в бібліотеці використовує свою власну функцію, яка в циклі звертається до DlPortWritePortUchar. Таким чином, avreal 1.28r2 чи новіший працюватиме з варіантом DLPortIOx64 з форуму PonyProg.

Один з учасників форуму electronix.ru дописав потрібні функції і перезібрав InpOut32.dll з максимально повною імітацією DLPortIO.dll.

Завантаження

Я перевірив роботу avreal з обома варіантами бібліотеки і тут викладаю варіант з повною емуляцією. З ним працюють і старіші версії avreal без внутрішньої функції блочного запису та мають працювати всі програми, розраховані на DLPortIO.

Особливість роботи 32-бітних програм під 64-бітною Windows

У 64-бітних версіях Windows для 32-бітних програм використовується перенаправлення каталогів. 32-бітна програма-інсталятор від DLPortIO не може встановити драйвер у 64-бітнй системі, але в цьому немає потреби. На тому ж форумі при обговоренні універсальної бібліотеки odvport (про що дещо пізніше) було підказано, як можна встановити драйвер простим командним файлом, заносячи потрібний запис в реєстр Windows через reg-файл. Аналогічний командний файл використовується і для CLI-інсталятора 32-бітної DLPortIO.

Встановлення емулятора DLPortIO у 64-бітній Windows XP.

  • Запустіть DLPortIO_install.bat від імені адміністратора.
  • Погодьтеся з внесенням змін в реєстр.
  • Перезавантажте комп’ютер.

Одне зауваження — запускайте bat-файл з 64-бітної програми, інакше він успадкує оточення 32-бітного батьківського процесу і не зможе правильно встановити 64-бітний драйвер. Наприклад, Windows Explorer та command prompt в 64-бітній системі 64-бітні, а звичні мені FAR та FreeCommander — 32-бітні програми.

Встановлення емулятора DLPortIO у 64-бітній Windows 7.

Windows 7/64 вимагає використання підписаних драйверів. Можна при кожному завантаженні вимикати перевірку цифрових підписів, натискаючи F8 та вибираючи пункт «DISABLE DRIVER SIGNATURE ENFORCEMENT», як це описано у вже загадній темі на форумі PonyProg. В цьому випадку драйвер встановлюється так само, як і для Windows XP.

Також існує режим Windows, призначений для розробників. В ньому дозволяється використання драйверів з «тестовим» підписом, інакше будь-яка дрібна зміна в розроблюваному драйвері вимагала б підписування в Microsoft. Докладніше можна почитати на сайті автора програми DSEO.
Цю програму можна використати, щоб підписати DLPortIO.sys, ввімкнути тестовий режим і позбутися необхідності при кожному завантаженні натискати F8.

Отже:

  • Завантажте програму DSEO та запустіть її від імені адміністратора (UAC можна не вимикати): натисніть праву кнопку миші на файлі програми та виберіть з контекстного меню потрібну позицію.
  • Підпишіть драйвер — виберіть «Sign a System File», натисніть кнопку Next, в рядку наберіть повне ім’я файлу драйвера. Наприклад, якщо інсталяційний архів розпаковано в каталог D:\dlportio-64, то слід задати ім’я D:\dlportio-64\DLPortIO.sys.
  • Ввімкніть режим дозволу тестових підписів вибором «Enable Testmode» та натиcканням кнопки Next.
  • Вийдіть з програми dseo.
  • Запустіть DLPortIO_install.bat від імені адміністратора.
  • Погодьтеся з внесенням змін в реєстр.
  • Перезавантажте комп’ютер.

Встановлення та активація драйвера в Windows Vista/64 bit має проходити аналогічно Windows 7/64, але я сам цього не перевіряв.


Дивіться також про DLportIO та 32-біт Windows

10 коментарів to “DLPortIO x64 та 64-bit Windows.”

  1. Антон Гусев сказав:

    Привет, Александр!

    На электрониксе один товарищ отписал (https://electronix.ru/forum/index.php?showtopic=53528&view=findpost&p=1489458), что нашёл 64-битный драйвер подписанный. Вот ссылка сразу на драйвер:
    http://www.highrez.co.uk/downloads/inpout32/
    Может, пригодится.

    • ReAl сказав:

      Подписанній это хорошо, свежий тоже неплохо.

      «Вы будете смеяться»™, но прямо на этой странице вверху линк туда же, к этим же «немецким ребятам» (и у пони-прогов был ихний же комплект под другим названием), корни все от них. Тут выложено дополненное в том же 2010 году блочными функциями, линк на электроникс на ту же тему 🙂
      avreal в конечном итоге может работать и без этого дополнения — если dll не предоставляет функцию, используется своя аналогичная, которая дёргает dll ради каждого байта.

      А вот что касается не-64-битности… «Ничего не понимаю»™
      Выше у меня написано, что этот драйвер не становился в 64-ке, если пробовать устанавливать из-под 32-битной програмы (т.е., находясь в WoW-эмуляции 32-битного окружения), а как раз в честном 64-битии он становился.
      У меня есть отдельній винчестер с мелкими разделами FreeBSD, XP/32, XP64, W7/32, W7/64, «главным» линуксом и большим разделом для сохранения образов мелких разделов с теми ос. Перед тем, как я написал это сообщение, я несколько раз проверил установку и работу с чистого листа, т.е. восстанавливая образы XP/64 и W7/64, сделанные после инсталляции до установки нестандартных драйверов. Всё работало.
      Может, что-то в самих виндовсах поменялось?
      Будет время, найду тот винчестер, на нём посвежее 7-ку или поставлю рядом, или заменю старую и попробую ещё. К сачастью, у меня еще есть куда ткнуть pci-плату с LPT.

      • Антон Гусев сказав:

        «Мопед не мой, я просто разместил объяву»™ 🙂
        Но если ты в курсе про тот вариант – тогда всё в порядке.
        Процитирую твой ответ на электрониксе, ладно?

        • ReAl сказав:

          Было так — я нагуглил, кто-то дал линк, … — в итоге в конце 2009/в начале 2010 нашлось пони-проговское в теме про /64 и те «немецкие ребята». Оказалось, это одно и то же, но эмуляция DLPortIO была не полная (как видно по истории, они и в 2011 добавляли совместимость). В этой же теме на электрониксе я тогда написал, пока _pv допиливал недостающие функции, я решил при ошибке динамической линковки блочной функции из библиотеки подставлять свою. Проверил обе версии (оригинальную немецкую и допиленную) в двух разніх /64 оськах. Только потом выложил в общий доступ. Допиленную, на случай нужна кому-то не для avreal.
          Все последующие версии avreal я всегда проверял на всех осях из перечисленных, драйвера стояли как в 2010 поставил, avreal работал.

          Что и почему не работает сейчас — интересно, но не критично для меня, может полюбопытствую, когда будет время.
          Кто там что написал про меня — как-то с годами волнует все меньше, а в эти вот годы вообще практически не волнует.

          • Антон Гусев сказав:

            > Кто там что написал про меня — как-то с годами волнует все меньше, а в эти вот годы вообще практически не волнует.

            Ну тогда ладно:) Рад был пообщаться!

  2. Андрей сказав:

    Спасибо за коментарии.
    Хотелось бы ещё пару моментов уточнить.

    Ключ -v (если он записан в одной строке с другими ключами) производит сверку и области памяти с новым _n_ или только область памяти из *.hex?
    (Пока я перед строкой с -l2 просто считываю всё в xx.hex для проверки
    {n у меня – это HE число перезаписей}).

    • ReAl сказав:

      -nXXX пишется и верифицируется независимо от *.hex сразу после стирания,
      Потом пишется (и верифицируется) *hex (с наложенными на него -c*).

  3. Андрей сказав:

    Приветб Александр!

    Если записать строку вот так, то всё работает.

    @avreal32 +MEGA8 -p1 -as -o4000 -%% -e -w -n -c %HEXFILE% -c*serno4=1FE8,serno.txt -c*bytes4=1FF0,01020304 > output.txt

    Неплохо бы чтобы подобная строка гуглилась 🙂

  4. Андрей сказав:

    avreal/WIN32 – AVR controllers LPT programmer by Redchuk Alexandr
    v1.25rev1 (Jan 1 2005 18:47:12) ReAl@real.kiev.ua
    bug-reports, suggestions and so on mail to avreal@real.kiev.ua

    Command:
    +MEGA8 -p1 -as -o4000 -% -w -n3456 -v -c -c*serno4=1FE4,serno.txt -c*bytes4=1FE0,01020304 bzv.hex
    % LPT base port 0x378
    % assume that LPT data writes not faster then 1uS
    % Atmel adapter for STK*00 found
    % STK mode
    % osc = 4000kHz -> setup=1, hold=1,1
    File ‘-c*serno4=1FE4,serno.txt’ not found

    Что-то не могу понять, где у меня ошибка в синтаксисе.
    Если оставить только:

    -c*bytes4=1FE0,01020304

    то выскакивает ошибка, что File ‘-c*bytes4=1FE0,01020304’ not found.

    • ReAl сказав:

      Первый -c говорит взять следующий аргумент как имя файла. Нужно или так, с %HEXFILE%, или -c для файла в конец

      +MEGA8 -p1 -as -o4000 -% -w -n3456 -v -c*serno4=1FE4,serno.txt -c*bytes4=1FE0,01020304 -c bzv.hex

      или вообще без этого -c

      +MEGA8 -p1 -as -o4000 -% -w -n3456 -v -c*serno4=1FE4,serno.txt -c*bytes4=1FE0,01020304 bzv.hex

Leave a Reply

[flagcounter image]