Projekte.PCI-Tutorial-BTUserspace (Struktur)


Entwurfstest ohne Gerätetreiber

Übersicht

Für erste Tests des eigenen Entwurfs ist in diesem einfachen Fall kein Kerneltreiber notwendig. Die Register der PCI-Karte sind Teil des adressierbaren Speicherbereichs und können daher aus dem Userspace heraus gelesen und geschrieben werden, allerdings mit zwei Einschränkungen: Zum einen braucht man root-Rechte für den Speicherzugriff, zum anderen kann nicht auf die Kartenkonfiguration, namentlich den PCI Configuration Header zuückgegriffen werden. Die Basisadresse muss daher manuell bestimmt werden.

Bestimmung der Basisadresse

Mit
     cat /proc/pci
können die wesentlichen Parameter jedes PCI-Geräts abgefragt werden. Man erhält dabei z.B. für die eigene Karte
    [...]

    Bus  1, device   2, function  0:
      Co-processor: PCI device 10ee:0300 (Xilinx, Inc.) (rev 0).
        Master Capable.  Latency=32.  
        Non-prefetchable 32 bit memory at 0xd5001000 [0xd5001fff].

    [...]
Die Basisadresse ist also in diesem Fall 0xd5001000.

Das Testprogramm board-test.c

Das Testprogramm board-test.c wird wie üblich kompiliert. Es erwartet als Aufrufparameter die Basisadresse, z.B.
    ./board-test 0xd5001000
Das Programm öffnet das Device /dev/mem und erhält so den Zugriff auf den gesamten Speicher des Rechners. Die Funktion
    #include <sys/mman.h>

    void * mmap(void  *start,  size_t length, int prot, int flags, int fd, off_t offset);
gehört zu den definierten Dateioperationen des Devices /dev/mem und bildet length Bytes beginnend ab dem Offset offset in den Userspace, d.h. in den Speicherbereich des aufrufenden Prozesses, ab. Bei Erfolg liefert die Funktion einen Zeiger auf diesen Bereich. Eine genaue Beschreibung hät die Manpage mmap(2) bereit.


Autor: gkemnitz, Letzte Änderung: 14.04.2011 15:09:59


 TU Clausthal 2020  Impressum