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
Привет, Александр!
На электрониксе один товарищ отписал (https://electronix.ru/forum/index.php?showtopic=53528&view=findpost&p=1489458), что нашёл 64-битный драйвер подписанный. Вот ссылка сразу на драйвер:
http://www.highrez.co.uk/downloads/inpout32/
Может, пригодится.
Подписанній это хорошо, свежий тоже неплохо.
«Вы будете смеяться»™, но прямо на этой странице вверху линк туда же, к этим же «немецким ребятам» (и у пони-прогов был ихний же комплект под другим названием), корни все от них. Тут выложено дополненное в том же 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.
«Мопед не мой, я просто разместил объяву»™ 🙂
Но если ты в курсе про тот вариант – тогда всё в порядке.
Процитирую твой ответ на электрониксе, ладно?
Было так — я нагуглил, кто-то дал линк, … — в итоге в конце 2009/в начале 2010 нашлось пони-проговское в теме про /64 и те «немецкие ребята». Оказалось, это одно и то же, но эмуляция DLPortIO была не полная (как видно по истории, они и в 2011 добавляли совместимость). В этой же теме на электрониксе я тогда написал, пока _pv допиливал недостающие функции, я решил при ошибке динамической линковки блочной функции из библиотеки подставлять свою. Проверил обе версии (оригинальную немецкую и допиленную) в двух разніх /64 оськах. Только потом выложил в общий доступ. Допиленную, на случай нужна кому-то не для avreal.
Все последующие версии avreal я всегда проверял на всех осях из перечисленных, драйвера стояли как в 2010 поставил, avreal работал.
Что и почему не работает сейчас — интересно, но не критично для меня, может полюбопытствую, когда будет время.
Кто там что написал про меня — как-то с годами волнует все меньше, а в эти вот годы вообще практически не волнует.
> Кто там что написал про меня — как-то с годами волнует все меньше, а в эти вот годы вообще практически не волнует.
Ну тогда ладно:) Рад был пообщаться!
Спасибо за коментарии.
Хотелось бы ещё пару моментов уточнить.
Ключ -v (если он записан в одной строке с другими ключами) производит сверку и области памяти с новым _n_ или только область памяти из *.hex?
(Пока я перед строкой с -l2 просто считываю всё в xx.hex для проверки
{n у меня – это HE число перезаписей}).
-nXXX пишется и верифицируется независимо от *.hex сразу после стирания,
Потом пишется (и верифицируется) *hex (с наложенными на него -c*).
Приветб Александр!
Если записать строку вот так, то всё работает.
@avreal32 +MEGA8 -p1 -as -o4000 -%% -e -w -n -c %HEXFILE% -c*serno4=1FE8,serno.txt -c*bytes4=1FF0,01020304 > output.txt
Неплохо бы чтобы подобная строка гуглилась 🙂
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.
Первый -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