Ошибка драйвера PCIe для включения устройства и выделения памяти

596
user664886

Я использую шину PCIe в Freescale MPC8308 (в качестве корневого комплекса), а конечное устройство представляет собой ASIC с одной областью памяти 256 МБ и одним регистром BAR. Регистры пространства конфигурации устройства легко доступны через пакет «pciutils». Сначала я попытался получить доступ к области памяти с помощью, mmap()но это не сработало. Итак, на следующем уровне я подготовил драйвер устройства для конечного устройства PCIe, являющегося модулем ядра, который я загружаю в ядро ​​после загрузки Linux.

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

driver-pci 0000: 00: 00.0: устройство недоступно из-за коллизий BAR 0 [0x000000-0xfffffff]

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

Вот часть кода драйвера, которая не работает:

pci_enable_result = pci_enable_device (pdev); if (pci_enable_result) { printk(KERN_INFO "PCI enable encountered a problem \n"); return pci_enable_result; } else { printk(KERN_INFO "PCI enable was succesfull \n"); } 

И вот результат в "dmesg":

driver-pci 0000: 00: 00.0: устройство недоступно из-за коллизий BAR 0 [0x000000-0xfffffff]

При включении PCI возникла проблема

драйвер-pci: зонд 0000: 00: 00.0 не выполнен с ошибкой -22

Стоит отметить, что в драйвере я могу правильно читать и записывать регистры конфигурации, используя такие функции, как pci_read_config_dword()и pci_write_config_dword().

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

1

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

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