2011-12-23 9 views
6

मैं क्यूमु के अंदर एक पूर्ण कर्नेल चलाने में सक्षम होने के अंतिम लक्ष्य के साथ, xnu कर्नेल को एआरएम आर्किटेक्चर में पोर्ट करना चाहता हूं। जबकि मुझे एहसास है कि यह एक बहुत मुश्किल काम है, मैं अभी भी इसमें जाना चाहता हूं।एक कर्नेल को एक अलग वास्तुकला में पोर्ट करना?

जहाँ तक मुझे पता है, आप कर्नेल (osfmk/arm/start.s) जहां सामान्य initialisation करना के लिए एक प्रवेश बिंदु लिखने के लिए मतलब कर रहे हैं (MMU और PlatformExpert) जिसके बाद Kext/IOKit उप शुरू किया जा सकता और लोड सीपीयू विशिष्ट एक्सटेंशन (यानी जाल, जीपीआईओ, घड़ी) जो या तो बूटल में लोड हो जाते हैं या बूटलोडर द्वारा लोड किए जाते हैं (क्योंकि एनएएनडी एक्सटेंशन अभी तक उपलब्ध नहीं होने के कारण कर्नेल फाइल सिस्टम से इंटरैक्ट नहीं कर सकता है)।

जब मैं कैसे एआरएम सीपीयू काम पर सामान्य जानकारी प्राप्त करते हैं, मैं नहीं भी जहां xnu पोर्ट के साथ आरंभ करने के लिए, पता है क्योंकि मैं पूरी तरह से यकीन है कि कैसे करने के लिए नहीं कर रहा हूँ:

  • कम करें स्तर डीबगिंग (चूंकि कर्नेल डीबगिंग सुविधाएं स्टार्टअप के दौरान शुरुआती अनुपलब्ध हैं)।
  • कर्नेल स्रोत पेड़ के बाकी हिस्सों के साथ एआरएम शाखा को एकीकृत करें (यानी यह सुनिश्चित करना कि osfmk/kern में सामान काम कर रहा है)।
  • प्लेटफ़ॉर्म स्वतंत्र कर्नेल को शुरू करने के लिए एक सैने वातावरण बनाएं (machine_startup());
  • मुख्य कर्नेल कोड के अंदर कुछ प्लेटफ़ॉर्म विशिष्ट कोड को ठीक करें (अधिकांश प्लेटफ़ॉर्म कोड osfmk/platform_name तक सीमित है लेकिन इसमें से कुछ को osfmk/kern और अन्य में एकीकृत किया जाना है)।

वहाँ विभिन्न प्लेटफार्मों के लिए XNU (या कम से कम मच) कर्नेल पोर्टिंग पर किसी भी सभ्य गाइड कर रहे हैं, लिनक्स गाइड देखते हैं जैसे?

+1

+1 मैं आपकी हिम्मत की सराहना करता हूं। किसी को कड़ी मेहनत करनी है।मुझे इसके बारे में कुछ भी पता नहीं है, लेकिन मुझे लगता है कि अगर आप इसे शुरू करते हैं तो आप वह होंगे जो शायद डिबगिंग गाइड लिख रहे होंगे! काई कहो ब्रो। –

उत्तर

2

आप एक जवाब नहीं दे सकते, लेकिन कुछ संकेत:

"क्या बड़े खिलाड़ी" विशेष हार्डवेयर संलग्न के साथ एक प्रणाली है कि प्रोसेसर, एकल साइकिल किया जा करने के लिए अनुमति देता है रजिस्टरों पर काम की इस तरह करते हैं जांच की, आदि। और वे एक एमुलेटर पर अधिकतर काम कर सकते हैं जिसमें एक ही सुविधा है। हार्डवेयर डीबगर सेटअप शायद आपकी क्षमताओं के बाहर बनाने के लिए (और खरीदने के लिए थोड़ा महंगा) है, लेकिन एम्यूलेटर पूरी तरह से व्यवहार्य है (और गेट्स और एलन अल्टेयर बेसिक पर कैसे शुरू हुआ - अगर एलन ने एमुलेटर गेट्स नहीं लिखा था हार्वर्ड में अभी भी वीडियो गेम खेल रहे हैं)।

यदि आपके पास कोई भी प्रकार का चरित्र डिस्प्ले संलग्न है, तो पूर्ण डीबगर का छोटा, कोड को प्रगति के रूप में डिस्प्ले पर अक्षरों को लिखने के लिए डिबग किए गए कोड में निर्देश एम्बेड कर सकते हैं। पथ ए अगले स्थान में "ए" लिख सकता है (एक आरक्षित स्मृति शब्द में कहीं भी एक इंडेक्स रखा जाता है) जबकि पथ बी "बी" आदि लिखता है, बहुत कच्चे, लेकिन कभी-कभी छोटी परियोजनाओं के लिए इसे प्राप्त करना पर्याप्त होता है।

तो मुझे लगता है कि मैं पहले एमुलेटर लिखने की सिफारिश करता हूं। वैसे भी प्रोसेसर से परिचित होने का यह एक अच्छा तरीका है।

(सामान को एकीकृत करने के लिए के रूप में, मैं हमेशा सिर्फ "होगा अरे, जेरेमी! मेरे लिए यह एकीकृत, आप?" कहते हैं)

1

आप एक चुनौती के एक सा स्रोत कोड के सभी के रूप में नहीं सामना करेंगे उपलब्ध है । प्लेटफार्म विशेषज्ञ के स्रोत कोड का हिस्सा xnu स्रोतों के हिस्से के रूप में उपलब्ध है, हालांकि com.apple.driver.AppleACPIPlatform.kext नहीं है।

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