मैं यूएसबी वाई-फाई एडाप्टर के लिए सी में लिखे गए कुछ लिनक्स कर्नेल ड्राइवर कोड को समझने की कोशिश कर रहा हूं। फ़ाइल /drivers/net/wireless/rtl818x/rtl8187/dev.c
(बस में मामला किसी संदर्भ के लिए कर्नेल कोड का उल्लेख करना चाहता था) में लाइन 1456
पढ़ता है:सी कोड, पता 0xFF00 एक संरचना में डाला जा रहा है क्यों?
priv->map = (struct rtl818x_csr *)0xFF00;
मैं क्या बिल्कुल सही संकार्य यहाँ क्या कर रहा है के बारे में उत्सुक हूँ - (struct rtl818x_csr *)0xFF00;
। मैं इसे rtl818x_csr
टाइप करने के लिए "कास्ट मेमोरी एड्रेस 0xFF00
कहने के रूप में व्याख्या कर रहा हूं और फिर इसे priv->map
पर असाइन करें"। अगर मेरी व्याख्या सही है, तो स्मृति पता 0xFF00
के बारे में इतना खास क्या है कि चालक विश्वसनीय रूप से बता सकता है कि इसके बाद क्या होगा यह हमेशा इस पते पर होगा? दूसरी बात यह है कि मैं उत्सुक हूं कि 0xFF00 केवल 16-बिट्स है। अगर मैं स्मृति पता कास्टिंग कर रहा था तो मुझे 32/64-बिट्स की उम्मीद होगी।
कोई भी इस कोड की लाइन में क्या हो रहा है, यह स्पष्ट कर सकता है? मुझे लगता है कि सी वाक्यविन्यास की मेरी समझ में एक दोष है।
ऐसा लगता है कि RTL818x चिपसेट के लिए नियंत्रण/स्थिति रजिस्टर 0xFF00 को संबोधित करने के लिए स्मृति-मैप किया गया है। –