Создание пакета драйверов

Автор: Вим Лирс (Wim Leers), Артём Васьков aka Fanzuga
Иcточник: DriverPacks.net, unattended.oszone.net
Опубликована: 25.09.2006

Данная статья описывает самостоятельное создание пакетов драйверов, для автоматической установки вместе с операционной системой. Руководство рассчитано на применение совместно с официальным интегратором пакетов от Bashrat the Sneaky DriverPacks BASE (доступен для загрузки по этой ссылке) или с аддоном «Интеграция драйверов» от Boa Soft (последняя версия доступна по этой ссылке).

Первая редакция статьи представляла собой точный перевод руководства, которое написал Bashrat the Sneaky. Сообщение на форуме, послужившее основой вышеупомянутого руководства и его обсуждение доступны по адресу: http://forum.driverpacks.net/viewtopic.php?pid=5 (EN). Вашему вниманию предлагается вторая редакция статьи. В ней Артем Васьков, изначально выполнивший перевод руководства, делится уже собственным опытом создания пакетов драйверов. Тем не менее, руководство является частью данной статьи.

Введение

Использование пакетов драйверов является наиболее удобным и универсальным способом автоматической установки драйверов, вместе с операционной системой. Однако, «официальные» пакеты Bashrat the Sneaky и его команды не могут охватить всего многообразия компьютерного оборудования. Основными причинами самостоятельного создания пакета драйверов может служить следующее:

Тогда данное руководство для Вас!

Как Вы сможете убедиться далее, собственно подготовка пакета драйверов не представляет из себя ничего сложного. Основные сложности сосредоточены в интеграции драйверов в дистрибутив операционной системы. Однако, почти всю рутинную работу по интеграции проделает за Вас интегратор DriverPacks BASE или аддон «Интеграция драйверов».

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

1. Загрузка драйверов

Для начала Вам нужно обзавестись необходимыми драйверами. Начните с сайта производителя Вашего оборудования. Если искомый драйвер там не обнаружен, попытайтесь отыскать его при помощи поисковой системы (например, Google).

2. Распаковка драйверов

Теперь мы должны извлечь драйверы из инсталлятора или архива. Лично я предпочитаю 7-zip, но Вы можете использовать любой (ну или почти любой) архиватор, способный это сделать. Правой кнопкой мыши щелкните по архиву с драйверами или по файлу программы установки и выберите пункт меню Распаковать (Extract files...), или что-то подобное. Выберите папку для распаковки и разархивируйте файлы.

Следующий раздел может испугать некоторых начинающих пользователей, однако в конце все будет подробно разъяснено. Вместо того, чтобы использовать все файлы, которые мы распаковали, мы должны выбрать только необходимые файлы, или другими словами убрать мусор. Как же это сделать? В 95% случаев работает следующий способ: откройте INF-файл Вашего драйвера, найдите секцию [SourceDisksFiles] и убедитесь в том, что Вы сохранили все файлы, перечисленные в ней!

Примечание. Для того чтобы сохранить сведения о цифровой подписи, не удаляйте сопутствующие CAT-файлы! CAT-файлы могут отсутствовать, если драйвер не имеет цифровой подписи.

Примечание. Редактирование inf-файла делает цифровую подпись недействительной. Поэтому если вы каким-либо образом изменили содержимое INF-файла из него можно удалить строку CatalogFile=имя_файла_цифровой_подписи.cat, а также одноименный CAT-файл из каталога с драйвером.

3. Создание пакета драйверов.

Это очень просто! Создайте папку D и поместите ваши драйверы в любую подпапку внутри ее. Имя подпапки может быть любым, но я рекомендую использовать для этих подпапок максимально короткие имена. В противном случае значение параметра OemPnPDriversPath в файле может оказаться слишком длинным (максимум 4096 знаков, а для установки при помощи winnt.exe/winnt32.exe только 1024 знака) и помешать успешной установке. После создания необходимой структуры папок поместите ваши драйверы в соответствующие подпапки (распакованные файлы, INF-файлы, но не архивы или программы установки, помните?).

Например, создайте следующую структуру:

Driver Pack structure

Пример с реальными названиями

Driver Pack structure

Примечание. Ранее папка D\3\ для неофициальных (создаваемых самостоятельно) пакетов драйверов не являлось обязательным условием. При использовании интегратора от Bashrat версии 6.05 и выше данное требование является обязательным для обеспечения функциональности KTD с неофициальными пакетами драйверов. Для аддона «Интеграция драйверов» это условие необязательно.

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

Название папки

Содержимое

Английское название

Пояснение

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-устройства (флэшки, фотокамеры)

X

Misc

Разное (все, что не попало в остальные разделы)

Y

Monitor

Мониторы

Z

HID

Устройства ввода (интеллектуальные мыши, клавиатуры, тачпады и т. п.)

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

Далее в перечисленных выше папках драйверы разделяются по производителям. Названия производителей также рекомендуется максимально сокращать. Например: NVidia – N, ATi – A и т. д.

Внутри папки с именем производителя разные драйверы, как правило, располагаются в папках 1-9.

Это почти все! Правой кнопкой мыши щелкните по папке с пакетом драйверов и выберите Добавить к архиву… (Add files to archive...). Выберите следующие параметры архивации:

Driver Pack archive

Рисунок 1 - Создание архива

Можно также создать архив при помощи командной строки, а также включить данную команду в состав пакетного файла. Для этого необходима консольная версия архиватора 7-zip. Команда будет следующей:

7za a DP_Название_пакета_драйверов_wnt5_x86-32_RP.7Z D\* -m0=BCJ2 -m1=LZMA:d25:fb255 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1 -mb0s1:2 -mb0s2:3 -mx

4. Использование неподписанных драйверов

Возможно, вы захотите использовать в своем пакете драйверы без цифровой подписи (в каталоге с драйвером нет CAT-файлов). Несмотря на то, что и в официальном интеграторе DriverPacks BASE и в аддоне «Интеграция драйверов» содержится утилита, блокирующая проверку цифровой подписи, проблема с неустановкой неподписанных драйверов решена лишь частично. При установке драйверов ОС Windows использует следующий приоритет (по убывающей):

  1. Новый подписанный драйвер из пакета драйверов.

  2. Старый подписанный из дистрибутива Windows.

  3. Новый неподписанный драйвер из пакета драйверов.

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

Поэтому рекомендуется максимально возможно использовать подписанные драйверы (именно такой подход и использует Bashrat the Sneaky, избегая бета-версий и используя несертифицированные драйверы только в случае отсутствия прямых аналогов).

Обходным путем решения проблемы является удаление старых драйверов из дистрибутива системы. Упрощенно говоря, большая часть драйверов содержится в файлах DRIVER.CAB и SP2.CAB, а сжатые INF-файлы находятся в директории I386. Поэтому необходимо распаковать данный файл удалить, ненужные драйверы и запаковать файл обратно, а также удалить соответствующие INF-файлы из папки I386 и ссылки на них. Хотя теоретически можно выполнить это вручную, на практике это весьма трудоемко и может грозить многочисленными ошибками при установке.

Автоматизировать эту операцию поможет скрипт RusUpdatePack от участника конференции OSZone.net Petya V4sechkin. Данный скрипт поддерживает использование аддонов для удаления ненужных компонентов из дистрибутива ОС. Уже созданы аддоны для удаления драйверов от видеокарт и сетевых адаптеров. По сути аддон «Удаление компонентов» представляет собой список удаляемых файлов. Дальнейшую работу по перепаковке дистрибутива и удалению ссылок на удаленные файлы автоматически проделывает скрипт.

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

5. Автоматическая установка дополнений (панелей управления и т. д.) к драйверам

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

  1. Тихая установка.

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

Если с решением первой проблемы нам поможет разобраться раздел Приложения, то вторую проблему рассмотрим подробнее здесь.

В официальных пакетах, а также при интеграции, рассчитанной на использование интегратора DriverPacks BASE, для установки дополнений служит программа DPFinisher.exe. За документацией к ней рекомендую обратиться на «сайт производителя» www.driverpacks.net.

В аддоне BoaSoft установкой обновлений занимается командный файл Panels.cmd. Рассмотрим его работу на примере:

REM Проверяем наличие инсталлятора контрольной панели
IF EXIST %C%\ATI\CCP\Setup.exe (
REM Проверяем наличие установленного драйвера
IF EXIST %DRV%\ati2mtag.sys (
REM Если оба условия верны пишем сообщение в лог и переходим к установке
ECHO. >> %LOG%
ECHO %DATE% %TIME% >> %LOG%
ECHO Old Ati driver found >> %LOG%
ECHO Install Ati control panel >> %LOG%
REM Запускаем установку панели управления с ключами тихой установки
START /WAIT %C%\ATI\CCP\Setup.exe -s -f1 %C%\ATI\CCP\shortcut.iss
)
)
REM Переходим к проверке наличия следующего драйвера и установке следующих панелей

Таким образом, чтобы добавить собственные дополнения, необходимо внести в файл Panels.cmd секцию по образу и подобию вышеприведенной. Разумеется не забывайте изменять пути, имена файлов и ключи для тихой установки.

6. Использование пакета драйверов

Напоследок несколько слов об использовании Вашего пакета. Фактически этот абзац добавлен шутки ради. Все и так просто. Нужно поместить Ваш пакет драйверов в папку DriverPacks интегратора DriverPacks BASE (или в соответствующую папку аддона). После этого остается лишь запустить пакетный файл, выбрать метод интеграции драйверов и все! Не нужно больше вносить изменения в файлы winnt.sif и txtsetup.sif. Вообще больше ничего не нужно делать!


Ссылка: http://www.oszone.net/4085/Driver_Pack_Creation