Das klassische Problem eines Servers lässt sich so beschreiben: Man arbeitet nur auf der Konsole und der in Massen vorhandene Graphikspeicher liegt ungenützt in der Systemwelt herum. Diesen ungenützten Speicher möchte ich gerne benützen...
Da ich mit Linux arbeite ist ein 'geht nicht' schon mal keine akzeptable Lösung und ich beginne damit eine Teststellung auf einem meiner Rechner zu errichten.
Die Voraussetzungen sind simpel: Ich compile die MTD Kernelmodule nachträglich. Sie befinden sich unter "Device Drivers"->"Memory Technology Devices" and "Device Drivers"->"Memory Technology Devices"->"Caching Block Device access to MTD devices" und "Device Drivers"->"Memory Technology Devices"->"Self-contained MTD Device Drivers"->"Physical System RAM" - mit ihrer Hilfe ist es möglich, in einem beliebigen Speicherbereich ein Block-Device einzurichten - und das ist genau das was wir vorhaben.
Um den Speicherbereich der Graphikkarte zu finden sehe ich in /proc/pci nach, wo sich ein entsprechender Eintrag befinden sollte:
Bus 1, device 0, function 0:
VGA compatible controller: nVidia Corporation NV18 [GeForce4 MX 440SE AGP 8x] (rev 162).
IRQ 11.
Master Capable. Latency=64. Min Gnt=5.Max Lat=1.
Non-prefetchable 32 bit memory at 0xe8000000 [0xe8ffffff].
Prefetchable 32 bit memory at 0xe4000000 [0xe7ffffff].
Wie der Eintrag zeigt hat meine GeForce4 zwei Speicherbereiche, wobei einer 'Prefetchable' ist, sich also besser ansprechen lässt. Die Basisadresse die ich verwenden muss ist somit 0xe4000000.
Da auf der Maschine kein X-Server läuft ist es nicht nötig mehr als 1 MB Speicher für Graphikoperationen zu reservieren:
0xe4000000+0x00100000 (1MB) = 0xe4100000
Bei Verwendung eines X-Servers mit einer Speicherbegrenzung von 4 MB würde die Situation wie folgt aussehen, wobei wir dessen Speicher auf 4 MB begrenzen müssen, was mit dem Eintrag VideoRam 4096 in der entsprechenden Config geschieht.
0xe4000000+0x00400000 (4MB) = 0xe4400000
Nun laden wir das Kernelmodul mit den entsprechenden Parametern:
modprobe phram phram=,,
... in unserem Fall:
modprobe phram phram=vram,0xe4100000,63M
Im Erfolgsfall sollte sich /proc/mtd wie folgt präsentieren:
graveyard # cat /proc/mtd dev: size erasesize name mtd0: 03e00000 00001000 "vram"
Wenn dies geklappt hat, kommt das mtdblock-Modul zum Einsatz, welches wir mit modprobe mtdblock nachladen. Es erzeugt uns /dev/mtdblock0 welches wir von nun an wie ein normales Blockdevice verwenden können.
Ich habe mich dafür entschieden es als zusätzlichen Swap-Space einzurichten was ich mit mkswap /dev/mtdblock0 und entsprechendem swapon /dev/mtdblock0 erledige