Жизнь и необыкновенные приключения одного драйвера, и что должно происходить на самом деле.

Jul 18, 2008 02:51

- Ну чё уставился, как Windows на новое устройство? Неизвестный гопник.

Мой новый наладонник (кликабельно).
Купил я себе новый наладонник - Asus A696 под управлением Windows Mobile 6. И горько разочаровался, но речь сейчас не об этом.

Первое, что надо сделать после покупки нового наладонника - установить программу синхронизации, чтобы перебрасывать на него игры, проги, тексты и музыку. В наладонниках Palm, таких, как мой предыдущий Palm Zire 72s, синхронизация выполняется с помощью программы Palm Desktop. В Windows Mobile для того же самого используется программа Microsoft ActiveSync. На диске с софтом для наладонника идёт версия 4.5, её же можно скачать и с официального сайта.

На основном домашнем компьютере установка прошла без проблем. На основном рабочем - была мелкая проблема, но я её обошёл. А вот с рабочим ноутбуком пришлось попотеть.

Та самая мелкая проблема, с которой я столкнулся, заключалась в следующем: программа установки содержимого с компакт-диска требует Macromedia Flash palyer 8 и выше. У меня стоит Adobe Flash player 9.0.124.0. Тем не менее, программа установки его не нашла, и продолжала требовать установить подходящий Flash player.

Хорошо, что не запустился только ярлычок ко всем остальным программам с диска, каждую из которых можно было запустить через её собственную программу установки. А если бы это была одна общая программа инсталляции, как у Microsoft Office, у которого нет отдельных инсталляторов для Word, Excel, PowerPoint и Access? Я бы вообще ничего установить не смог. Так и остался бы без программ (диск забит под завязку, но я же не знаю, что из всего этого добра необходимо, что - желательно, а что можно и не трогать).

Я не понимаю, почему для программы-инсталлятора нужна ещё какая-то предустановленная программа, пусть даже такая замечательная, как Adobe Flash player. Я специально посмотрел на системные требования - нигде не сказано, что для того, чтобы установить программу синхронизации, нужен Adobe Flash player. Он, на самом деле, и не нужен: ActiveSync можно скачать с Интернета и установить без проблем вне всякой связи с наличием или отсутствием Flash player`а. То есть единственное, для чего Flash player всё-таки нужен - это чтобы показать мне менюшку с опциями «ткни сюда - установишь ActiveSync, ткни сюда - будет тебе Adobe Acrobat Reader». Не чересчур ли?


Окно инсталлятора rpmdrake в Mandriva Linux (тоже кликабельно).Я не понимаю, зачем нужна красивая заставка, проигрываемая пол-минуты, если всё, что я хочу сделать - это поставить одну несчастную программу для синхронизации. ИМХО, если есть диск с десятком программ на нём, то, конечно, должна быть заставка, но она должна быть сделана, как rpmdrake (это установщик программ в Mandriva Linux) или как инсталлятор в Zeta: есть список категорий, открываешь нужную категорию - вываливается список программ из этой категории, щёлкаешь на интересующей программе - появляется её краткое описание и скриншот. Можно отметить программы галочками; как только отмечено больше одной галочки, становится активной кнопка «Установить». Если программ мало, то можно просто сразу дать список программ. Имеют право на существование кнопки «Установить всё» и «Параметры установки», где можно выбрать, куда устанавливать каждую программу. Если подобный функционализм претит эстетическому чувству выпускающих проект, то можно добавить начальную презентацию со звуком, слайд-шоу и анимацией. Но в таком случае обязательно надо делать хорошо заметные кнопки «Пропустить заставку» и «Убрать звук».

Но даже эту начальную презентацию вполне можно сделать стандартными средствами Винды. Блин, у виндузятников есть столько всякой ненужной фигни всевозможных средств в арсенале - и Win32 API, и MFC, и ещё штук пять наборов классов! Всё это вместе позволяет создать заставку любой сложности, с каким угодно звуком. И эта заставка будет гарантированно проигрываться на любом компьютере, вне зависимости от установленных программ! Да, Win32 API - не самое простое средство разработки анимаций. Flash проще. Но зато сделанная в Win32 API заставка будет требовать меньше ресурсов и не будет зависеть больше ни от чего!

Но это проблема Asus`а, и, как я уже сказал, я сумел её обойти. Просто прошёлся по папкам на диске, прикинул по названиям, что к чему относится, и установил программы вручную. До сих пор не знаю, поставил ли я всё, что надо; но главное - Asus A696 синхронизируется.

Основные проблемы начались на рабочем ноутбуке.

Во-первых, он тоже страдал от той же проблемы, что и рабочий комп: запускаемый автоматически инсталлятор не находил Macromedia Flash player 8. Но я уже знал, как это обойти.

Во-вторых, после установки ActiveSync и подключения наладонника, Винда начала готовиться к работе с устройством. Во время проверки и переконфигурации драйверов она обнаружила, что нескольких файлов ей не хватает, и, соответственно, драйвер устанавливать отказалась. Разумеется, наладонник с компом не поладили, и синхронизация не заработала.

В это надо вчитаться. ActiveSync закончил установку и дал Винде свои драйвера: для всех устройств, поддерживающих ActiveSync, используй то-то и то-то. Но при первом подключении понадобилось устанавливать или конфигурировать ещё что-то. Что именно - я не знаю, и знать не хочу. Вопрос: зачем выполнять установку чего-либо при первом подключении устройства? Неужели нельзя было все нужные файлы распихать по нужным папкам, отконфигурировать и слинковать во время установки драйвера для этого же устройства (или, в случае Asus A696, универсального драйвера для всех устройств, поддерживающих ActiveSync)?

Как это сделано в ВиндеКак это должно быть сделаноТо, что называется «установкой нового оборудования», на самом деле таковой не является. Программа-установщик не устанавливает новые драйверы в операционную систему, она копирует их туда, откуда операционная система сможет взять их в случае необходимости. Как только к USB подключается новое устройство, Windows начинает спешно рыться в своём загашнике драйверов и спрашивать: «Ты вот с этим драйвером работать будешь? Нет?! А вот с этим?» Если устройство соглашается работать с одним из драйверов, то Винда выполняет какие-то операции конфигурации, загружает драйвер и, если всё прошло нормально, рапортует об успешно подключенном устройстве. Если же ни один драйвер не подошёл, то Винда с сожалением сообщает, что обнаружено новое Хрен-знает-что (Unknown device), и просит вытащить и воткнуть устройство снова. После перевтыкания поиск драйверов начинается по новой.На самом деле, в абсолютном большинстве современных операционных систем это сделано примерно так же. Есть куча готовых драйверов, большинство из которых в данный момент неактивно (а зачем держать в памяти программу для работы с устройством, которого в сию секунду не существует?) При подключении нового устройства устройство сообщает, к какому классу оно относится, и операционка перебирает все драйверы по одному, пока не найдётся подходящий. Отличие в том, что при первом подключении нет никакого конфигурирования драйвера: драйвер либо работает сразу, либо (если он не от этого устройства, или если он разработан в Microsoft) не работает вообще. Так и должно быть. Так правильно.

Итак, я подключаю Asus A696; Винда радостно определяет, что это фигнь-совместимая фиговина, и, пища от восторга, начинает перетасовывать файлы драйверов, пути доступа и протоколы. Во время перетасовки она осознаёт, что двух файлов ей не хватает, и начинает настойчиво их требовать. Файлы, которые ей нужны, - rndismpx.sys и rndismp.sys.

Что делает нормальный человек в такой ситуации? Недостающие файлы обнаружились в момент подключения устройства; значит, видимо, они как-то связаны с устройством. Я достал диски, которые шли с наладонником, в надежде, что нужный файл окажется там. Поскольку я верю в автоматизацию, я разрешил Винде установить драйвер автоматически, и даже разрешил подключиться к Интернету, чтобы проверить наличие новых драйверов. Ничего из этого не помогло: файлов по-прежнему не хватало.

Удаление и установка ActiveSync, чистка реестра (на рабочем-то ноуте!) и исполнение «Травиаты» на бубне не помогли. Простой поиск помог убедиться, что файлов с таким названием на диске просто нет. Я вздохнул и полез в Сеть.

Ну да, эти файлы как-то связаны с удалённым минипортом NDIS. Что это на самом деле - сейчас неважно. Протокол NDIS был разработан Microsoft совместно с 3com, и поддерживался ещё в MS-DOS. Значит, это Microsoft`овские файлы. Быстрая проверка показала, что файлы эти в самом деле находятся в папке C:\Windows\system32\drivers. Я дал путь к этим файлам в окне запроса, и установка наконец-то завершилась успешно: наладонник сумел связаться с компом и синхронизировался.

(Тут кроется ещё одна проблема: ActiveSync поддерживает синхронизацию не более чем с двумя компьютерами. Видимо, предполагается, что у человека один компьютер дома и один - на работе, и больше никаких компьютеров в его распоряжении нет. Для сравнения: Palm умеет синхронизироваться с неограниченным числом компьютеров. Из какого органа пальца Microsoft высосали это странное ограничение на два компьютера - мне непонятно. Но речь сейчас не об этом).

То есть вся проблема заключалась в том, что ActiveSync при установке не подключил два виндузятских же драйвера в Винду.

И тут уже возникает множество вопросов:

  1. А почему Винда не подозревает о своих собственных файлах, которые были установлены с ней же, и являются частью её собственных драйверов?
  2. Что было бы, если бы я не додумался посмотреть, что это за файлы? Кстати, rn выглядит точно как m; мне пришлось ещё покопаться, чтобы понять, что это за файл такой, науке неизвестный.
  3. Что должен делать обычный, простой человек, который с компьютером на «вы», в ситуации, когда операционная система просит дать ей что-то совершенно непонятное, которое к тому же неизвестно, где искать?
  4. Если этот драйвер так уж необходим, то почему производители наладонника не включили его в софт, поставляющийся на их собственном диске?
  5. А почему ActiveSync не сказал Винде, что у неё есть эти файлы?
  6. Должен ли конечный пользователь, желающий установить соединение между наладонником и компьютером, вникать в технические детали и на уровне файлов объяснять Винде, что у неё есть, а чего у неё нет?

В общем, выше я описал несколько проблем. А теперь поговорим о том, как это должно быть сделано:
  • Об автоматически запускающейся заставке диска с софтом я уже говорил выше. И повторю ещё раз:

    • С самого начала проигрывания должна быть доступна опция пропустить анимированную презентацию-вступление.

    • Если эта презентация сопровождается звуком - должна быть возможность его отключить или управлять его громкостью.

    • По окончании анимации пользователь должен попасть в список категорий программ или сразу в список программ.

    • У пользователя должна быть опция выбрать нужные программы из списка и установить их все разом, или устанавливать программы по одной.

    • Каждая программа должна сопровождаться:

      • описанием

        Эта софтина предназначена для чтения файлов помощи в формате ZPA - «Ну и зачем оно мне, если я вообще помощь не открываю?»

      • скриншотом

        «Вася купил себе такой же наладонник. Я, конечно, не помню, как называлась прога, которую он поставил, но экран у него выглядел точно так же. Значит, эту прогу и надо ставить!»

      • оценкой необходимости установки программы

        Это - набор кодеков, классная фича, маст хэв, без неё твой наладонник фильмы показывать не будет!
        А это - трёхмерная математическая модель ядерного взрыва, так себе фигнь, можно и не ставить, она для узкоспециализированного круга пользователей.

    • Эта заставка не должна требовать наличия других программ или плагинов.


  • Успешное окончание установки драйвера должно означать, что при первом же подключении устройство опознается и заработает корректно.

    Никаких дополнительных конфигураций, переписывания файлов с места на место, перелинковки и тому подобного при первом подключении быть не должно. Первое подключение устройства ничем не отличается (и не должно отличаться) от второго, пятнадцатого и тысяча восьмого. Соответственно, и вести себя система должна одинаково.

  • Операционка должна знать, где находятся её собственные системные файлы, и где брать драйвера.

    Конечно, в Винде это частично проблема файловой системы - даже файловая система NTFS, которая, вроде бы, индексирована, на самом деле не обладает и сотой долей возможностей настоящей индексированной файловой системы - к примеру, ReiserFS. Но когда-то все файловые системы были неиндексированными, что не мешало разработчикам изобретать всевозможные способы знать, что где находится.

    В Винде есть свой способ знать, что где лежит: реестр (registry). Конечно, он предназначен совсем не для этого, а для хранения конфигурации, но основная идея ясна: существует база данных по настройкам. Так вот, надо было сделать похожую базу данных для всех-всех драйверов, всего поддерживаемого оборудования, и создать соответствующую матрицу «драйверы - поддерживаемое оборудование». В таком случае Винде не пришлось бы искать интересующие её файлы при подключении устройства, ни при первом, ни при любом другом.


    Техническая реализация

    На самом деле, техническая реализация такой базы данных была бы не чересчур сложной. У большинства производителей компьютерного железа есть свой номер производителя (четырёхзначное шестнадцатеричное число, к примеру, для чипсетов nVidia - 0×10de), у каждого товара есть свой номер (такое же число, к примеру, у видеокарточки GeForce 7600GT - 0×02e0). Поиск ячейки, соответствующей этому продукту, осуществляется за пару десятков операций. Оттуда есть прямой пойнтер на список драйверов, поддерживающих это устройство, рассортированный в порядке качества поддержки по убывающей (специальный драйвер для iRiver E100 будет стоять раньше в списке, чем просто драйвер флеш-памяти, который тоже работает с плеерами iRiver). Операционка начинает перебирать эти драйверы, пока не найдёт тот, с которым устройство согласится работать. Поскольку не имеет смысла включать устройство до того, как установлен его драйвер, можно предположить, что все драйвера, работающие с этим устройством, уже находятся в списке; в том числе драйвера, подгруженные с диска, и драйвера, скачанные с Сети автоматически.

    Фишка в том, что к драйверу прикреплён список файлов, нужных для его работы, с указанием их местоположения. Если драйвер подходит для этого устройства, нужные файлы перебрасываются в системные папки (если они ещё не там), и драйвер грузится в память.

    У всех драйверов список необходимых им файлов (с указанием их версий) встроен внутрь самого драйвера, равно как и список всех поддерживаемых этим драйвером устройств с указанием степени поддержки. Поэтому при подключении нового устройства надо просто найти все файлы драйверов, в том числе на подключаемых носителях (CD-ROM`ы и флешки) - для того я и говорил об индексируемых файловых системах. Но и без индексированных файловых систем можно обойтись.

    Процесс начала работы с устройством выглядит так:

    1. Устройство подключено.


    2. Запускается обновление списка драйверов.

      Это занимает считанные секунды, потому что файлы драйверов на жёстком диске отслеживаются операционной системой в фоновом режиме; значит, остаётся проверить только онлайновый репозиторий и подключаемые диски.

    3. Все найденные драйвера вносятся в матрицу драйверов.

    4. Операционка проходит по матрице драйверов в поисках производителя устройства, затем - в поисках самого устройства, и находит все драйвера, работающие с этим устройством.

    5. Драйверы из полученного списка проверяются последовательно.

    6. Если найден рабочий драйвер, он загружается в память; иначе ОС сообщает об ошибке.

    Особо отмечу, что загрузка компа состоит из последовательно подгружаемых драйверов устройств, что может быть реализовано точно так же.

    Система строится на том, что у каждого устройства есть свой уникальный номер, позволяющий его идентифицировать. Но это предположение не лишено здравого смысла.Идёт проверка патентабельности этой идеи.

    То есть способ решить эту проблему есть, просто надо взять и сделать это.

  • Никогда, никогда нельзя пользоваться шрифтом с варьирующейся шириной букв для того, чтобы печатать названия файлов.

    Названия файлов, папок и все пути должны быть прописаны исключительно шрифтами с постоянной шириной символов (fixed-width fonts). Равно как и логины, пароли, идентификаторы и вообще все данные, где разница между rn и m критична. Ну-ка, попробуйте быстро прочитать логин lIil|l1rnIil и сравните с lIil|l1rnIil. А если вы опечатались в одной из l? А у вас разрешение экрана 1600×1200 на 17" мониторе. Как вы будете искать ошибку?

  • Каждый драйвер должен быть самодостаточен.

    Если вместе с устройством идёт диск с драйвером, то на этом диске должно находиться всё необходимое, чтобы этот драйвер заработал. Все программы, все файлы, все драйвера, в общем - абсолютно всё. Если на диске будут куски операционной системы - ничего страшного, это даже необходимо, если есть шанс, что у пользователя эти куски почему-то не установлены, а устройство без них работать не будет. При использовании предложенной мною выше технической реализации не будет даже проблем с разными версиями одних и тех же файлов: операционная система просто положит их в разные места (пусть каждый драйвер хранится в отдельной папке) и будет знать, когда использовать один файл, а когда - другой.

Вот как это должно быть сделано.

Блин, я могу сделать этот мир лучше, дайте мне только капельку удачи, немного свободного времени и неограниченную власть!

дизайн

Previous post Next post
Up