Список устройств Pci больше не загружается

Обновлено: 21.11.2024

Передача PCI позволяет вам передать управление физическими устройствами гостям: то есть вы можете использовать сквозную передачу PCI для назначения PCI-устройства (сетевой платы, контроллера диска, адаптера главной шины, контроллера USB, контроллера FireWire, звуковой карты и т. д.) виртуальному гостевой компьютер, предоставляя ему полный и прямой доступ к устройству PCI.

Есть несколько потенциальных применений, в том числе следующие:

  • Одними из основных накладных расходов при работе с виртуальными сетями являются неизбежные затраты на копирование; передача через сетевую карту напрямую полностью исключает эти накладные расходы.
  • Передача видеокарт гостям дает им полный доступ к возможностям 3D-ускорения. Это может быть полезно не только для настольных компьютеров, но и для включения виртуальных рабочих столов, например, для опытных пользователей САПР.
  • Вы можете настроить домен драйвера, который повысит безопасность и надежность вашей системы.

Содержание

Устройства PCI указаны в нотации BDF. Вы можете определить BDF для устройства, запустив lspci в домене 0.

Домен 0 отвечает за все устройства в системе. Обычно, когда он обнаруживает устройства PCI, он передает их драйверам в ядре Linux. Чтобы гость мог получить доступ к устройству, оно должно быть назначено специальному драйверу домена 0. Этот драйвер называется xen-pciback в ядрах pvops и называется pciback в классических ядрах. Гости PV получают доступ к устройству через драйвер ядра в гостевой системе под названием xen-pcifront (pcifront в классических ядрах xen), который подключается к pciback. Гости HVM видят устройство на эмулируемой шине PCI, представленной QEMU.

Гости могут настраивать DMA для устройств, но доступ к конфигурационному пространству PCI должен быть разрешен по соображениям безопасности. Для гостей HVM это делает qemu. Для гостей PV это делается драйвером pciback в dom0.

Обычно устройствам разрешено выполнять прямой доступ к памяти к любой части физической памяти хоста и из нее. Это представляет две проблемы. Во-первых, это потенциальная проблема надежности или безопасности: гость с ошибочным драйвером может случайно перезаписать часть памяти Xen; гость, контролируемый злоумышленником, мог читать и записывать память других гостей. Во-вторых, представление гостя о структуре памяти виртуализируется, а представление устройства — нет. Гости PV могут преодолеть это, потому что они могут «заглянуть за» структуру виртуализированной памяти; но гости HVM не могут.

Решение обоих этих вопросов называется IOMMU. (Название Intel для функции IOMMU — VT-d; в этом документе IOMMU будет использоваться для обозначения функций AMD и Intel.) IOMMU позволяет Xen ограничивать объем памяти, к которой разрешен доступ устройству. Это также позволяет Xen предоставить устройству ту же структуру виртуализированной памяти, которую видит гость. Это решает как проблему безопасности, так и проблему виртуализации памяти.

(Обратите внимание, что поддержка IOMMU/VT-d — это не то же самое, что поддержка HVM; возможна поддержка HVM без IOMMU или наоборот.)

По этим причинам настоятельно рекомендуется использовать сквозную передачу только в системах с IOMMU. В системах без IOMMU устройства могут передаваться доверенным гостям PV, но при этом теряются преимущества безопасности или стабильности (но не преимущества производительности). Устройства не могут передаваться гостевым HVM в системах без IOMMU.

Определение того, есть ли у вас поддержка IOMMU / VT-d, описано в разделе часто задаваемых вопросов ниже.

Подготовка устройства к транзиту

Сначала определите BDF устройства, через которое вы хотите пройти. Обычно это делается путем запуска lspci в гостевой системе.

Затем вам нужно назначить устройство pciback вместо его обычного драйвера в dom0, чтобы сделать его доступным для гостей. Это можно сделать статически, во время загрузки или динамически, после загрузки системы. Статическая менее гибкая и требует перезагрузки системы каждый раз, когда вы хотите что-то изменить. Динамический является наиболее гибким и не требует перезагрузки, но требует больше шагов, особенно до Xen 4.2. Если xen-pciback скомпилирован в ваше ядро, статический вариант — самый простой вариант; если xen-pciback скомпилирован как модуль, это самый сложный вариант.

Параметры перечислены ниже в порядке удобства использования.

Статическое назначение для встроенного xen-pciback (когда xen-pciback компилируется в ядро ​​и НЕ загружается как модуль)

Если у вас есть pciback, встроенный в ваше ядро ​​(то есть не собранный как модуль), передайте BDF в опции "hide" модулю xen-pciback в командной строке ядра dom0. Например, если вы хотите пройти через устройства в BDF 08:00.0 и 08:00.1, вы должны добавить следующее в командную строку ядра Linux dom0:

(Если вы используете классическое ядро ​​xen, используйте вместо этого " pciback.hide=. ".) Это скроет устройства от обычных гостевых драйверов и назначит их pciback при загрузке.

Динамическое назначение с xl (когда xen-pciback загружается как модуль и НЕ компилируется в ядро)

(Эта опция доступна только в Xen 4.2.) Начните с того, что убедитесь, что в dom0 загружен модуль pciback:

(Или modprobe pciback для классических ядер Xen.)

Затем сделайте устройство назначаемым с помощью xl pci-assignable-add . Например, если вы хотите сделать устройство в BDF 08:00.0 доступным для гостей, вы можете ввести следующее:

Динамическое назначение с помощью sysfs (когда xen-pciback загружается как модуль, а НЕ компилируется в ядро)

Если вы не используете xl или используете Xen 4.1 или более раннюю версию, вы можете назначить устройство вручную с помощью команд Linux sysfs.

Начните с того, что убедитесь, что в dom0 загружен модуль pciback:

(Или modprobe pciback для классических ядер Xen.)

  • Отвязать от старого драйвера
  • Создайте новый слот в pciback для устройства.
  • Привязать к pciback

Ниже приведены команды для этого для BDF 08:00.0. Обратите внимание, что для sysfs домен также требуется как часть BDF. Это почти всегда 0000.

Обратите внимание, что первая команда (unbind) имеет BDF в пути, а также эхо. Также обратите внимание, что это путь «pciback», а не «xen-pciback», даже для ядер pvops.

В качестве альтернативы вы можете использовать этот скрипт (pciback.sh):

Статическое назначение для модуля xen-pciback (когда xen-pciback загружается как модуль, а НЕ компилируется в ядро)

Основные параметры статического назначения при сборке xen-pciback в виде модуля аналогичны параметрам встроенного статического назначения выше. Проблема, однако, в том, что xen-pciback должен быть загружен до того, как любой другой модуль попытается захватить это устройство. Для этого вам нужно изменить /etc/modprobe.conf, чтобы ввести зависимость между обычным модулем, содержащим драйвер для устройства, и pciback.

Для этого сначала определите модуль, который вам нужен для зависимости. Самый простой способ сделать это — использовать lspci -k , в котором перечислены драйверы, которые в данный момент его используют. Например, если вы хотите узнать драйвер для устройства в BDF 08:00.0:

Итак, модуль называется tg3. Теперь добавьте в файл /etc/modprobe.conf следующую строку:

И, наконец, добавьте строку, указывающую pciback, что нужно захватить его:

Возможно, вам также потребуется обновить файл initrd. При следующей загрузке устройство должно быть назначено pciback.

Проверка готовности устройства к передаче

На этом этапе устройство готово для назначения гостю. Вы можете проверить это одним из следующих способов:

  • При использовании xm:
  • Использование xl для Xen 4.2 или более поздней версии:

Гостевая конфигурация

Гости HVM не требуют специальной настройки гостевого ядра, поскольку все доступы эмулируются и виртуализируются аппаратным обеспечением IOMMU.

Гости PV нуждаются в модуле xen-pcifront (просто pcifront для классических ядер Xen). Кроме того, вы должны включить swiotlb в командной строке гостевого ядра. Для ядер pvops вы добавляете следующее:

Для классических ядер Xen (xenlinux) вместо этого добавьте следующее:

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

Файл конфигурации для domU

Предположим, вы хотите пройти через устройства в BDF 08:00.0 и 08:00.1. Добавьте следующую строку в файл конфигурации:

Горячее подключение

Команды для горячего подключения и отключения устройства от работающей ВМ приведены ниже:

(Замените xl на xm, если вы используете xend .)

Гости PV и особенности PCI

Как упоминалось выше, доступ к конфигурационному пространству PCI разрешается pciback для гостей PV. К сожалению, pciback часто слишком строг в отношении того, что он не разрешает, и вы получите сообщение об ошибке, подобное этому:

Самый простой способ обойти это — включить разрешающий режим.

Разрешающий режим для xl

(Это доступно только для xl в Xen 4.2 или более поздних версиях.)
Чтобы включить разрешающий режим для устройства, использующего xl, вы можете включить его для всех устройств для данного домена в конфигурации /etc/xen/ файл, например:

Или вы можете добавить ",permissive=1" в BDF определенного устройства по мере его прохождения либо в файле конфигурации:

или при горячем подключении:

Разрешающий режим для xm/xend

xend работает немного иначе, чем xl; вместо того, чтобы указывать конкретное устройство для определенного домена, он имеет глобальный список устройств, которые он позволяет установить как «разрешающие» в /etc/xen/xend-pci-permissive.sxp .

Сначала найдите шестнадцатеричный идентификатор поставщика устройства, через которое вы хотите передать данные, используя lspci -nn :

Таким образом, шестнадцатеричный идентификатор поставщика равен 14e4:1678 . Теперь добавьте этот код в /etc/xen/xend-pci-permissive.sxp в разделе unconstrained_dev_ids. Конечный результат должен выглядеть так:

Включение разрешительного режима вручную

К сожалению, в xl версии 4.1 не реализован способ автоматического включения разрешающего режима. Единственный способ включить его — сделать это вручную. К счастью, это довольно просто. После того, как устройство назначено pciback, но до запуска ВМ, выполните следующие действия:

Режимы серверной части драйвера Xen dom0 pciback

Список режимов pciback Xen, которые можно установить в конфигурации ядра (файл .config) в ядре xen/stable-2.6.32.x:

  • CONFIG_XEN_PCIDEV_BACKEND_PASS=y означает, что PCI-устройство получает тот же идентификатор PCI в гостевой системе, что и в dom0.
  • CONFIG_XEN_PCIDEV_BACKEND_VPCI=y означает, что устройство PCI получает виртуальный идентификатор PCI в гостевой системе, а не тот же идентификатор PCI, что и в dom0.

Обратите внимание, что в исходной версии Linux 3.1.0 и более поздних версиях вы можете установить PASS/VCPI в качестве параметра модуля/драйвера при загрузке драйвера!

Вы можете использовать следующую командную строку ядра Linux dom0 в файле grub.conf (если xen-pciback встроен в ядро):

или следующее, если загружается драйвер xen-pciback как модуль:

В Linux 3.1+ это даст то же поведение, что и предыдущая опция CONFIG_XEN_PCIDEV_BACKEND_PASS .config.

Ограничения сквозного доступа Xen PCI

Если гость использует транзитные устройства PCI, такие операции, как сохранение/восстановление/миграция, невозможны. Перед сохранением, восстановлением или динамической миграцией необходимо отключить (отключить) транзитное устройство.

Проход через графический адаптер Xen VGA

Пожалуйста, посетите вики-страницу XenVGAPassthrough для получения дополнительной информации о сквозном подключении графической карты VGA.

Как узнать, есть ли у меня поддержка IOMMU/VT-D?

Чтобы убедиться, что у вас включена поддержка IOMMU:

  • Проверьте, включен ли IOMMU (Intel VT-d или AMD IOMMU) в BIOS системы. Некоторые BIOS называют эту функцию «виртуализацией ввода-вывода» или «направленным вводом-выводом». После изменения настроек в BIOS убедитесь, что вы полностью выключили машину, отсоедините шнур питания, дайте ей поработать некоторое время без питания, а затем перезапустите систему. Известно, что некоторые системы не включают IOMMU по-настоящему, пока вы полностью не отключите систему!
  • При использовании Xen 3.4.x (или более ранней версии) необходимо добавить флаг iommu=1 (или vtd=1 в еще более старых версиях) для гипервизора Xen (xen.gz) в grub.conf и перезагрузить компьютер. Xen 4.0.0 и более поздние версии включают поддержку IOMMU по умолчанию, если она поддерживается аппаратным обеспечением и BIOS, для гипервизора не требуются дополнительные загрузочные флаги.
  • прочитайте загрузочные сообщения гипервизора Xen "xm dmesg" и проверьте, включена ли "виртуализация ввода-вывода".
  • К сожалению, существует множество ошибок в BIOS, из-за которых Xen отключает виртуализацию ввода-вывода из-за ошибок в таблицах DMAR/ACPI BIOS. Xen пытается обойти эти ошибки в BIOS, но иногда это невозможно. Если виртуализация ввода-вывода будет отключена из-за ошибок в BIOS, сообщите все подробности о вашем оборудовании и программном обеспечении в список рассылки xen-devel. Также см. ниже советы по устранению неполадок.

Пожалуйста, посетите вики-страницу VTdHowTo для получения дополнительной информации о переходе PCI к гостевой машине Xen HVM.

Я получаю сообщение об ошибке "MMIO BAR, не выровненное по странице" при попытке запустить гостевую систему

замените "01:00.0" и "01:02.0" вашими фактическими устройствами PCI, которые вы хотите передать. Обратите внимание на "," для разделения записей.

Если вы используете Linux 2.6.31 или более новое ядро ​​pvops dom0, тогда нет guestdev/reassign_resources, но вместо этого вы используете:

Если вы используете Linux 2.6.31 или более новое ядро ​​dom0, основанное на исправлениях Novell/SLES/OpenSuse Xenlinux, перенесенных на более ранние версии, используйте следующий синтаксис:

Обратите внимание на ";" для разделения нескольких записей PCI ID для "pci=resource_alignment".

Если вы используете GRUB2 и resource_alignment для нескольких устройств, вам необходимо заключить resource_alignment в одинарные кавычки следующим образом:

Я получаю сообщение об ошибке "Ошибка: pci: 0000:02:06.0 должен быть назначен тому же гостю с 0000:02:05.0" при попытке запустить гостевую систему

Если вы хотите вручную переопределить это в Xen 4.0.0 или новее, вы можете указать «pci-passthrough-strict-check no» в /etc/xen/xend-config.sxp, и после перезапуска кода xend passthru больше не выдавать эту ошибку. В некоторых (многих?) случаях PCI passthru может работать после этого изменения.

Если устройство PCI однофункциональное, вы также можете переместить его в другой слот PCI, чтобы обойти проблему.

Я получаю сообщение "Паника ядра - не синхронизация: не удалось получить непрерывную память для прямого доступа к памяти от Xen!" при попытке запустить гостя с помощью iommu=soft

Может помочь ограничение максимальной памяти dom0.

(Не забудьте запустить update-grub)

Для получения дополнительной информации см.:


Примечание: если ваш гость автоматически не запускается с iommu=soft, попробуйте добавить Earlyprintk=xen в параметры ядра гостевой системы.

Xen 4.0.0 говорит, что виртуализация ввода-вывода отключена. Как я могу включить более подробное ведение журнала, чтобы узнать, почему она отключена?

Добавьте параметр «iommu=verbose» для гипервизора Xen (xen.gz) в grub.conf и перезагрузите компьютер. После перезагрузки прочитайте журнал "xm dmesg" (или настройте последовательную консоль).По умолчанию Xen 4.0.0 не содержит подробностей об инициализации IOMMU и связанном с ней анализе таблиц ACPI DMAR.

На моем оборудовании/материнской плате есть IOMMU, но Xen не поддерживает аппаратную виртуализацию ввода-вывода!

К сожалению, многие материнские платы поставляются со сломанным BIOS (например, неверные таблицы ACPI DMAR, DRHD или RMRR), из-за чего Xen отключает виртуализацию ввода-вывода в качестве меры безопасности или для предотвращения сбоев в будущем.

Вы можете проверить, включил ли Xen виртуализацию ввода-вывода, запустив команду "xm dmesg" и прочитав журнал. Там есть строка о виртуализации ввода-вывода, сообщающая, включена она или отключена. Для работы IOMMU (VT-d) необходимо иметь как минимум Xen 3.4 или новее.

Если виртуализация ввода-вывода отключена, но доступна на вашем оборудовании, попробуйте выполнить следующие действия для ее устранения:

Что такое обозначение BDF идентификатора устройства PCI?

Дополнительную информацию см. на вики-странице BDFNotation.

Как проверить, поддерживает ли PCI-устройство FLR (сброс функционального уровня)?

Запустите "lspci -vv" (в dom0) и проверьте, есть ли на устройстве "FLReset+" в поле DevCap.

Если вы являетесь пользователем Ubuntu/Debian, не забудьте добавить sudo впереди, иначе вы не получите ожидаемого результата.

sudo lspci -vv | egrep -i --color flreset

Вышеприведенная строка должна получить корневой доступ для программы lspci и показать цвет с помощью flreset, найденного в выходных данных

заглушка PCI?

pci-stub можно использовать только с гостевым PCI-проходом Xen HVM, поэтому вместо этого рекомендуется использовать pciback, который работает как для гостевых систем PV, так и для гостевых систем HVM.

Вредоносный код микропрограммы x86/x64 потенциально может находиться во многих местах. Один из них находится в ПЗУ расширения PCI. В прошлом небольшой объем памяти во время выполнения ПЗУ расширения PCI служил препятствием для этого вредоносного кода. Ограниченное пространство для кодов и данных ограничивало возможные задачи, которые могли выполнять такие вредоносные коды. Однако в этой статье объясняется, как вредоносное ПЗУ расширения PCI может использовать малоизвестный интерфейс управления памятью BIOS для преодоления «барьера» памяти, тем самым создавая потенциально более сложную угрозу. Обсуждение в этой статье ограничивается ПЗУ расширения PCI, соответствующим спецификации микропрограммы PCI версии 3.1. В этой статье мы не будем углубляться в ПЗУ расширения EFI, несмотря на то, что темы очень тесно связаны между собой. ПЗУ расширения EFI будет представлено позже в другой статье.

Что такое ПЗУ расширения PCI?

Прежде чем я углублюсь в то, как вредоносный код ПЗУ расширения PCI может использовать подпрограмму управления памятью в BIOS, важно, чтобы вы знали основы ПЗУ расширения PCI. В следующем разделе представлена ​​основная справочная информация о ПЗУ расширения PCI.

Инициализация устройства PCI

ПЗУ расширения PCI — это код, выполняемый во время инициализации BIOS, который инициализирует определенные типы устройств PCI/PCI Express. (С этого момента PCI Express будет обозначаться аббревиатурой PCIe.) Термин «устройство» в этом контексте относится к логическому, а не физическому устройству PCI/PCIe. Спецификация PCI охватывает подробное определение этого логического устройства. Устройства PCIe обратно совместимы с PCI на логическом уровне. Таким образом, с точки зрения программиста, устройства PCIe выглядят точно так же, как устройства PCI. Конечно, есть несколько принципиальных отличий, но они являются «расширениями» базовой спецификации PCI. Для целей этой статьи вы можете рассматривать PCI и PCIe как взаимозаменяемые, за исключением случаев, когда я специально указываю, что вопрос зависит от PCI или от PCIe.

Один физический чип PCI (скажем, чип контроллера Ethernet) может содержать более одного логического устройства PCI. Каждое логическое устройство PCI имеет соответствующий набор регистров конфигурации PCI в пространстве конфигурации PCI. В архитектуре x86/x64 пространство конфигурации PCI определяется как: 256 (100h) байтов регистров конфигурации PCI (для каждого логического устройства PCI), доступ к которым осуществляется через два 32-разрядных порта на порте ввода-вывода CF8h-CFBh и CFCh-CFFh. соответственно. Порт CF8h-CFBh — это «индексный» порт, используемый для указания на конкретный 32-битный регистр конфигурации PCI в пространстве конфигурации. Порт CFCh-CFFh — это порт «данных», используемый для записи/чтения в/из регистра конфигурации PCI в пределах пространства конфигурации PCI.

На рис. 1 показан общий вид заголовочной части регистров конфигурации PCI в устройстве PCI. Эта конкретная конфигурация называется Тип конфигурации PCI 0. Он используется для устройства PCI, которое не является мостом PCI. Мост PCI соединяет две разные шины PCI. Устройства PCI, такие как карта Ethernet или видеокарта, не являются мостом PCI. Поэтому я сосредоточусь только на конфигурации PCI типа 0.

Рис. 1. Регистры базовых адресов (BAR) в пространстве конфигурации PCI

Регистры устройства PCI (вне регистра конфигурации PCI) и память (ОЗУ и/или ПЗУ) могут располагаться в любом месте адресного пространства памяти ЦП (или адресного пространства ввода-вывода ЦП), поскольку устройства PCI содержат программируемые регистры, называемые регистр базового адреса (BAR). На рис. 1 показано расположение BAR в заголовочной части регистров конфигурации PCI. BAR контролирует, где регистрируется устройство PCI (вне регистра конфигурации PCI) и где память отображается в памяти ЦП или в адресном пространстве ввода-вывода. Причиной такой программируемости является устранение конфликтов адресов между устройствами, от которых страдают старые устройства ISA и EISA.

На рис. 1 также показана очень специфическая форма BAR со смещением 30h, регистр базового адреса расширенного ПЗУ (XROMBAR). Этот конкретный регистр сопоставляет ПЗУ расширения PCI в устройстве PCI с памятью ЦП или адресным пространством ввода-вывода. Важно, чтобы вы приняли к сведению этот конкретный регистр, поскольку он напрямую связан с выполнением ПЗУ расширения PCI. . Подробнее об этом регистре я расскажу в последующих разделах этой статьи.

Некоторые устройства PCI также отображают свои регистры — регистры конфигурации, отличные от PCI, — в адресное пространство ввода-вывода, но на сегодняшний день этот подход не является предпочтительным (за исключением важные регистры конфигурации PCI). Одна из причин, по которой регистры конфигурации PCI сопоставляются с пространством ввода-вывода, заключается в обеспечении обратной совместимости, а обратная совместимость особенно важна для устаревших операционных систем, таких как Windows XP и других старых проприетарных операционных систем.

На рис. 2 показано упрощенное сопоставление регистров устройства PCI/PCIe и памяти с адресным пространством ввода-вывода ЦП и адресным пространством памяти соответственно. Помните, что рис. 2 представляет собой упрощенную версию реальных регистров устройства и отображения памяти. На практике вы можете обнаружить, что отображение более сложное. Прочтите техническое описание устройств PCI/PCIe, а также другие сопутствующие технические описания, такие как ЦП и наборы микросхем, чтобы узнать точное соответствие.

Рис. 2. Регистры устройства PCI/PCIe и сопоставление памяти с адресным пространством ЦП/системы

Регистры устройства PCI — не регистры конфигурации PCI — и память должны занимать определенную память (или адресное пространство ввода-вывода), прежде чем их можно будет использовать. Следовательно, устройство должно быть инициализировано по известным — точным — адресам в адресном пространстве ввода-вывода ЦП или в адресном пространстве памяти. БИОС материнской платы выполняет эту задачу инициализации. На рис. 2 показан образец регистра устройства PCI/PCIe и сопоставления памяти с системным вводом-выводом и адресным пространством памяти после завершения инициализации.

Определенные типы устройств PCI требуют гораздо более сложной зависимой от устройства инициализации. В этих устройствах сопоставление их регистров устройства и памяти с адресным пространством ЦП является только одной из задач инициализации, которые необходимо выполнить. BIOS материнской платы не может выполнять эти задачи инициализации для конкретных устройств, поскольку у него нет предварительных сведений обо всех возможных устройствах и их соответствующих процедурах инициализации. Кроме того, выполнение инициализации в BIOS материнской платы невозможно из-за ограничения размера BIOS материнской платы. Для этого вам потребуется столько места, сколько нужно ОС, что нецелесообразно. Таким образом, появляется ПЗУ расширения PCI, чтобы заполнить пробел.

Существует по крайней мере два типа устройств PCI, которые требуют дополнительной инициализации конкретного устройства и, следовательно, нуждаются в ПЗУ расширения PCI, т. е. устройства, используемые для загрузки операционной системы и устройств отображения. К первой категории относятся микросхемы контроллеров хранения, например контроллеры SCSI или RAID, и сетевые контроллеры, например контроллеры Ethernet (для загрузки из локальной сети), а ко второй категории относятся микросхемы видеокарт.

Расположение ПЗУ расширения PCI

Теперь позвольте мне объяснить, где можно найти ПЗУ расширения PCI. ПЗУ расширения PCI хранится в виде двоичного файла на микросхеме флэш-ПЗУ. Существует два типа ПЗУ расширения PCI, которые можно определить по внешнему виду в зависимости от расположения устройства PCI:

  1. Первый — это ПЗУ расширения PCI, расположенное на плате расширения PCI. В этом случае двоичный файл помещается в микросхему флэш-ПЗУ, припаянную или вставленную в плату расширения PCI.
  2. Второй — ПЗУ расширения PCI, встроенное — встроенное — в BIOS материнской платы.

В первом случае инициализируемая физическая микросхема PCI впаивается или вставляется в гнездо на плате расширения PCI, а во втором случае инициализируемая микросхема PCI впаивается в плату расширения. системная плата. На рис. 3 показаны обе эти схемы.

Рисунок 3.Иллюстрация расположения ПЗУ расширения PCI

На рис. 3 показана неполная система, в которой отсутствует ОЗУ материнской платы и многие другие компоненты материнской платы. Это потому, что акцент делается на том, чтобы показать вам возможное расположение микросхемы ПЗУ расширения PCI и микросхемы BIOS. Точное расположение этих чипов зависит от конкретной материнской платы и карты расширения PCI/PCIe. Поэтому вам следует свериться с руководством по материнской плате и руководством по плате расширения PCI/PCIe или провести физический осмотр, чтобы убедиться в правильном расположении этих микросхем. Если вы все еще не уверены, вы можете найти микросхему флэш-памяти на соответствующих платах. Ищите микросхемы памяти, произведенные Winbond, SST, Atmel или другими производителями флэш-ПЗУ, затем сверьтесь с номером микросхемы в Интернете, чтобы убедиться в правильности положения. Микросхема BIOS обычно имеет четкую маркировку. Однако микросхемы ПЗУ расширения PCI обычно не имеют маркировки, а в случае платы расширения PCIe информация иногда впаивается в заднюю часть платы. Поэтому в последнем случае нужно немного поиграть в угадайку.

ПЗУ расширения PCI, встроенное в BIOS материнской платы, и ПЗУ расширения PCI в плате расширения PCI

  1. BIOS материнской платы копирует ПЗУ расширения PCI, из которого хранится ПЗУ расширения PCI, в ОЗУ в области ПЗУ расширения (в диапазоне от C_0000h до DFFFFh).
  2. BIOS материнской платы переходит к смещению 03h в скопированном ПЗУ расширения PCI, чтобы выполнить его.
  3. ПЗУ расширения PCI «возвращает» выполнение обратно в BIOS материнской платы.

Первый описанный выше шаг отличается для ПЗУ расширения PCI, хранящегося во флэш-ПЗУ на плате расширения PCI, и ПЗУ расширения PCI, встроенного в BIOS материнской платы. В первом случае BIOS материнской платы копирует ПЗУ расширения PCI из флэш-ПЗУ платы расширения PCI в ОЗУ, используя адрес, хранящийся в XROMBAR микросхемы PCI соответствующего устройства PCI, в качестве адреса ПЗУ расширения PCI.

BIOS материнской платы инициализирует все BAR и XROMBAR во всех устройствах PCI перед запуском любого ПЗУ расширения PCI. Инициализация эффективно устанавливает расположение ПЗУ расширения PCI в адресном пространстве ввода-вывода ЦП или в адресном пространстве памяти. Таким образом, BIOS материнской платы знает адрес ПЗУ расширения PCI в адресном пространстве ввода-вывода ЦП или в адресном пространстве памяти, прежде чем копировать его в ОЗУ. В этой конкретной аппаратной конфигурации механизм копирования ПЗУ расширения PCI одинаков во всех BIOS, независимо от кодовой базы BIOS — будь то AMI, Award-Phoenix, Insyde или другие.

Однако ПЗУ расширения PCI, встроенное в BIOS материнской платы, обрабатывается иначе. Каждая база кода BIOS — от AMI, Award-Phoenix, Insyde или других — имеет свой собственный модуль для конкретного поставщика, который находит ПЗУ расширения PCI в BIOS материнской платы, а затем копирует ПЗУ расширения PCI в ОЗУ перед выполнением ПЗУ расширения PCI. . При этом формат ПЗУ расширения PCI в BIOS материнской платы также зависит от производителя, у каждого производителя BIOS свой специфический подход. Однако большинство поставщиков хранят ПЗУ расширения PCI в сжатом формате внутри BIOS материнской платы для экономии места.

Структура ПЗУ расширения PCI и PCIe

Различные спецификации, в том числе спецификации PCI, определяли базовую структуру ПЗУ расширения PCI и PCIe примерно до 2005 года. В 2005 году разрозненные спецификации были объединены в спецификацию встроенного ПО PCI версии 3.0. Эта объединенная спецификация, конечно же, обратно совместима с предыдущими версиями спецификации PCI. Самая последняя версия Спецификации микропрограммного обеспечения PCI — редакция 3.1, опубликованная в декабре 2010 г.

Современные устройства PCIe в основном используют ПЗУ расширения PCI вместо ПЗУ расширения EFI. Однако некоторые устройства PCIe используют смешанное ПЗУ расширения PCI и ПЗУ расширения EFI. Очень небольшая часть устройств PCIe использует только ПЗУ расширения EFI. Вскоре вы увидите, как это делается.

Позвольте мне начать с самых основных требований к ПЗУ расширения PCI. ПЗУ расширения PCI может содержать один или несколько «образов». Каждый «образ» представляет собой автономный код и данные, которые содержат все необходимые процедуры и данные, требуемые для инициализации соответствующей микросхемы PCI/PCI. Целью наличия нескольких «образов» в одном ПЗУ расширения PCI является поддержка нескольких архитектур ЦП, которые имеют различную кодировку инструкций. Поэтому, несмотря на то, что ПЗУ расширения PCI содержит несколько образов, только один из них будет выполняться во время выполнения, поскольку только первый образ, соответствующий архитектуре ЦП на данный момент будет выполняться микропрограммой платформы — BIOS в случае x86/x64.

Рисунок 4. Структура ПЗУ расширения PCI с несколькими образами

На рис. 4 показана структура ПЗУ расширения PCI с несколькими образами. Каждый образ в ПЗУ расширения PCI должен начинаться с границы в 512 байт и должен содержать заголовок ПЗУ расширения PCI. Как вы увидите позже, специальное поле с именем Индикатор последнего изображения (смещение 15h) в структуре данных PCI ПЗУ расширения PCI указывает, является ли изображение последним изображением в список изображений или нет.

Каждый образ в ПЗУ расширения PCI начинается с заголовка ПЗУ расширения PCI. В таблице 1 показан формат заголовка ПЗУ расширения PCI. смещение в таблице 1 рассчитывается от начала образа в ПЗУ расширения PCI.

Таблица 1. Общий формат заголовка ПЗУ расширения PCI

Самое худшее в телефонах Samsung — это программное обеспечение Samsung

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

Что означает XD и как вы его используете?

Почему прозрачные чехлы для телефонов желтеют?

Как убрать лайк на Facebook

Махеш Маквана 52 м назад

Как включить 2FA (двухфакторную аутентификацию) на PS4 или PS5

Маршалл Ганнелл 2 часа назад

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

Джо Федева 3 часа назад

Как найти значения с помощью ИНДЕКС в Microsoft Excel

Сэнди Вриттенхаус 4 ч. назад

Лучшие OLED-телевизоры 2022 года

Если качество изображения является для вас приоритетом, обратите внимание на OLED-телевизоры. Благодаря идеальному черному цвету и почти бесконечному коэффициенту контрастности OLED-телевизоры затмевают конкурентов. Вот лучшие OLED-телевизоры, которые вы можете купить….

Гаурав Шукла 5ч назад

Что такое VPN-туннель и как он работает?

Если вы покупаете VPN или вам просто интересно узнать, чем эти сервисы могут вам помочь, вы, вероятно, встречали термин "VPN-туннель" или "защищенный туннель". Что это за туннели и почему они важны?…

Фергус О'Салливан 6 часов назад

Почему скрепка — самый важный технический инструмент

Конечно, у вас есть отвертка, острогубцы и, возможно, даже паяльник. Но есть один инструмент, который нужен каждому любителю технологий, и он стоит меньше цента: изогнутая скрепка. Вот почему вы всегда должны помнить…

Бендж Эдвардс 7 ч назад

Знаете ли вы?

В 1960-х годах компания LEGO выпустила линейку кубиков Modulex, предназначенную специально для архитекторов и дизайнеров. Наборы теперь, как вы можете себе представить, довольно редкие и коллекционные.

Как развернуть сервер GitLab с помощью Docker

Как скрыть свой активный статус в Facebook Messenger

Кэмерон Саммерсон 22 часа назад

Как просмотреть сведения о сертификате SSL в Google Chrome

Ник Льюис 23 часа назад

Как изменить имя пользователя Discord

Махеш Маквана 24 часа назад

Как отключить групповой чат или текстовое сообщение на iPhone

Бендж Эдвардс 1 день назад

Как отменить заказ на Amazon и получить возмещение

Крис Вук 1 день назад

ПО СРЕДСТВАМ ЖИЗНИ

Как создать ярлык для семейного звонка Google Assistant

Джо Федева 1 день назад

Как скопировать условное форматирование в Google Sheets

Сэнди Риттенхаус 1 день назад

Лучшие чехлы для iPhone 13 Pro 2022 года

iPhone 13 Pro — это серьезный инструмент для творчества, особенно когда речь идет о системе кинематографических камер нового уровня. Было бы обидно уронить его во время напряженной сцены, но эти чехлы могут помочь предотвратить повреждение!…

Сидней Батлер 1 день назад

Что такое рекуперативное торможение и как оно работает?

Проведите небольшое исследование электромобилей (EV), и вы увидите термин "рекуперативное торможение". Вы, наверное, знаете, что это позволяет электромобилям и гибридам немного увеличить запас хода за счет запасной кинетической энергии, но как это происходит на самом деле…

Джон Богна 1 день назад

Как попасть в профессиональную киберспортивную команду

Энди Нгуен 1 день назад

Как скачать сохраненные игры из Steam Cloud

Крис Хоффман 2 дня назад

Как изменить расположение папки загрузки Firefox

Уолтер Гленн 2 дня назад

Что такое объективы с фиксированным фокусным расстоянием и зачем их использовать?

Гарри Гиннесс 2 дня назад

Как сделать значок для Windows 10 или 11 из любого изображения

Ник Льюис 2 дня назад

Лучшие подставки для iPad 2022 года

Лучшие подставки для iPad предлагают гибкость для различных положений сидя и углов обзора, изменяя способ просмотра, просмотра и набора текста в лучшую сторону. Они бывают всех форм и стилей, и мы выбрали лучший iPad st…

Рэй Принс 2 дня назад

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

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

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

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

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

Кроме того, при работе с аппаратными сбоями необходимо помнить о двух других важных моментах:

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

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

Подробнее о диспетчере устройств

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

Что делать, если в диспетчере устройств отображается список неизвестных устройств

Что делать, если устройство в вашей системе возвращает код ошибки

Работа с неизвестными устройствами

Как будто некоторые детали в Диспетчере устройств недостаточно загадочны, однажды вы можете обнаружить запись в Диспетчере устройств, обычно отмеченную желтым восклицательным знаком, которая гласит: «Неизвестное устройство.Это означает, что Windows распознает, что устройство подключено, но не уверена, что это за устройство. Если вы щелкнете правой кнопкой мыши список неизвестных устройств и выберите «Свойства», вы, вероятно, не получите никакой информации, дающей вам представление о том, что это за устройство. В конце концов, если бы Windows могла рассказать вам что-нибудь об устройстве, оно не было бы неизвестным. Верно?

Диспетчер устройств может сообщить об устройстве как о неизвестном по ряду причин:

Windows не может найти драйвер для него.

Единственный доступный драйвер предназначен для гораздо более ранней версии Windows, например Windows 95 или 98.

Windows не может прочитать собственный идентификатор оборудования (он должен быть у каждого PNP-устройства).

Устройство было существенно изменено с момента его изготовления и настройки для использования (из-за повреждения или модификации пользователем).

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

Программное обеспечение каким-то образом мешает процессу. Часто это не столько обычные приложения, которые вы устанавливаете на свой ПК, сколько программно созданные виртуальные драйверы для конкретного устройства, которые не позволяют Windows просматривать фактический идентификатор на устройстве (устройства USB и IEEE 1394 иногда падают). в эту категорию).

Если диспетчер устройств сообщает об устройстве как о неизвестном, просмотрите эти проблемы и посмотрите, соответствует ли что-либо в настройках вашего ПК этим факторам риска. Например, вы испытываете нестабильность в Windows, которая может быть причиной того, что она не может распознать устройство, установленное в вашей системе? Если это так, попробуйте сначала исправить нестабильность Windows, а затем посмотрите, сможет ли Windows правильно идентифицировать устройство.

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

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

Процесс устранения

Что произойдет, если у вас не будет основных подозреваемых, когда вы обнаружите список неизвестных устройств? Стандартный ответ заключается в использовании процесса исключения: зайдите в Диспетчер устройств, разверните каждую категорию и убедитесь, что каждое устройство, которое было там указано ранее, правильно указано там сейчас (еще одна веская причина ознакомиться с Диспетчером устройств, прежде чем попасть в бедствие или бедствие). Для этого выполните следующие действия:

На панели управления дважды щелкните значок "Система".

Выберите вкладку "Диспетчер устройств". (В Windows XP выберите вкладку «Оборудование» и нажмите «Диспетчер устройств».)

Нажмите знак + рядом с каждой основной категорией, чтобы развернуть ее.

Убедитесь, что перечислены все известные устройства.

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

Пример из реальной жизни

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

Ваш ограничитель перенапряжений должен сдерживать или полностью принимать на себя удар от перенапряжения и стараться не допускать его наихудших последствий от источника питания вашего ПК и других источников. А вот незащищенному монитору повезло меньше. В результате скачка монитор не включается. К сожалению, вы заменяете существующий монитор другим рабочим монитором и подключаете его к разъему на краю видеоадаптера на задней панели вашего ПК. Вы успешно запускаете ПК и видите дисплей. Windows автоматически загружает драйвер, необходимый для вашего нового монитора. Тем не менее, когда вы заглядываете в диспетчер устройств, вы внезапно видите в списке неизвестное устройство.Ну, вы думаете, вы только что установили сменный монитор, так что, возможно, это так. Однако вы проверяете запись диспетчера устройств для монитора, и все в порядке. Затем вы переходите к записи «Адаптер дисплея» и замечаете, что ваш видеоадаптер, который, безусловно, работает, потому что вы можете просматривать видео, больше не указан в списке. На самом деле ничего не может быть указано в разделе «Адаптер дисплея».

Бинго. Вы только что узнали личность вашего неизвестного устройства. Проблема с монитором каким-то образом повлияла на видеоадаптер — или Windows — настолько, что повлияла на способность Windows отображать правильную информацию для вашего видеоадаптера.

Переустановка драйвера видеоадаптера должна решить проблему. В противном случае скачок напряжения мог распространить свой ущерб — по крайней мере, с точки зрения способности правильно распознавать устройство — на видеоадаптер через его прямое кабельное соединение с пораженным монитором. Если переустановка правильной версии драйвера вашего видеоадаптера не решит проблему, обратитесь к производителю видеоадаптера. Если он находится на гарантии, производитель может согласиться заменить его; в противном случае они могут захотеть заменить его по сниженной цене (и это хорошо, потому что производитель действительно не несет ответственности в такой ситуации).

Получить сводку по кодам ошибок диспетчера устройств

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

В более ранних версиях Windows, особенно в Windows 95 и 98/98 Second Edition, часто просто публиковались эти ошибки, за которыми следовал номер (например, Ошибка 630). Эти цифры могут отображаться на экране, когда вы пытаетесь использовать проблемное устройство.

Например, когда в 2000 году впервые была выпущена Windows Millennium, всем требовалась помощь с ошибкой кода 22 в диспетчере устройств. Проблема заключалась в том, что Код 22 сам по себе звучал как ошибка, но это не так; это просто сообщало вам о ресурсах, назначенных устройствам PCI (а многие платы расширения подключены к PCI). Так что, если только у кого-то не было ошибки кода 22, которая совпала с проблемой с устройством PCI, было много беспокойства из-за довольно малого.

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

На панели управления дважды щелкните значок "Система".

Выберите вкладку "Диспетчер устройств". (В Windows XP выберите вкладку «Оборудование» и нажмите «Диспетчер устройств».)

Нажмите +, чтобы развернуть списки категорий устройств и показать каждое устройство.

Щелкните правой кнопкой мыши определенное устройство и выберите «Свойства». Код ошибки, если он указан, должен быть указан на вкладке «Общие».

Исследование кодов ошибок

Одним из первых мест, куда следует обратиться для дальнейшего изучения кода ошибки в диспетчере устройств, является база знаний Microsoft, о которой я так часто упоминал. Оказавшись там, вы можете выполнить поиск по определенному номеру статьи, если он вам был предоставлен, например, статье Q310123, в которой перечислены коды диспетчера устройств Windows XP. Вы также можете выполнить поиск по ключевым словам, например «Коды диспетчера устройств» или «Ошибка диспетчера устройств».

В Windows Millennium и Windows XP этот поиск также можно выполнить через подключение к Интернету, зайдя в Windows Start Ø Help and Support.

Чтобы изучить коды ошибок для Windows 95 и 98, выполните следующие действия:

Установив подключение к Интернету, загрузите веб-браузер.

На веб-странице службы поддержки Майкрософт нажмите Поиск в базе знаний Майкрософт.

На странице поиска базы знаний Майкрософт в разделе "Выберите продукт Майкрософт" найдите свою версию Windows в списке поддерживаемых продуктов.

На той же странице в раскрывающемся списке "Искать" введите ключевые слова для вашей проблемы (например, "Ошибки диспетчера устройств"). Нажмите на зеленую стрелку.

Из получившегося списка выберите статью под названием «Объяснение кодов ошибок, генерируемых диспетчером устройств» и начните чтение.

Чтобы сделать это для Windows XP, выполните те же действия, заменив Windows XP на выбранный продукт Microsoft. Кроме того, на шаге 5 выберите статью с таким же названием «Объяснение кодов ошибок, генерируемых диспетчером устройств.Однако получившаяся статья специально для Windows XP; содержание отличается от статьи для Windows 95/98, как вы можете видеть на рис. 10.1. (Коды ошибок диспетчера устройств Windows XP перечислены в статье Q310123, упомянутой ранее в этом разделе.)


Рисунок 10.1. В базе знаний Microsoft можно найти подробные сведения о кодах ошибок диспетчера устройств.

Читайте также: