आप जोहानिस बर्ग की (mac80211 मेंटेनर) की जाँच कर सकते हैं यहाँ स्लाइड: http://wireless.kernel.org/en/developers/Documentation/mac80211?action=AttachFile&do=get&target=mac80211.pdf
वे कुछ हद तक पुराने हो सकते हैं, लेकिन आप एक जगह शुरू करने के लिए देना चाहिए।
लिनक्स वाईफाई गिरी ढेर के एक उच्च स्तरीय विवरण:
- :
- यह समझना महत्वपूर्ण है 2 रास्तों देखते हैं, जिसमें यूज़रस्पेस गिरी जब हम वाईफ़ाई के बारे में बात कर रहे हैं के साथ संचार के लिए महत्वपूर्ण है डेटा पथ: प्राप्त किया जा रहा डेटा वायरलेस ड्राइवर से netdev कोर (आमतौर पर
netif_rx()
का उपयोग कर) से पारित किया जाता है। वहां से नेट कोर इसे टीसीपी/आईपी स्टैक कोड के माध्यम से पास कर देगा और प्रासंगिक सॉकेट पर कतारबद्ध करेगा जिससे उपयोगकर्तास्पेस प्रक्रिया इसे पढ़ेगी। टीएक्स पथ पैकेट पर ndo_start_xmit()
कॉलबैक का उपयोग कर नेटडेव कोर से वायरलेस ड्राइवर को भेजा जाएगा। ड्राइवर struct net_device_ops
का उपयोग कर ऑपरेशंस कॉलबैक का एक सेट (जैसे ईथरनेट ड्राइवर जैसे अन्य netdevices) पंजीकृत करता है। - नियंत्रण पथ: इस पथ कैसे यूज़रस्पेस वाईफ़ाई इंटरफ़ेस/डिवाइस को नियंत्रित करता है और स्कैन/प्रमाणीकरण/संघ जैसे कार्य करता है। यूजरस्पेस इंटरफ़ेस नेटलिंक पर आधारित है और
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 मैक परत को लागू करने वाला कर्नेल मॉड्यूल है। इस मामले में cfg80211
mac80211
से बात करेगा जो बदले में हार्डवेयर विशिष्ट निचले स्तर के ड्राइवर का उपयोग करेगा। इसका एक उदाहरण 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_hw
ieee80211_local
के भीतर एक एम्बेडेड संरचना है जो एचडब्ल्यू चालक को "दृश्यमान" है। इनमें से सभी (wiphy
, ieee80211_local
, ieee80211_hw
) जुड़े एक भौतिक उपकरण का प्रतिनिधित्व करते हैं।
एक भौतिक डिवाइस (जिसे फाई भी कहा जाता है) के शीर्ष पर आप एकाधिक आभासी इंटरफेस सेट कर सकते हैं। ये अनिवार्य रूप से आप wlan0 या wlan1 के रूप में जानते हैं जिन्हें आप ifconfig
पर नियंत्रित करते हैं। प्रत्येक ऐसे वर्चुअल इंटरफेस को ieee80211_vif
द्वारा दर्शाया जाता है। इस संरचना में एचडब्ल्यू चालक द्वारा उपयोग किए जाने वाले अंत में निजी structs भी शामिल हैं। Wlan0 पर एक स्टेशन और wlan1 पर एक एपी जैसे कुछ चलाने के लिए एकाधिक इंटरफेस का उपयोग किया जा सकता है (यह एचडब्ल्यू क्षमताओं के आधार पर संभव है)।
हाय, स्टैक ओवरफ्लो में आपका स्वागत है। अच्छे प्रश्न, जो अच्छे उत्तरों प्राप्त करते हैं, आमतौर पर यहां एक पूछे जाने वाले और अधिक विशिष्ट प्रश्न होते हैं, जो आपने यहां पूछा है, जो बहुत व्यापक और खुले अंत में है। – Flexo
सबसे अच्छा मैं वास्तव में इस प्रश्न से सुझाव दे सकता हूं कि स्रोत पढ़ रहा है (http://lxr.linux.no/#linux+v3.0.3/ बहुत आसान है), कुछ मेलिंग सूचियों पर गुप्त है (http: // linuxwireless .org/en/डेवलपर/मेलिंगलिस्ट) और अपने स्वयं के कुछ बदलावों को आजमाएं। यदि आप ऐसा करने में सक्षम हैं और फिर एक और विशिष्ट सवाल उठाते हैं तो मुझे लगता है कि आपको बहुत बेहतर उत्तर मिलेंगे। – Flexo