У меня есть устройство, которое я могу получить по физическому адресу конфигурации (все старшие 32 бита равны 0), присвоив шине PCI / устройству / номеру функции функции libpci pci_get_dev
и затем вызвав pci_read_block
.
Затем я открываю /dev/mem
и сопоставьте этот физический адрес с виртуальным адресом, чтобы мое приложение могло выполнить настройку путем чтения / записи этого виртуального адреса (64 бита).
Проблема заключается в том, что результат чтения всегда равен 0x0, а запись не имеет никакого эффекта.Но с помощью GDB я могу напечатать содержимое в виртуальном адресе и записать в него значение.
Эта же программа без проблем работает в 32-битном Linux.