2015-02-03 7 views
3

Я ищу, как ядро ​​выполнить перечисление PCI/PCIe и присвоение BAR., кому и когда назначить базовый адрес BARs устройства PCI/PCIe?

Я думал, что ядро ​​назначит базовые адреса БАР при запуске, но когда я попробовал pci earlydump (до начальной инициализации PCI-подсистемы), чтобы увидеть разницу BAR, я обнаружил, что все базовые адреса уже назначены!? Означает ли это, что BIOS выполняет перечисление PCI/PCIe и назначение BAR? Как BIOS знает все базовые адреса устройств pci и назначает их без конфликтов?

И если да, то как встроенная система (без BIOS) перечисляет и назначает базовый адрес для устройств PCI/PCIe?

Кстати, мой компьютер Ubuntu 14.04.1 LTS (x86_64)

+0

Кажется, что BIOS выполняет некоторое задание для конфигурационного пространства устройства PCI перед загрузкой ядра. Кто-нибудь знает, как bios (или загрузчик) перечислять и вычислять базовый адрес для каждого устройства? –

ответ

2

На всех ПК-совместимых машин IBM, БАРы назначаются BIOS. Linux просто просматривает шины и записывает значения BAR.

Некоторые платы MIPS используют аналогичные подходы, где BAR назначаются прошивкой. Тем не менее, качество присвоения BAR прошивкой варьируется довольно немного. Некоторые прошивки просто назначают BAR для встроенных PCI-устройств и игнорируют все дополнительные PCI-карты. В этом случае Linux не может полностью полагаться на назначение прошивки.

Существует еще одна проблема в зависимости от назначения прошивки. Вам необходимо придерживаться настройки диапазона адресов с помощью прошивки. Другими словами, если прошивка назначает пространство памяти PCI от 0x10000000 до 0x14000000, вы не можете легко переместить его в другое адресное пространство где-то еще в Linux. Источник: Bar asssignment in Linux

+0

прошивка здесь означает загрузчик или драйвер устройства? –

+0

@ jia-chiam Его зависит от системы. Intel устанавливает свой BIOS. Но на некоторых платформах есть собственные прошивки. Драйвер устройства находится на очень высоком уровне. –

+0

thx для ответа ур. Я просто путаюсь, что кто-то говорит, что ОС записывает BAR во время запуска, но, похоже, не в системе x86 ... –