2012-03-01 8 views
24

पर मैं एआरएम कॉर्टेक्स एम 3 के साथ काम कर रहा हूं जिस पर मुझे पाइथन पोर्टिंग (ऑपरेटिंग सिस्टम के बिना) की आवश्यकता है। मेरा सबसे अच्छा तरीका क्या होगा? मुझे बस कोर पायथन और मूल I/O की आवश्यकता है।पोर्टिंग पायथन एक एम्बेडेड सिस्टम

+8

तुम क्यों अजगर की तरह एक उच्च स्तर की भाषा चाहते हैं, लेकिन एक ओएस नहीं चाहते? –

+5

जो कुछ भी आप करने की कोशिश कर रहे हैं, मुझे संदेह है कि पाइथन इसके लिए उपयुक्त है .. – Daenyth

+10

कम निर्भरताओं के साथ एक सरल भाषा पर विचार करें। [Lua] (http://www.lua.org/about.html पर एक नज़र डालें) – 9000

उत्तर

11

ऐसी कुछ परियोजनाएं हैं जिन्होंने आपके द्वारा उल्लेख की जाने वाली स्थिति में पायथन को पोर्ट करने का प्रयास किया है, python-on-a-chip, PyMite या tinypy पर एक नज़र डालें। ये ओएस के बिना निचले पावर माइक्रोकंट्रोलर के लिए लक्षित हैं और पाइथन भाषा के छोटे पुराने संस्करणों पर ध्यान केंद्रित करते हैं और लाइब्रेरी समर्थन कम करते हैं।

+0

धन्यवाद। बस यह सुनिश्चित करने के लिए, "पायथन-ऑन-ए-चिप" और "पायमाइट" एक ही चीज़ हैं, है ना? – Randomblue

+0

@Randomblue, हाँ वे हैं। –

23

गोली, यह एक लंबा आदेश है। एक कर्नेल की इतनी सारी सेवाएं हैं कि पायथन पर निर्भर करता है, और आपको स्वयं को प्रदान करना होगा। मुझे लगता है कि आप हल्के ओएस की तलाश में बहुत बेहतर होंगे - शायद Minix 3? - अपने एम्बेडेड प्रोसेसर को डालने के लिए।

यह विफल होने के कारण, मुझे सी से हाथ-अनुवाद के बारे में सोचने और उस पर आवश्यक वस्तुओं के निर्माण के बारे में सोचने के लिए बहुत मोहक लगेगा।

+0

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

+1

ठीक है, अगर आपको नहीं लगता कि यह एक लंबा आदेश की तरह लगता है, तो मुझे संदेह है कि पीएममाइट करने वाले लोग आपको यह देखना चाहते हैं कि आप ऐसा करते हैं। –

5

एक संभावित दृष्टिकोण पाइथन byte code को सीधे समझने और निष्पादित करने के लिए सॉफ्टवेयर में अपना stack machine बनाना है। निश्चित रूप से एक पोर्टिंग नौकरी नहीं है और लागू करने के लिए काफी श्रम-केंद्रित है, लेकिन आपके एम्बेडेड सिस्टम के लिए बनाए गए स्वयं निहित पायथन बाइट कोड स्टैक प्रोसेसर आपको ऑपरेटिंग सिस्टम की आवश्यकता के आसपास ले जाता है।

एक और दृष्टिकोण आपके निम्न स्तर के कार्यकारी (एक सामान्य उद्देश्य ओएस के नीचे एक कदम) लिख रहा है जिसमें कोर पायथन दुभाषिया बंदरगाह की आवश्यकता वाले सेवाओं में न्यूनतम न्यूनतम शामिल है। मुझे यकीन नहीं है कि यह एक स्टैक प्रोसेसर बनाने से कम या ज्यादा श्रम गहन है।

मैं इन दृष्टिकोणों में से किसी एक की सिफारिश नहीं कर रहा हूं - व्यक्तिगत रूप से, मुझे चार्ली मार्टिन के मिनिक्स 3 दृष्टिकोण पसंद हैं क्योंकि यह संतुलित आवश्यकताओं के समझौता है। दूसरी तरफ, यदि मेरा प्रोजेक्ट एक उत्कृष्ट समय और पैसा बजट है तो आपके प्रोजेक्ट को ऑपरेटिंग सिस्टम और के बिना पूरी तरह से पाइथन की आवश्यकता होती है, तो मुझे आश्चर्य हो सकता है।

अपडेट 5 मार्च 2012: अपने अजगर/नहीं ओएस आवश्यकताओं, के लिए एक कड़ाई से पालन के लिए एक समाधान के लिए एक रास्ता का एक और संभावना एक OS-कम जावा वी एम का उपयोग कर में झूठ सकता है को देखते हुए (जैसे, jnode, वर्तमान में बीटा में) और पायथन से जावा बाइट कोड बनाने के लिए Jython का उपयोग करें। निश्चित रूप से एक आदर्श ऑफ-द-शेल्फ समाधान नहीं है, और ऐसा लगता है कि यह एक ओएस-कम पायथन आवश्यकता को पूरा करता है।

+2

डेविड, मुझे नहीं लगता कि बाइट-कोड दुभाषिया पर्याप्त होगा - पायथन कई सेवाओं और syscalls पर निर्भर करता है, उदाहरण के लिए, I/O और शेड्यूलिंग के लिए। –

+1

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

+1

यह एक मजेदार परियोजना होगी; बात यह है कि आप अभी भी, किसी दिन, अपने उपकरणों के साथ नीचे और गंदे हो जाना चाहते हैं, जो मुझे संदेह है कि कोड का सबसे खराब कोड लाइव है। –

13

आप निश्चित रूप से Elua पर गौर करना चाहिए:

http://www.eluaproject.net

"एंबेडेड बिजली, लुआ जल्दी प्रोटोटाइप से प्रेरित और लुआ की शक्ति के साथ एम्बेडेड सॉफ्टवेयर अनुप्रयोगों के विकास और माइक्रो आर्किटेक्चर की एक विस्तृत श्रृंखला पर उन्हें चलाने "

+0

यह बहुत अच्छा लग रहा है। –

4

ग करने के लिए इसे संकलित करें :)

http://shed-skin.blogspot.com/

+1

शेडस्किन के साथ संकलन के परिणाम को ऑपरेटिंग सिस्टम लक्ष्य से पुस्तकालयों के साथ समर्थित सी ++ कंपाइलर के साथ संकलित करने की आवश्यकता है। तो आपको अभी भी इसके नीचे एक ओएस आवश्यकता है। –

+1

वहाँ एआरएम कॉर्टेक्स एम 3 सी ++ कंपाइलर्स हैं। कोर पायथन चाहिए (मैं एक विशेषज्ञ नहीं हूं इसलिए कृपया मुझे बताएं कि क्या मैं आधार से बाहर हूं) ओएस पुस्तकालयों के बिना समर्थित होना चाहिए और बुनियादी आईओ प्लेटफार्म निर्भर होने वाला है चाहे आप क्या करें। – 8bitwide

+1

हू। दूसरे विचार पर, यह एक दिलचस्प दृष्टिकोण है। तो आप शेड-त्वचा द्वारा उत्पादित सी ++ के लिए निम्न स्तर के कार्यकारी या बूट लोडर या सरल सेवा प्रदाता को लिखते हैं। यह निश्चित रूप से और अधिक कठिन नहीं है कि मैंने प्रस्तावित किया, और संभवतः कम। 8bitwide बाहर इंगित करने के लिए धन्यवाद। –

1

FYI मैं गैर POSIX ओएस के लिए सिर्फ पोर्टेड CPython 2.7x। वह तो आसान था। आपको सही तरीके से pyconfig.h लिखने की आवश्यकता है, अधिकांश अप्रयुक्त मॉड्यूल को हटा दें। अप्रयुक्त सुविधाओं को अक्षम करें। फिर संकलन ठीक करें, लिंक त्रुटियों को ठीक करें। फिर यह चलाने पर कुछ सरल समस्याओं को ठीक करने के बाद बस काम करता है। यदि आपके पास कोई POSIX शीर्षलेख नहीं है, तो अपने आप को एक लिखें। सभी POSIX फ़ंक्शंस को कार्यान्वित करें, जो आवश्यक है, जैसे फ़ाइल I/o। मेरे मामले में 2-3 सप्ताह लग गए। हालांकि मैंने पाइथन कोर को काफी अनुकूलित किया है।दुर्भाग्य से यह ओपनसोर्स नहीं कर सकते :(।

कि मुझे लगता है कि अजगर किसी भी मंच के लिए आसानी से मोड़ा जा सकता है के बाद, है कि पर्याप्त रैम।

+0

'pyconfig.h' कैसे लिखें? –

+0

@ मीट तारविया हाय! यह आसान है। यहां मेरा है: विंडोज़ के लिए https://pastebin.com/dvMgHUG4 – NoAngel

+0

^^^। + "गैर-पॉज़िक्स" के लिए: https://pastebin.com/3WjWcKG0। मैं कुछ गैर-ओपनसोर्स भाग शामिल नहीं कर सकता, क्षमा करें। असल में आपको काम करते समय आप सभी को अक्षम कर देना चाहिए। यदि ओएस में सिग्नल नहीं है। आप इसे अक्षम करते हैं, रैपर लिखते हैं आदि। मैं पाइथन 2.x का उपयोग करने की सलाह देता हूं, पोर्ट बंद करना आसान है। – NoAngel