Раз уж в нашем предыдущем посте мы пригласили всех желающих поучаствовать в добровольной помощи в разработке очередных версий 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-файлы, но не архивы или программы установки).
После создания структуры папок с новыми драйверами требуется заархивировать созданную папку (в примере – это папка «D») в соответствии с требованиями программы к архиву.
Размер слова: 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»
Более развернуто объяснение структуры приведено в таблице:
Сегодня жесткой привязки к структуре индекса нет, что называется, «свободный стиль».
Главное – это использовать маркеры операционных систем. Дополнительно есть маркеры для, практически, всех производителей ноутбуков.
При этом расположение и название папок и подпапок перестало иметь значение, единственное требование – наличие минимально одного маркера системы.
Фактически же маркер – конкретное название папки. Оно видно в названии одного из подкаталогов драйвер-пака: DRP\Drivers\DP_Chipset_14101.7z\Intel\WinAll\Chipset\9.4.0.1007_HECI\
В данном случае «WinAll» значит «все версии Windows».
Если при скачивании с нашего сайта обновленных драйвер-паков их имена файлов совпадают (например, старый и новый файл имеет имя «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.
У каждого пользователя на локальном компьютере собирается индекс всех драйверов, присутствующих в системе – в том числе и самой операционной системой. Его наличие позволяет ускорять поиск драйверов для установленных устройств, а в дальнейшем – и для их обновления. Другими словами – без индекса нельзя, его создание и дальнейшие обновления критическим образом сказываются на скорости и эффективности работы нашего приложения.
Герои 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.
gotch
Подскажите, а возможно ли извлечение драйверов из работающей ОС и формирование driver pack?
ArtX Автор
Конечно, это и есть пользовательский драйвер-пак.