2011-08-23 8 views
11

लिनक्स वायरलेस ड्राइवर mac80211 में इतनी सारी संरचनाएं हैं। struct net_device, struct ieee80211_hw, struct ieee80211_vif और struct ieee80211_local जैसी चीजें और इसी तरह की चीजें। इतनी सारी संरचनाएं कि मुझे समझ में नहीं आता कि उनमें कौन सी जानकारी शामिल है और जब उन्हें प्रारंभ किया गया था।लिनक्स वायरलेस ड्राइवरों (mac80211) की संरचना कैसे सीखें?

मैं उनके बारे में और वायरलेस ड्राइवरों के पूरे आर्किटेक्चर के बारे में कैसे जान सकता हूं?

+2

हाय, स्टैक ओवरफ्लो में आपका स्वागत है। अच्छे प्रश्न, जो अच्छे उत्तरों प्राप्त करते हैं, आमतौर पर यहां एक पूछे जाने वाले और अधिक विशिष्ट प्रश्न होते हैं, जो आपने यहां पूछा है, जो बहुत व्यापक और खुले अंत में है। – Flexo

+1

सबसे अच्छा मैं वास्तव में इस प्रश्न से सुझाव दे सकता हूं कि स्रोत पढ़ रहा है (http://lxr.linux.no/#linux+v3.0.3/ बहुत आसान है), कुछ मेलिंग सूचियों पर गुप्त है (http: // linuxwireless .org/en/डेवलपर/मेलिंगलिस्ट) और अपने स्वयं के कुछ बदलावों को आजमाएं। यदि आप ऐसा करने में सक्षम हैं और फिर एक और विशिष्ट सवाल उठाते हैं तो मुझे लगता है कि आपको बहुत बेहतर उत्तर मिलेंगे। – Flexo

उत्तर

36

आप जोहानिस बर्ग की (mac80211 मेंटेनर) की जाँच कर सकते हैं यहाँ स्लाइड: http://wireless.kernel.org/en/developers/Documentation/mac80211?action=AttachFile&do=get&target=mac80211.pdf

वे कुछ हद तक पुराने हो सकते हैं, लेकिन आप एक जगह शुरू करने के लिए देना चाहिए।

लिनक्स वाईफाई गिरी ढेर के एक उच्च स्तरीय विवरण:

  • :

    1. यह समझना महत्वपूर्ण है 2 रास्तों देखते हैं, जिसमें यूज़रस्पेस गिरी जब हम वाईफ़ाई के बारे में बात कर रहे हैं के साथ संचार के लिए महत्वपूर्ण है डेटा पथ: प्राप्त किया जा रहा डेटा वायरलेस ड्राइवर से netdev कोर (आमतौर पर netif_rx() का उपयोग कर) से पारित किया जाता है। वहां से नेट कोर इसे टीसीपी/आईपी स्टैक कोड के माध्यम से पास कर देगा और प्रासंगिक सॉकेट पर कतारबद्ध करेगा जिससे उपयोगकर्तास्पेस प्रक्रिया इसे पढ़ेगी। टीएक्स पथ पैकेट पर ndo_start_xmit() कॉलबैक का उपयोग कर नेटडेव कोर से वायरलेस ड्राइवर को भेजा जाएगा। ड्राइवर struct net_device_ops का उपयोग कर ऑपरेशंस कॉलबैक का एक सेट (जैसे ईथरनेट ड्राइवर जैसे अन्य netdevices) पंजीकृत करता है।
    2. नियंत्रण पथ: इस पथ कैसे यूज़रस्पेस वाईफ़ाई इंटरफ़ेस/डिवाइस को नियंत्रित करता है और स्कैन/प्रमाणीकरण/संघ जैसे कार्य करता है। यूजरस्पेस इंटरफ़ेस नेटलिंक पर आधारित है और nl80211 कहा जाता है (include/uapi/linux/nl80211.h देखें)। आप आदेश भेज सकते हैं और प्रतिक्रिया में ईवेंट प्राप्त करें।
  • जब आप एक nl80211 आदेश इसे शुरू में cfg80211 कर्नेल मॉड्यूल द्वारा नियंत्रित किया जाता है भेजने (यह कोड net/wireless के अधीन है और संचालकों net/wireless/nl80211.c में हैं)। cfg80211 आमतौर पर निचले स्तर के ड्राइवर को कॉल करेगा। पूर्ण मैक हार्डवेयर के मामले में विशिष्ट एचडब्ल्यू ड्राइवर सीएफजी80211 से नीचे है। cfg80211 के नीचे वाला ड्राइवर cfg80211_ops struct का उपयोग कर cfg80211 के साथ ऑप्स का एक सेट पंजीकृत करता है। उदाहरण के लिए देखें brcmfmac ड्राइवर (drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c)
  • के लिए सॉफ्ट मैक हार्डवेयरmac80211 है जो 802.11 मैक परत को लागू करने वाला कर्नेल मॉड्यूल है। इस मामले में cfg80211mac80211 से बात करेगा जो बदले में हार्डवेयर विशिष्ट निचले स्तर के ड्राइवर का उपयोग करेगा। इसका एक उदाहरण iwlwifi है (इंटेल चिप्स के लिए)।
  • mac80211 (net/mac80211/cfg.c देखें) का उपयोग करके cfg80211 के साथ स्वयं पंजीकृत करता है। विशिष्ट एचडब्ल्यू ड्राइवर ieee80211_ops struct (उदाहरण के लिए drivers/net/wireless/iwlwifi/mvm/mac80211.c) का उपयोग कर mac80211 के साथ स्वयं पंजीकृत करता है।
  • आपके द्वारा कनेक्ट किए गए एक नए एनआईसी की शुरूआत स्टैक के नीचे से होती है। एचडब्ल्यू विशिष्ट ड्राइवर आमतौर पर एचडब्ल्यू की जांच के बाद mac80211 के ieee80211_allow_hw() को कॉल करेगा। ieee80211_alloc_hw() एचडब्ल्यू चालक द्वारा उपयोग की जाने वाली निजी डेटा संरचना का आकार प्राप्त करता है। यह बदले में cfg80211 wiphy_new() कॉल करता है जो वाईफाई स्ट्रक्चर के लिए पर्याप्त स्थान का वास्तविक आवंटन करता है, ieee80211_local struct (जिसे mac80211 द्वारा उपयोग किया जाता है) और एचडब्ल्यू ड्राइवर निजी डेटा (लेयरिंग ieee80211_alloc_hw कोड में देखा जाता है)। ieee80211_hwieee80211_local के भीतर एक एम्बेडेड संरचना है जो एचडब्ल्यू चालक को "दृश्यमान" है। इनमें से सभी (wiphy, ieee80211_local, ieee80211_hw) जुड़े एक भौतिक उपकरण का प्रतिनिधित्व करते हैं।
  • एक भौतिक डिवाइस (जिसे फाई भी कहा जाता है) के शीर्ष पर आप एकाधिक आभासी इंटरफेस सेट कर सकते हैं। ये अनिवार्य रूप से आप wlan0 या wlan1 के रूप में जानते हैं जिन्हें आप ifconfig पर नियंत्रित करते हैं। प्रत्येक ऐसे वर्चुअल इंटरफेस को ieee80211_vif द्वारा दर्शाया जाता है। इस संरचना में एचडब्ल्यू चालक द्वारा उपयोग किए जाने वाले अंत में निजी structs भी शामिल हैं। Wlan0 पर एक स्टेशन और wlan1 पर एक एपी जैसे कुछ चलाने के लिए एकाधिक इंटरफेस का उपयोग किया जा सकता है (यह एचडब्ल्यू क्षमताओं के आधार पर संभव है)।
  • संबंधित मुद्दे