2014-04-09 8 views

risposta

11

platform_get_resource() viene utilizzato nella funzione __init di un driver per ottenere informazioni sulla struttura della risorsa dispositivo, come indirizzo di partenza e indirizzo fine, al fine di trovare la dimensione della memoria della risorsa in modo da poterla mappare in memoria.

la dichiarazione di platform_get_resource funzione è la seguente

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

Il primo parametro indica alla funzione quale dispositivo che ci interessa, in modo che possa estrarre le informazioni che abbiamo bisogno.

Il secondo parametro dipende dal tipo di risorsa che si sta gestendo. Se è la memoria (o tutto ciò che può essere mappato come memoria :-)) allora è IORESOURCE_MEM. Potete vedere tutte le macro a include/linux/ioport.h

Per l'ultimo parametro, http://lwn.net/Articles/448499/ dice:

L'ultimo parametro dice quale risorsa di quel tipo si desidera, con lo zero che indica il primo. Così, per esempio, un driver potrebbe trovare la sua seconda regione MMIO con:

r = platform_get_resource(pdev, IORESOURCE_MEM, 1); 

Il valore restituito è un puntatore a un tipo struct resource var.

Ecco un esempio

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 
}