2014-04-09 22 views

Odpowiedz

11

platform_get_resource() jest używana w funkcji __init z kierowcą, aby uzyskać informacje na temat struktury zasobu urządzenia, takie jak adres początkowy i adres końcowy, aby wybrać rozmiar pamięci zasobów, aby można było mapować go w pamięci.

deklaracja platform_get_resource funkcji jest następująca

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

Pierwszy parametr informuje funkcji, które urządzenie jesteśmy zainteresowani, więc można go wyodrębnić potrzebujemy informacji.

Drugi parametr zależy od rodzaju obsługiwanego zasobu. Jeśli jest to pamięć (lub cokolwiek, co można zmapować jako pamięć :-)), to jest to IORESOURCE_MEM. Można zobaczyć wszystkie makra w include/linux/ioport.h

Dla ostatniego parametru http://lwn.net/Articles/448499/ mówi:

Ostatni parametr, który mówi, pożądane jest źródłem tego typu, z zerowym wskazaniem pierwszego. Tak więc, na przykład, kierowca mógł znaleźć swojego regionu sekund MMIO z:

r = platform_get_resource(pdev, IORESOURCE_MEM, 1); 

Wartością zwracaną jest wskaźnik do typu struct resource var.

Oto przykład

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 
}