Unbekannte VGA Karte, unknown video memory base address

mvDELTA, mvGAMMA-G, mvSIGMA-SLC, mvSIGMA-SLG, mvSIGMA-SQ, mvTITAN-C16, mvTITAN-C8, mvTITAN-CL, mvTITAN-DIG, mvTITAN-G1, mvTITAN-RGB/G4, pcIMAGE-SC, pcIMAGE-SDIG, pcIMAGE-SG/SGVS, pcIMAGE-SRGB

Wenn Sie sich Ihre Kernel Log Datei ansehen (z.B. mit "dmesg" oder in der Datei "/var/log/messages" nachschauen) ,
finden Sie einen Eintrag (nach ein bisschen suchen) wie diesen :

Sep 10 11:00:45 danemark kernel: matrixfg Unknown video memory base address.

Dieser Eintrag bedeutet dass Ihre VGA Karte dem Kernel Treiber nicht bekannt ist.
Wenn wir die VGA Karte nicht kennen , können wir nicht sicher die Lineare Graphikspeicher Adresse
bestimmen welche wir als Ziel für unseren DMA Transfer benötigen.

(Die Windows Treiber können DirectX benutzen um diese Informationen zu erhalten,
aber unter Linux haben wir nicht immer das equivalent dazu, nämlich eine Erweiterung zu "X")

In diesem Fall müssen Sie folgendes tun :

(1) Finden Sie die Adresse heraus und starten Sie das Kernel Modul von Hand mit einem Parameter
und / oder
(2) Fügen Sie die Informationen in die Tabelle der Kernel Modul Quellen ein und kompilieren Sie neu.

Der beste Weg ist erst (1) zu versuchen und dann (2).

Öffnen Sie die Datei "driver/os/linux/kmod/vgatable.h" und lesen Sie die Kommentare
im Kopfbereich.
Hier erfahren Sie wie Sie die vendor-Id und die device-Id Ihrer Grafikkarte in den Treiber einfügen können.
Alternativ können Sie das "matrixfg" Kernel Modul mit einem Parameter wie dem Folgenden starten :

vidmem=0xd8000000 (Beispiel für eine NVidia Karte in unserem Testrechner)

Ersetzen Sie einfach "0xd8000000" mit der korrekten PCI Speicheradresse Ihrer Karte.
Herausfinden können Sie diese mit "lspci -v" oder "cat /proc/pci".
Wenn Ihre Karte mehr als eine Speicheradresse verwendet probieren Sie alle
Adressen durch bis beim Laden des Kernel Moduls die Fehlermeldung
("Unknown video memory base address") nicht mehr auftaucht und das Testprogramm funktioniert.

Hinweis : Die Tabelle in "driver/os/linux/kmod/vgatable.h" zeigt, welche der Basis Adressen
(PCI_BASE_ADDRESS_0 oder PCI_BASE_ADDRESS_1) die meisten Karten normalerweise benutzen.

PCI_BASE_ADDRESS_0 ist die erste Adresse die "lspci -v" oder "cat /proc/pci" zeigt.
PCI_BASE_ADDRESS_1 ist die zweite Adresse. Manche Dual Head Karten verwenden 3 Adressen.

Beispiel
===

Hier ein Auszug der Ausgabe für unseren Linux Computer (lspci -v):

01:00.0 VGA compatible controller: nVidia Corporation GeForce 256 (rev 10)
(prog-if 00 [VGA])
Subsystem: Guillemot Corporation: Unknown device 5022
Flags: bus master, 66Mhz, medium devsel, latency 32, IRQ 11
Memory at e0000000 (32-bit, non-prefetchable) [size=16M]
Memory at d8000000 (32-bit, prefetchable) [size=128M]
Expansion ROM at [disabled] [size=64K]
Capabilities: [60] Power Management version 1
Capabilities: [44] AGP version 2.0

Hier das selbe mit "lspci -nv" (zeigt numerische IDs). "Class 0300" ist eine VGA Karte:

01:00.0 Class 0300: 10de:0100 (rev 10)
Subsystem: 14af:5022
Flags: bus master, 66Mhz, medium devsel, latency 32, IRQ 11
Memory at e0000000 (32-bit, non-prefetchable) [size=16M]
Memory at d8000000 (32-bit, prefetchable) [size=128M]
Expansion ROM at [disabled] [size=64K]
Capabilities: [60] Power Management version 1
Capabilities: [44] AGP version 2.0

Die Adresse 0xe0000000 hat bei unserem Test nicht funktioniert.
Hingegen die zweite Adresse (0xd8000000) funktionierte.
Fügen Sie dann bitte die funktionierende Adresse , hier 0xd8000000 , in die Tabelle
der Datei "vgatable.h" ein, kompilieren dann neu ,installieren, und laden dann die "matrixfg.o".

Die Vendor Id ist 0x10de und die Device Id ist 0x0100 (wie im oberen Beispiel)
.
.
{0x10de, 0x0100, "Geforce 256", PCI_BASE_ADDRESS_1},
.
.

Manchmal sind die Id's bereits im Kernel Header definiert
(/usr/source/linux/include/linux/pci.h or pci_ids.h)
und Sie müssen aussagekräftige Namen anstelle von Nummern verwenden (Erfundenes Beispiel) :

{PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE2_256, "Geforce 256", PCI_BASE_ADDRESS_1}

Übrigens können Sie uns ,wenn Sie erfolgreich waren, gerne mitteilen was Sie in die Tabelle
eingefügt haben damit wir dies in zukünftige Treiberversionen mit einbinden können.

Anmerkung :
Normalerweise benutzen alle Chips der selben Familie auch die selbe Basis Adresse.
Z.b. benutzen alle bisherigen NVidia Chips die PCI_BASE_ADDRESS_1 welches die zweite Adresse
ist die in "lspci -v" angezeigt wird.

Zurück