Приветствую!
Недавно с удивление обнаружил, что один и тот же самый комп ведёт себя по-разному в режиме LEGACY и EFI.
Имеется самописный софт, который работает с видеокамерами. Он основан на каком-то опенсорсном драйвере видеозахвата. Так вот, сей драйвер, стоит переключиться в EFI режим, перестаёт распознавать адресацию плат захвата. Гонит все обращения в 0xFFFFFF и, понятно, ничего не работает. Честно говоря, я всегда полагал, что EFI - то же самое, что и BIOS, только с поддержкой GPT, но, видимо, это не так.
Как говорится, any ideas, guys?
Очень влияет.
UEFI это не просто кусок какой-то прошивки в мелкой микрухе а вполне можно расценивать как вторую ОС, в нормальном режиме она берёт на себя большую часть инициализации оборудования, проверки ключей подписи прошивок в тех-же PCI устройствах и вообще дофига чего там может быть натыкано и зависит от фантазии разработчика МП.
Современное железо уже разрабатывается с учётом требований UEFI к железкам, старые девайсы соответственно не в курсе веяний моды да и врятли когда либо получат обновление прошивок для коректной работы, тут даже не жадность производителя старой железки и нежелание заморачиваться а вполне себе архитектурные заморочки.
На десктопных матерях как правило выбор только из UEFI/Legasy для всего скопом, в серверных, часто можно встретить конфигурацию совместимости для каждого устройства и даёт возможность отключить для девайса вмешаельство UEFI модулей в его работу.
P.S. Не разбирался глубоко в вопросе "как заставить работать", просто нет такой необходимости.
Ответ на вопрос в моём случае таков:
В режиме LEGACY "unknown" устройства получали "авансом" IRQ. При загрузке в режиме UEFI - соответственно, не получали. Посему, драйвер, реализованный как service, не видя IRQ гнал обращения куда-то в сторону NULL.
Решение - инициализация устройства любым драйвером, дабы оно перестало быть "unknown" и получило прерывание. Затем, с ним работает универсальный драйвер-сервис, по низкому уровню, игнорируя назначенные устройству в диспетчере "дрова".
Евгений Михалев, это значит, что устройство должно получить IRQ, любым способом. Насколько подходящий будет драйвер - не важно. В дальнейшем он не будет использоваться. Система видеонаблюдения далее работает с устройством "напрямую" при помощи универсального DirectShow драйвера, который устанавливается в службы, и ему всё равно что показывает диспетчер оборудования.