2012-04-13 5 views
2

Ich habe eine Platine mit einem APM86290 (ppc) SOC drauf. Dies ist mein erster Ausflug in diese Art von Entwicklung und ich versuche mit dem SPI-Controller zu arbeiten, der mit einer 36-Bit-Adresse gemaess dem Datenblatt gemappt wird. Ich möchte einige der Register mit mmap() und /dev/mem lesen. Gibt es normalerweise einen einheitlichen Weg, diese hohen vier Bits zu adressieren? Oder ist das wahrscheinlich etwas Spezifisches für diesen Prozessor/compiler? So habe ich es jetzt versucht.Wie adressieren Sie IO-Mapping mit 36 ​​Bits?

#define OFFSET 0xfa0000000 

int main() 
{ 
    int i; 
    unsigned int * someRegister; 

    int fd = open("/dev/mem",O_RDWR|O_SYNC); 
    if(fd < 0) 
    { 
      printf("Can't open /dev/mem\n"); 
      return 1; 
    } 
    someRegister = (unsigned int *) mmap(0, sizeof(int), PROT_READ|PROT_WRITE, MAP_SHARED, fd, OFFSET); 
    if(someRegister <= NULL) 
    { 
      printf("Can't mmap\n"); 
      return 1; 
    } 
    else 
    { 
      printf("register=%x\n",OFFSET); 
      printf("contents=%x\n",*someRegister); 
    } 

    return 0; 
} 

Die Ausgabe des obigen Programms gibt diese Fehler

Maschinenprüf- im Kernel-Modus.
Anweisung lesen PLB Fehler
PLB Master-Port-Anfrage Fehler
PLB Lesefehler 0x11000000 bei 0x00000000_00000000

ich vielleicht dachte er nicht die 36bit-Adressen und Kürzen etwas wurde mit, aber wenn ich einen cat /proc/iomem

effff8000-effffffff : ocm_mem 
fa0000000-fa000001f : serial 

Welche zeigen die 36-Bit-Werte, die ich erwarte.

Antwort

2

Es hängt viel von Ihrer Einrichtung ab. Es gibt eine 64-Bit-Version von mmap(), die Sie ausprobieren könnten: mmap64(). Wenn das für Sie nicht funktioniert, müssen Sie möglicherweise für jedes 36-Bit-Register ein oberes und unteres Register zuordnen.

+0

Die mmap64() scheint abzurufen, was ich will. Ich verbrachte den größten Teil des Tages damit, meinen Kopf gegen die Wand zu schlagen ... Danke! – Andy

+1

@Andy: FWIW, Googeln '" 36-Bit "" mmap "' bringt diesen Vorschlag mehrmals auf der ersten Seite. ; -] – ildjarn

Verwandte Themen