2014-04-09 6 views

Antwort

11

platform_get_resource() in der __init Funktion eines Treibers verwendet, um Informationen über die Struktur der Geräteressource zu erhalten, wie Startadresse und Zieladresse, um das zu finden, Ressourcenspeichergröße, sodass Sie sie im Speicher abbilden können.

die Deklaration von platform_get_resource Funktion ist die folgende

struct resource * platform_get_resource ( struct platform_device * dev, 
              unsigned int type, 
              unsigned int num); 

Der erste Parameter der Funktion weist in welches Gerät wir daran interessiert sind, so können sie die Informationen extrahieren wir brauchen.

Der zweite Parameter hängt davon ab, welche Art von Ressource Sie behandeln. Wenn es Speicher ist (oder irgendetwas, das als Speicher abgebildet werden kann :-)), dann ist es IORESOURCE_MEM. Sie können alle Makros in include/linux/ioport.h

für den letzten Parameter sehen, http://lwn.net/Articles/448499/ sagt:

Der letzte Parameter sagt, welche Ressource dieses Typs gewünscht wird, mit Null dem ersten angibt. So könnte beispielsweise ein Fahrer seine zweite MMIO Region mit:

r = platform_get_resource(pdev, IORESOURCE_MEM, 1); 

Der Rückgabewert ist ein Zeiger auf einen Typ struct resource var. Hier

ist ein Beispiel

unsigned long *base_addr; /* Virtual Base Address */ 
struct resource *res; /* Device Resource Structure */ 
unsigned long remap_size; /* Device Memory Size */ 

static int __devinit bram_io_probe(struct platform_device *pdev) 
{ 
    res = platform_get_resource(pdev, IORESOURCE_MEM, 0); // get resource info 
    remap_size = res->end - res->start + 1;    // get resource memory size 
    base_addr = ioremap(res->start, remap_size);   // map it 
}