2014-04-09 11 views
6

क्या कोई कृपया बता सकता है कि platform_get_resource फ़ंक्शन का उपयोग क्यों करें और कैसे करें?लिनक्स ड्राइवर में platform_get_resource क्या है?

मैंने देखा है IORESOURCE_MEM कई स्थानों पर उपयोग किया जाता है, जैसे कि here, दूसरे पैरामीटर के रूप में, इसका क्या अर्थ है?

मैं नीचे दिए गए लिंक से गुजर चुका हूं लेकिन उचित स्पष्टीकरण प्राप्त नहीं कर सका।

उत्तर

11

platform_get_resource(), शुरू पता और अंत पता जैसे उपकरण संसाधन की संरचना के बारे में जानकारी प्राप्त करने के लिए, एक ड्राइवर की __init समारोह में प्रयोग किया जाता है आदेश खोजने के लिए संसाधन स्मृति आकार ताकि आप इसे स्मृति में मैप कर सकें।

platform_get_resource समारोह की घोषणा के बाद

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

पहले पैरामीटर समारोह जो डिवाइस हम में रुचि रखते हैं बताता है, तो यह जानकारी हमें जरूरत निकाल सकते हैं।

दूसरा पैरामीटर इस बात पर निर्भर करता है कि आप किस प्रकार के संसाधन को संभालने वाले हैं। अगर यह स्मृति है (या कुछ भी जिसे स्मृति के रूप में मैप किया जा सकता है :-)) तो यह IORESOURCE_MEM है। आप include/linux/ioport.h

पर सभी मैक्रो देख सकते हैं पिछले पैरामीटर के लिए, http://lwn.net/Articles/448499/ का कहना है:

पिछले पैरामीटर कहते हैं जो उस प्रकार के संसाधन शून्य पहले एक संकेत है के साथ, वांछित है। इस प्रकार, उदाहरण के लिए, एक ड्राइवर अपनी दूसरी MMIO क्षेत्र के साथ मिल सकता है:

r = platform_get_resource(pdev, IORESOURCE_MEM, 1); 

वापसी मान एक प्रकार struct resource वर के लिए सूचक है।

यहाँ एक उदाहरण

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 
} 
है
संबंधित मुद्दे