2015-12-25 7 views
6

लिनक्स कर्नेल के संदर्भ में डीएमए मैपिंग और डीएमए इंजन क्या है? जब डीएमए मैपिंग एपीआई और डीएमए इंजन एपीआई का उपयोग लिनक्स डिवाइस ड्राइवर में किया जा सकता है? संदर्भ के रूप में कोई वास्तविक लिनक्स डिवाइस ड्राइवर उदाहरण बहुत अच्छा होगा।लिनक्स कर्नेल के संदर्भ में डीएमए मैपिंग और डीएमए इंजन क्या है?

+1

डीएमए मैपिंग आभासी संबोधित स्मृति से एक स्मृति में एक रूपांतरण है जो भौतिक पते (वास्तव में बस पते) पर डीएमए-सक्षम है। आपको उस https://www.kernel.org/doc/Documentation/DMA-API-HOWTO.txt – 0andriy

+0

क्षमा करें @AndyShevchenko मुझे कोई विचार नहीं है कि आपने टिप्पणी पोस्ट की है। मैं लिख रहा था आपकी टिप्पणी से पहले जवाब। मुझे आशा है कि आपको बुरा लगेगा कि मैंने इस सवाल का जवाब दिया है। –

उत्तर

0

dmaengine एक डीएमए नियंत्रक ड्राइवरों के विकास के लिए एक सामान्य कर्नेल ढांचा है।

आप पढ़ सकते हैं: dmaengine provider । आप drivers/dma के तहत dmaengine ड्राइवरों के कई उदाहरण पा सकते हैं।

+1

इसे प्रश्न के पहले भाग के उत्तर की भी आवश्यकता है। ऊपर मेरी टिप्पणी देखें। – 0andriy

5

लिनक्स कर्नेल के संदर्भ में डीएमए मैपिंग और डीएमए इंजन क्या है?

कर्नेल सामान्य रूप से आभासी पता का उपयोग करता है। kmalloc(), vmalloc() जैसे कार्य सामान्य रूप से वर्चुअल पता लौटाते हैं। इसे void* में संग्रहीत किया जा सकता है। वर्चुअल मेमोरी सिस्टम इन पतों को भौतिक पते में बदल देता है। ये भौतिक पते ड्राइवरों के लिए वास्तव में उपयोगी नहीं हैं। अंतरिक्ष को मैप करने और वर्चुअल एड्रेस बनाने के लिए ड्राइवर्स को ioremap() का उपयोग करना चाहिए।

   CPU     CPU     Bus 
      Virtual    Physical    Address 
      Address    Address    Space 
       Space    Space 

      +-------+    +------+    +------+ 
      |  |    |MMIO | Offset |  | 
      |  | Virtual |Space | applied |  | 
      C +-------+ --------> B +------+ ----------> +------+ A 
      |  | mapping |  | by host |  | 
    +-----+ |  |    |  | bridge |  | +--------+ 
    |  | |  |    +------+    |  | |  | 
    | CPU | |  |    | RAM |    |  | | Device | 
    |  | |  |    |  |    |  | |  | 
    +-----+ +-------+    +------+    +------+ +--------+ 
      |  | Virtual |Buffer| Mapping |  | 
      X +-------+ --------> Y +------+ <---------- +------+ Z 
      |  | mapping | RAM | by IOMMU 
      |  |    |  | 
      |  |    |  | 
      +-------+    +------+ 

डिवाइस डीएमए का समर्थन करता है, तो ड्राइवर अप बफर kmalloc या इसी तरह इंटरफ़ेस जो आभासी पता (एक्स) रिटर्न का उपयोग कर सेट। वर्चुअल मेमोरी सिस्टम मैप्स एक्स को भौतिक पता (वाई) सिस्टम रैम में। ड्राइवर बफर तक पहुंचने के लिए वर्चुअल एड्रेस एक्स का उपयोग कर सकता है, लेकिन डिवाइस स्वयं ऐसा नहीं कर सकता क्योंकि डीएमए सीपीयू वर्चुअल मेमोरी सिस्टम के माध्यम से नहीं जाता है। कुछ सिस्टम में केवल डिवाइस सीधे डीएमए को भौतिक पते पर कर सकता है। कुछ सिस्टम IOMMU हार्डवेयर में ऊपर यह अनुवाद कर वाई करने के लिए जेड आंकड़ा पर शारीरिक address.Look को डीएमए पता अनुवाद करने के लिए प्रयोग किया जाता है

डीएमए मानचित्रण एपीआई लिनक्स डिवाइस ड्राइवर में इस्तेमाल किया जा सकता है? डीएमए मानचित्रण एपीआई का उपयोग करने

कारण चालक वर्चुअल ऐड्रेस एक्स लौट dma_map_single() तरह इंटरफेस करने, जो किसी भी आवश्यक IOMMU मानचित्रण सेट कर सकते हैं और रिटर्न डीएमए पता Z.The चालक तो बताता है करने के लिए डिवाइस के लिए कर डीएमए जेड, और आईओएमएमयू इसे सिस्टम रैम में पता वाई पर बफर में मानचित्रित करता है।

संदर्भ this link से लिया गया है।

कोई वास्तविक लिनक्स डिवाइस ड्राइवर उदाहरण संदर्भ के रूप में अच्छा होगा।

A simple PCI DMA example

लिनक्स कर्नेल के अंदर आप विभिन्न वास्तविक चालकों के लिए drivers/dma को देख सकते हैं।

+0

क्या आप अवधारणा के वास्तविक उदाहरण के लिए http://lxr.free-electrons.com पर कर्नेल स्रोत पेड़ में ड्राइवर को इंगित कर सकते हैं? – JagsVG

+0

थोड़ी देर के लिए प्रतीक्षा करें मैं उत्तर –

+0

@JagsVG संतुष्ट करूँगा या आप कुछ और उम्मीद कर रहे हैं? –

संबंधित मुद्दे