Устройства PCIe предназначены для использования в мультиплатформенности и архитектуре?

524
Kong Chun Ho

Некоторые устройства PCIe содержат «ПЗУ расширения PCI» или «Дополнительное ПЗУ PCI», в котором хранятся программы для инициализации устройств.

Допустим, у меня есть RAID-контроллер PCIe, который обычно используется на компьютерах с архитектурой x86. Теперь, если я подключу его к машине ARM, устройство PCIe не сможет инициализироваться? Другими словами, большинство устройств PCIe x86 специфичны?

2
Существуют значительные различия между x86 и ARM, когда речь идет об устройствах, подключенных к системе. Эти две архитектуры настолько отличаются в этой области, что их нельзя сравнивать, то, как устройства добавляются в устройство ARM, совершенно отличается от устройства x86. Ramhound 5 лет назад 0
@Ramhound: И все же они поддерживают PCI и PCIe. (Как и системы PowerPC, системы MIPS, системы TileGX ...) grawity 5 лет назад 2
@ Grawity - я не знал, что ARM не поддерживает PCI и PCI-E, но то, как они добавляются в систему, совершенно отличается от того, как устройство PCI-E добавляется в систему x86. Ramhound 5 лет назад 0
Пример для PPC: [NXP dev board T2080 e6500 с Debian sid PPC64 и RadeonHD] (https://www.facebook.com/powerpcnotebook/posts/1881412475487133) phuclv 5 лет назад 0

2 ответа на вопрос

6
LawrenceC

Вот проблемы с дополнительными ПЗУ PCI для архитектуры ARM:

  • Дополнительное ПЗУ, написанное на сборке x86, не будет понятно процессору ARM.
  • Дополнительные ПЗУ, предназначенные для выполнения BIOS ПК (такие ПЗУ начинаются с 0x55AAпары байт для контрольной суммы и дополнительной информации), будут предполагать детали низкоуровневой архитектуры ПК, такие как оборудование VGA, порты ввода-вывода ЦП Intel и т. Д.
  • Вся концепция BIOS была тесно связана с архитектурой процессора и ПК x86 и никогда не использовалась ни для одной системы ARM.

Сейчас ...

  • UEFI, преемник BIOSes предназначен для использования на процессорах, отличных от x86.

  • Решением вышеуказанных проблем был байт-код EFI - байт-код, который будет интерпретироваться средой выполнения в UEFI, что делает код независимым от ЦП.

  • Системы ARM, использующие UEFI, являются относительно новыми (Surface RT может быть даже единственной такой системой). Большинство систем ARM используют CFE, U-Boot или другие загрузочные прошивки, которые не работают, как BIOS компьютера.

Теперь, если я подключу его к машине ARM, устройство PCIe не сможет инициализироваться?

У вас даже не было бы шансов, если бы система ARM не использовала UEFI. Если бы это было так, ваша система, вероятно, зависла бы при загрузке. EBC не широко используется в прошивке загрузочного ПЗУ.

Хотя загрузочное ПЗУ не будет работать, ОС, которая позднее загружается, все равно распознает и сможет нормально использовать оборудование.


Что делает загрузочный диск?

Старый BIOS до UEFI реализовывал API через механизм прерываний x86. Ваша программа должна установить в качестве параметров различные регистры x86, а затем выполнить INTинструкцию x86 .

INTзаставляет процессор x86 искать адрес в таблице, а затем передает ему управление (это называется программным прерыванием - аппаратное обеспечение может вызвать это, общаясь с контроллером прерываний, также подключенным к процессору).

Перед обработкой дополнительных ПЗУ BIOS заполняет эту таблицу по разным адресам, которые возвращаются в BIOS и выполняют функции API.

MS-DOS использует таблицу широко, опираясь на BIOS для своей первоначальной функции - это Б Основныеоперации Я Nput / вывода utput S ystem. Другие операционные системы не используют вызовы BIOS, когда у них есть контроль, они используют свои собственные драйверы и механизмы для управления оборудованием.

Поскольку эта таблица прерываний находится в ОЗУ, ее можно изменить. Дополнительные ПЗУ могут «зацепиться» за таблицу прерываний - переписать адрес определенного прерывания на что-либо в ПЗУ - и сделать так, чтобы вызовы BIOS API сначала переходили в дополнительное ПЗУ.

Один из вызовов API BIOS, который использует сам BIOS 13h- этот вызов считывает сектор с дискового устройства. Для загрузки ОС требуется загрузка сектора 0 с жесткого диска (даже MS-DOS).

BIOS знает, как общаться с дискетами и устройствами IDE, но больше ничего. Карта SCSI будет иметь дополнительное ПЗУ, которое будет перезаписано или «зацеплено» 13h- и это позволит загружаться с диска SCSI. Если операционной системой является MS-DOS, то MS-DOS может работать с диском SCSI, поскольку он будет использоваться 13hдля операций с диском.

Загрузка по сети - это еще одна ситуация, когда используются дополнительные ПЗУ.

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

Да, и они делают. Дополнительные ПЗУ BIOS действительно поддерживают только загрузку ОС и опциональное меню конфигурации («Нажмите Ctrl-A для входа в конфигурацию RAID» из Дополнительного ПЗУ, и вы видите его в тот момент, когда BIOS вызывает свой код инициализации).

IIRC Linux снова заботится о перечислении устройств и будет в значительной степени игнорировать информацию из BIOS x86

Windows тоже это делает. BIOS x86 (и реальный режим x86) зависали так же долго, как и для поддержки MS-DOS.

Не могли бы вы уточнить, что обычно делает Boot ROM? Я предполагаю, что есть некоторая POST / инициализация устройства, которое ПЗУ будет координировать или выполнять, прежде чем позволить системе продолжить загрузку - это правильно? Если так, возможно ли, что драйверы могут быть разработаны, чтобы позаботиться об этом вместо этого? (например, IIRC Linux заботится о перечислении устройств _again_ и будет в значительной степени игнорировать информацию из BIOS x86) Attie 5 лет назад 0
Смотрите мои правки, добавлено много информации. LawrenceC 5 лет назад 1
Если загрузчик компьютера ARM напрямую переходит к ядру Linux, независимо от наличия дополнительного ПЗУ PCI, есть ли вероятность, что ядро ​​сработает из-за неправильной последовательности инициализации? Другими словами, являются ли некоторые устройства PCIe инициализацией через дополнительное ПЗУ PCI и не будут функционировать должным образом без дополнительного ПЗУ? Kong Chun Ho 5 лет назад 0
Вероятно, есть какое-то странное оборудование, которое требует инициализации загрузочного ПЗУ до того, как это сделает ОС (возможно, некоторые устройства типа чипсета, которые появляются на шине PCI, но не удаляются). Но BIOS ПК был преднамеренно независим от ОС, поэтому от HW всегда ожидалась инициализация HW. Это было бы странно. Исключением, вероятно, будут видеокарты. LawrenceC 5 лет назад 1
1
Tonny

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

Есть устройства, сделанные для других архитектур. В основном GPU, хранилище / рейд и сетевые карты. Некоторые из них даже позволяют перепрошивке прошивки переходить с одной архитектуры на другую. Другие имеют двойную прошивку и могут переключаться между архитектурами по мере необходимости.
Я даже видел некоторые raid-контроллеры, которые могли быть загружены (во время загрузки из среды UEFI) с соответствующей микропрограммой для архитектуры, в которой она была размещена.
Большинство из них имеют класс обработки данных и очень дороги. Обычный пользователь никогда не встретится в дикой природе.

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

Похожие вопросы