PCIe-Treiberfehler zum Aktivieren des Geräts und zum Zuordnen von Speicher
Ich verwende den PCIe-Bus auf der Freescale MPC8308 (als Root-Komplex), und das Endgerät ist ein ASIC mit nur einem 256 MB-Speicherbereich und nur einem BAR-Register. Die Gerätekonfigurationsraumregister sind über das Paket "pciutils" leicht zugänglich. Zuerst versuchte ich, auf den Speicherbereich zuzugreifen, mmap()
aber es funktionierte nicht. Auf der nächsten Stufe habe ich einen Gerätetreiber für das PCIe-Endgerät vorbereitet, ein Kernel-Modul, das ich nach dem Booten von Linux in den Kernel lade.
In meinem Treiber wird das Endgerät aus der Geräte-ID-Tabelle identifiziert. Wenn ich das Gerät jedoch aktivieren möchte, wird der folgende pci_enable_device()
Fehler angezeigt :
driver-pci 0000: 00: 00.0: Gerät nicht verfügbar wegen Kollisionen von BAR 0 [0x000000-0xfffffff]
Auch wenn ich dem PCIe-Gerät einen Speicherbereich zuweisen möchte pci_request_region()
, ist dies nicht möglich.
Hier ist der Teil des Treibercodes, der nicht funktioniert:
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"); }
Und hier ist das Ergebnis in "dmesg":
driver-pci 0000: 00: 00.0: Gerät nicht verfügbar wegen Kollisionen von BAR 0 [0x000000-0xfffffff]
Bei der PCI-Aktivierung ist ein Problem aufgetreten
driver-pci: Probe von 0000: 00: 00.0 schlug mit Fehler -22 fehl
Es ist erwähnenswert, dass ich im Treiber Konfigurationsregister mit Funktionen wie pci_read_config_dword()
und richtig lesen und schreiben kann pci_write_config_dword()
.
Was denkst du, was ist das Problem? Ist es möglich, dass das Problem auftritt, weil der Kernel das Gerät vor dem Kernelmodul initialisiert? Was soll ich tun, um dies zu verhindern?
0 Antworten auf die Frage
Verwandte Probleme
-
5
Empfehlung für einen guten Kosten-Nutzen-VGA für Windows Areo
-
4
Funktioniert eine PCI-E V2.0-Grafikkarte mit einem PCI-E V1.0-Motherboard?
-
4
Wie kann ich zwischen den nicht markierten PCIE-Steckplätzen auf meinem Motherboard unterscheiden?
-
2
So richten Sie mehrere Videokarten in Windows XP ein
-
3
Gibt es einen merklichen Unterschied zwischen der OB-SATA-Bandbreite und dem PCI-e-SATA-Controller?
-
7
Kann ich einen PCI-e x1-Steckplatz in einen alten PCI-Steckplatz umwandeln?
-
1
PCI Express X1 TV-Tuner-Karte Was ich brauche, damit es funktioniert
-
8
PCI-E-SATA-Controller
-
1
Was ist "Intel 945g PCI Express Root Port 2771"?
-
5
Wie viel Strom kann ich sparen, wenn ich die integrierte Grafikkarte verwende?