Я разрабатываю драйвер для платы FPGA, подключенной к моей машине через слот расширения PCIe, и все отлично работает, если плата включается раньше ПК. Однако, если я сначала забронирую свой компьютер, а затем плату FPGA, я получу довольно необычное поведение устройства, распознаваемого и загружающего мой модуль (я вижу функцию «init», вызываемую в моем системном журнале), однако функция «зонд» никогда не называется.
Я думаю, что это связано с недопустимым BAR0. Вывод от dmesg
при включении платы:
[ 71.287587] pci 0000:3b:00.0: [0ae5:0001] type 00 class 0x000000
[ 71.287613] pci 0000:3b:00.0: reg 0x10: [mem 0x00000000-0x0000ffff]
[ 71.287821] pci 0000:3b:00.0: System wakeup disabled by ACPI
[ 71.328537] my_driver:
[ 71.328537] ****************************************************************
[ 71.328542] my_driver: init debug=2
Этот первый регистр должен быть чем-то вроде 0xb4000000-0xb400ffff, но вместо этого он выглядит как 0. (Как я уже сказал, он отлично работает, если он включен до компьютера).
Требуется ли дополнительный шаг, чтобы заставить его выделить этот блок? Или как-то указать ядру, что ему нужно это сделать?