nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

Mem-IO unter Linux - Adressfehler

Von: Martin Freiberg (lyki_@web.de) [Profil]
Datum: 11.02.2009 18:59
Message-ID: <gmv3g5$8m6$01$1@news.t-online.com>
Newsgroup: de.comp.os.unix.programming
Hallo,

Ich bastle mir gerade einen Kerneltreiber um auf eine
ISA IO-Karte zuzugreifen die mit mem-io arbeitet.

Allerdings passt anscheinend der Adressenbereich nicht.

Unter DOS kann ich über den Bereich d000:0000 bis d000:0FFF
auf die Karte zugreifen. Programm geschrieben und getestet.

Unter Linux aber funktioniert der Zugriff darauf nicht.

Als Beispiel habe ich mir aus den Kernelsorcen den
hisax teles0 Treiber genommen der auch mit mem-io kann.

Zuerst mit request_mem_region überprüft ob ich den Bereich
erhalten kann. Dann mit ioremap mir den Adressbereich
geholt über den ich zugreifen können sollte.

Hier mal das wesentlichste aus dem Code:

static char *membereich = NULL;

int init_module (void)
{

if (!request_mem_region(0xd0000,0x0fff, "Mein IO-Treiber")) {
... Hier Code für Fehlerbehandlung...
}
membereich = ioremap (0xd0000,0x0fff);

printk (KERN_INFO "IO-Treiber - membereich ist: %p \n",membereich);

writeb(0x5a,membereich +0x010);

}


Wenn ich mir mit printk den Inhalt von membereich anzeigen lasse,
erhalte ich  0x80d0000.

Wenn ich versuche mit writeb etwas auszugeben hat das keinen
Effekt. Genauso kann ich mit readb  nichts einlesen, ich erhalte
da immer als Wert nur 0x00 zurück.

Auch wenn ich nach writeb den Befehl  mb(); oder  wmb(); Aufrufe.


Übersehe ich hier etwas? Oder benötige ich ioremap nur für PCI und
ISA-PNP Karten, und muß direkt auf den Adressbereich 0xd0000 - 0xd0fff
zugreifen?


Danke
Martin

[ Auf dieses Posting antworten ]

Antworten