Pull to refresh

Драйвер-паки и их индексы

DriverPack Solution corporate blog Semantics *Development for Windows *
Раз уж в нашем предыдущем посте мы пригласили всех желающих поучаствовать в добровольной помощи в разработке очередных версий DRP, сегодня пришла пора рассказать о том, как именно мы создаем немаловажную вещь при работе с большими архивами драйверов (необходимые сис. админам и другим профессионалам, занимающимся «серийной» настройкой компьютеров) — индексы.

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


Герои Silicon Valley работают над оптимизацией собственных алгоритмов

Как строится пользовательский индекс драйверов


Для каждого устройства в системе есть свой уникальный номер (DevID).
Он отображается как в установках Windows, так и в программе DriverPack Solution. Уникальный для каждого устройства идентификатор (однозначно характеризующий каждое устройство), используется программой для автоматического «подбора» драйвера к нему.

База данных в программе содержит ID всех устройств, самостоятельно отслеживает версии драйверов для них, сопоставляет их версии и актуальность. В случае наличия в базе более новой версии, программа автоматически предлагает установить для устройства новый драйвер. Можно найти драйвер для конкретного устройства и самостоятельно в интернете, выбрав соответствующий режим поиска драйвера.

Для эффективной работы программы необходимы архивы драйверов (в формате "7z"), а для быстрого поиска по ним, требуется проиндексировать файлы, содержащиеся внутри.

Кроме уже содержащихся (довольно обширных) в программе архивов драйверов, DriverPack Solution предоставляет возможность создания пользовательских драйверпаков. Это актуально как при наличии нестандартного оборудования, так и «привязанности» операционной системы пользователя к некоторым типам (возможно устаревших) драйверов.

Новые драйвера после их разархивации «разбросаны» по папкам, которые содержат массу файлов, на первый взгляд, совершенно «ненужных» пользователю.

Для того, чтобы выбрать «нужные» файлы, требуется в распакованных файлах найти один с расширением *.inf.
Именно он содержит (в секции [SourceDisksFiles]) перечень необходимых файлов, по которому и требуется скопировать список файлов в предварительно созданную пользователем папку.

Примечание: если среди распакованных файлов нет .inf-файла, то автоматическое создание пакета драйверов невозможно. Настоятельно не рекомендуется удалять файлы с расширением *.САТ – сведения о цифровой подписи.

Как было раньше


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

Создается папка D (сокр. от «Drivers»), а драйверы помещаются в любую подпапку внутри директории D.
Имя подпапки (поддиректории) может быть любым, однако рекомендуется использовать максимально короткие имена. Стоит избегать длинных путей к файлам – это может привести к ошибкам и помешать установке.

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

В созданных папках драйверы разделяются по производителям, тем самым образуя подпапки.
Названия производителей также рекомендуется максимально сокращать. Например: «NVidia» – «N», «ATi» – «A» и т. д. Внутри папки с именем производителя драйверы располагаются в папках 1-9, при необходимости число папок может быть увеличено. После создания необходимой структуры папок поместите ваши драйверы в соответствующие подпапки (примечание: распакованные файлы, .inf-файлы, но не архивы или программы установки).

Название папки Английское название Пояснение
A Additions Дополнения
B Broadband Широкополосные сетевые устройства (*DSL-модемы и им подобные)
C Chipset Наборы системной логики (чипсеты)
CPU Central processor unit Центральный процессор (необходим для AMD K8)
D Dial-Up Модемы
G Graphics Видеоадаптеры (Графические карты)
L LAN Сетевые адаптеры
M Mass Storage Контроллеры жестких дисков
P Printers Принтеры
S Sound Звуковые адаптеры
VMWare VMWare Драйверы для виртуальной машины VMWare
W WLAN Беспроводные адаптеры
U USB USB-устройства (флешки, фотокамеры)
Y Misc Разное (Все что не попало в другие разделы)
Y Monitor Мониторы
Z Hid Устройства ввода (Интелектуальные мыши, клавиатуры тачпады и т.п.)

Процесс создания (пользовательских) пакетов драйверов


После создания структуры папок с новыми драйверами требуется заархивировать созданную папку (в примере – это папка «D») в соответствии с требованиями программы к архиву.

  • Имя архива: «DP_НазваниеПакетаДрайверов_ x86-32_ВерсияПакетаДрайверов.7z»
  • Требования: имя архива не должно содержать пробелов. Например, название пакета драйверов версии 9.06 для контроллеров жестких дисков должно быть таким: «DP_MassStorage_x86-32_906.7z.»
  • Формат архива: 7z
  • Уровень сжатия: «Ultra» (для обеспечения максимальной компрессии, при желании вы можете указать меньший уровень сжатия).
  • Метод сжатия: «LZMA» (значение установлено по умолчанию, изменять его не рекомендуется).
  • Размер словаря: 32 Mb

Размер слова: 256.

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

Индексные файлы хранятся в *.txt — формате, и находятся папке «Indexes» а не в «dev_db», как было ранее.

Структуру индексных файлов целесообразно рассмотреть на примере двух драйверов.

Содержимое индексного файла для 1-го:
«PCI\VEN_8086&DEV_24D5&SUBSYS_680316F3 Audio_w7x64_912.2\ Audio_w7x64_912.2\3\1\Alcwdm18.inf Realtek.NTamd64 06/19/2009,6.0.1.6305 Realtek AC'97 Audio»

Содержимое индексного файла для 2-го:
«HDAUDIO\FUNC_01&VEN_10DE&DEV_8067 Audio_w7x64_912.2\ Audio_w7x64_912.2\11\1\nvhda.inf VIDIA.NTamd64 11/11/2009,1.00.00.63 NVIDIA High Definition Audio»

Более развернуто объяснение структуры приведено в таблице:

Элементы структуры Драйвер 1 Драйвер 2
Device ID (идентификатор устройства) PCI\VEN_8086&DEV_24D5&SUBSYS_680316F3 HDAUDIO\FUNC_01&VEN_10DE&DEV_8067
Путь хранения драйвера в архиве Audio_w7x64_912.2\Audio_w7x64_912.2\3\1\ Audio_w7x64_912.2\Audio_w7x64_912.2\11\1\
Название inf-файла Alcwdm18.inf nvhda.inf
Тип Realtek.NTamd64 NVIDIA.NTamd64
Дата выпуска и версия 06/19/2009,6.0.1.6305 11/11/2009,1.00.00.63
Название устройства Realtek AC'97 Audio NVIDIA High Definition Audio

Текущие реалии


Сегодня жесткой привязки к структуре индекса нет, что называется, «свободный стиль».

Главное – это использовать маркеры операционных систем. Дополнительно есть маркеры для, практически, всех производителей ноутбуков.
При этом расположение и название папок и подпапок перестало иметь значение, единственное требование – наличие минимально одного маркера системы.

Фактически же маркер – конкретное название папки. Оно видно в названии одного из подкаталогов драйвер-пака: DRP\Drivers\DP_Chipset_14101.7z\Intel\WinAll\Chipset\9.4.0.1007_HECI\

В данном случае «WinAll» значит «все версии Windows».

Маркеры
Версия Windows = маркер (имя подпапки), характеризующий, что драйвер который находится внутри папки-маркера подходит для указанной ОС.

  • XP x64 =«5x64»;
  • XP x86 =«5x86»;
  • Vista x64 =«6x64|NTx64|AllNT|67x64»;
  • Vista x86 =«6x86|NTx86|AllNT|67x86»;
  • Windows 7 x64 =«7x64|NTx64|AllNT|67x64|78x64|781x64|7819x64»;
  • Windows 7 x86 =«7x86|NTx86|AllNT|67x86|78x86|781x86|7819x86»;
  • Windows 8 x64 =«8x64|NTx64|AllNT|78x64|All8x64»;
  • Windows 8 x86 =«8x86|NTx86|AllNT|78x86|All8x86»;
  • Windows 8.1 x64 =«81x64|NTx64|AllNT|781x64|7819x86|All8x64»;
  • Windows 8.1 x86 =«81x86|NTx86|AllNT|781x86|7819x86|All8x86»;
  • Windows 9 x64 =«9x64|NTx64|AllNT|7819x64|All8x64|81x64»;
  • Windows 9 x86 =«9x86|NTx86|AllNT|7819x86|All8x86|81x86»;
  • Windows 10 x64 =«10x64|NTx64|AllNT|78110x64|All8x64»;
  • Windows 10 x86 =«10x86|NTx86|AllNT|78110x86|All8x86»;
  • Все x64 =«Allx64»;
  • Все x86 =«Allx86»;
  • Все XP =«AllXP»;
  • Все Vista =«All6»;
  • Все Windows 7 =«All7»;
  • Все Windows 8 =«All8»;
  • Все Windows 8.1 =«All81»;
  • Все Windows 9 =«All9»;
  • Все Windows 10 =«All10»;
  • Любые Windows =«WinAll»;

Маркеры ноутбуков


Маркер-папка с названием производителя ноутбука = слово, используемое самим производителем для идентификации его ноутбуков

  • Acer_nb = acer / emachines / packard*bell / gateway / aspire
  • Apple_nb = apple
  • Asus_nb = asus
  • Dell_nb = dell / alienware / arima / jetway / gericom
  • Fujitsu_nb = fujitsu / siemens
  • Gigabyte_nb = gigabyte
  • HP_nb = hp / compaq
  • Lenovo_nb = lenovo / compal / ibm
  • LG_nb = lg
  • MSI_nb = msi / micro-star
  • NEC_nb = nec
  • Panasonic_nb = panasonic / matsushita
  • Samsung_nb = samsung
  • Sony_nb = sony / vaio
  • Toshiba_nb = toshiba
  • OEM_nb = другие вендоры (benq / clevo / depo / durabook / ecs / elitegroup / eurocom / getac / intel / iru / k-systems / medion / mitac / mtc / nokia / pegatron / prolink / quanta / sager / shuttle / twinhead / rover / roverbook / viewbook / viewsonic / vizio / wistron и т.д.)


Текущий индекс


Если при скачивании с нашего сайта обновленных драйвер-паков их имена файлов совпадают (например, старый и новый файл имеет имя «DP_Chipset_14112.7z»), можно просто заменить старые файлы новыми.
При наличии такого же файла, но с меньшим номером, его можно удалить: скачали «DP_Chipset_14112.7z», но в папке есть «DP_Chipset_14111.7z» — файл с меньшим номером версии «DP_Chipset_14111.7z» можно удалить.

Индексируем новые драйвер-паки (создаем списки поддерживаемых устройств).
Если старые индексы удалены, то при запуске DRP, программа автоматически попросит вас произвести индексацию новых драйвер-паков — например программа для нового драйвер-пака «DP_Chipset_14112.7z» создает файлы-индекса «DP_Chipset_14112_xxx.xxx» в соответствующей папке в «X:\DRP\Indexes\».

Можно также удалить и старые индексы.
В папке «Indexes» необходимо удалить все файлы старого драйвер-пака.
Имени файла индекса соответствуют имя драйвер-пака и найти его легко. Например, вы скачали драйвер-пак «DP_Chipset_14112.7z» а у вас был «DP_Chipset_14111.7z», соответственно удаляем все файлы-индексы «DP_Chipset_14111_xxx.xxx», если же и скаченный и старый драйвер-пак имеют одинаковое имя например «DP_Chipset_14112.7z», то индексы «DP_Chipset_14112_xxx.xxx» также нужно удалить т.к. список поддерживаемых устройств в новой версии драйвер-пака может отличаться.

Если вам лень выискивать нужный для удаления индекс — можно удалить все папку «Indexes» и тогда программа будет создавать индексы для всех драйвер-паков, а не только для нового, что займет больше времени, но результат будет идентичным.

Надеемся, что данное руководство по созданию индекса драйверов будет полезно не только разработчикам DriverPack Solution.
Tags:
Hubs:
Total votes 21: ↑19 and ↓2 +17
Views 19K
Comments Comments 6

Information

Founded
Location
Россия
Website
drp.su
Employees
2–10 employees
Registered