Очень часто необходимо поставить драйверы к таким устройствам, как web-камера, карт-ридер, тач-пад, стек Bluetooth и др. В одной и той же модели ноутбука в зависимости от модификации или партии, поставок могут быть различные комплектующие. Скажем, ноутбук ASUS F5N мож комплектоваться видео камерами Azurewave, Suyin, LiteOn, Chicony, Bison, D-Max, Feiya (MVI SV).
То же самое касается и других устройств, таких как карт-ридеры. Самые популярные карт-ридеры — Ricoh.
При этом, вместе с ноутбуком или на сайте производителя могут одновременно присутствовать драйверы ко всем возможным моделям интегрируемых устройств. Когда драйверы еще не установлены, непонятно, какая модель используется в каждом конкретном ноутбуке.
Что делать в этом случае?
Во-первых, можно скачать все драйверы и ставить их по очереди перебором. Подходящий встанет корректно.
Второй вариант более корректный и быстрый.
Дело в том, что каждому устройству, производимому в мире, присваивается уникальный аппаратный идентификатор. Вернее 2 идентификатора (id) — vendor id (vid) и hardware id (device id). Первый соответствует номеру производителя железа, а второй — конкретному продукту этого производителя.
Физически этот шестнадцатиричный код зашит в регистры устройства. Шестнадцатиразрядный регистр Vendor ID выдаётся организацией PCI SIG. Шестнадцатиразрядный регистр Device ID назначается изготовителем устройства.
Полный список всех Vendor ID можо посмотреть здесь.
Автоматическая инициализация железа с помощью конфигурационного пространства
Для того, чтобы обращаться к устройству через адресное пространство памяти или ввода-вывода, системное программное обеспечение или ОС программирует базовые адресные регистры (Base Address Registers, также называемые BAR’ами), посылая конфигурационные команды контроллеру. В начале загрузки системы все устройства находятся в неактивном состоянии, им не назначены адреса, по которым драйвера устройств могут взаимодействовать с ними. Либо BIOS, либо сама операционная система, обращается к устройства при помощи адресации через чипсет или PCI-контроллер и настраивает BAR’ы в конфигурационном адресном пространстве. Значения BAR’ов действительны всё время, пока система включена. При отключении питания значения этих регистров теряются до следующей загрузки, в процессе которой процедура настройки повторяется.
Адресное пространство устройства как раз соответствуют первым адресным регистрам каждого устройства. Первые 2 байта такого адресного пространства как раз занимает Vendor ID, а в последующих двух прописан Device ID. То есть, если драйверы не установлены, операционная система не может корректно работать с устройством, но все равно может определить ID любого устройства, просто прочитав содержимое первых базовых адресных регистров.
Драйверы же, устанавливаются корректно только тогда, когда прописанный в них VID и DID соответствуют ID устройства. Обычно, эта информация прописана в ini-файлах типа setup.ini.
Содержимое такого файла выглядит примерно так:
HardwareID=USB\Vid_174F&Pid_A821
DriverName=USB2.0 VGA/1.3M/2M WebCam
HardwareID2=USB\Vid_174F&Pid_AA11
HardwareID3=USB\Vid_174F&Pid_A351
HardwareID4=USB\Vid_174F&Pid_A311
HardwareID5=USB\Vid_05E1&Pid_0501
HardwareID6=USB\Vid_174F&Pid_6A31
HardwareID7=USB\Vid_174F&Pid_6A33
HardwareID8=USB\Vid_174F&Pid_6A51
Как только драйвер будет установлен, в Диспетчере устройств будет прописано устройство с именем USB2.0 VGA/1.3M/2M WebCam.
Установка камеры по Vendor ID
Применительно к видео камерам ноутбуков это будет выглядеть следующим образом:
Войдите в Диспетчер устройств
Выберите устройство, для которого не установлены драйверы, для камеры «USB 2.0… WebCam» и войдите в Свойства.
Перейдите на закладку «Сведения» и выберите из Списка «Коды (ID) оборудования»
Проверьте Vendor ID (Vid_) и найдите драйвер нужного производителя:
- Azurewave ==> EB1A
- Suyin ==> 064E
- LiteOn ==> 0C45
- Chicony ==> 04F2
- Bison ==> 0402
- D-Max ==> 174F
- Feiya?MVI SV?==> 090C.
Затем убедитесь, что данный драйвер поддерживает данное устройство по PID и скачать его.