2012-03-01 27 views
24

私はPythonを移植する必要のあるARM Cortex M3(オペレーティングシステムなし)で作業しています。私の最善のアプローチは何ですか?私はちょうどコアのPythonと基本的なI/Oが必要です。Pythonを組み込みシステムに移植する

+8

を使用すると、Pythonのような高レベルの言語をしたいですが、OSを望んでいないのはなぜ? –

+5

何をしようとしていても、Pythonがそれに適しているかどうかは疑問です。 – Daenyth

+10

もっと簡単な言語を考えてみましょう。[Lua](http://www.lua.org/about.html) ) – 9000

答えて

11

あなたが言及した状況にPythonを移植しようとしたプロジェクトがいくつかあります。python-on-a-chipPyMiteまたはtinypyを見てください。これらは、OSのない低消費電力のマイクロコントローラを対象としており、Python言語の若干古いバージョンやライブラリのサポートを削減する傾向があります。

+0

ありがとうございます。ちょうど "python-on-a-chip"と "PyMite"は同じものなのでしょうか? – Randomblue

+0

@Randomblueはい、そうです。 –

23

ゴリ、それは一種の高価な注文です。 Pythonが依存しているカーネルのサービスは非常に多くあり、自分自身で提供する必要があります。軽量OSを探しているほうがはるかに良いと思うだろう - たぶんMinix 3? - 組み込みプロセッサを使用する。

私は恐ろしいことに、C言語に手を翻訳し、その上に本質を築くことを考えるのは恐ろしいことです。

+0

否定 "Pythonが依存するカーネルのサービスは非常に多い"いいえ、PythonはOSではなく言語インタープリタです。PythonはOS固有のAPIをいくつか使用しますが、それらはすべて無効にすることもできます簡単にあなた自身の偽の/ダミーのものを書く、それはコンパイルされ、基本的な機能が動作するはずです。私はそれをし、platfo Pythonが決して存在しなかった(POSIX以外のOS)。 – NoAngel

+1

もしあなたがそれほど大きな秩序のように聞こえると思わないなら、私はPyMiteをやっている人たちがあなたにそれをしたいと思うと思う。 –

5

可能なアプローチの1つは、stack machineをソフトウェアでビルドして、Python byte codeを直接解釈して実行することです。確かに移植作業ではなく、実装にはかなりの労力を要しますが、組み込みシステム用にビルドされた自己完結型のPythonバイトコード・スタック・プロセッサーは、オペレーティング・システムを必要とします。

もう1つのアプローチは、コアPythonインタープリタポートに必要な最小限のサービスを含む、独自の低レベルのエグゼクティブ(汎用OSの一歩下)を作成することです。スタック・プロセッサーを構築するよりも多かれ少なかれ労力がかかるのかどうかはわかりません。

私はこれらのアプローチのいずれかを推奨していません - 個人的には、バランスのとれた要件の妥協であるため、Charlie MartinのMinix 3アプローチがベストです。一方、私の提案は、あなたのプロジェクトがPythonにオペレーティングシステムなしで絶対的に必要な場合は、が素晴らしい時間とお金の予算を持っている場合は面白いかもしれません。

アップデート2012年3月5日:ソリューションへのパスの別の可能性はOSレスのJava VMを使用してあるのかもしれないあなたのPython /いいえOSの要件、を厳守を考えると(例えば、jnode、現在ベータ版で) Jythonを使用して、PythonからJavaバイトコードを作成します。確かに理想的な既製のソリューションではなく、OSが不要なPythonの要件を満たすように見えます。

+2

David、私はバイトコードインタープリタは十分ではないと思う - pythonは多くのサービスとsyscalls、例えばI/Oとスケジューリングに依存している。 –

+1

@CharlieMartinあなたは素晴らしい点があります。同意するならば、まっすぐなCPythonポートは、システムサービスの点でかなりの量が必要です。そして同意するならば、まっすぐなバイトコードインタープリタは同じものを必要とする。スタック・プロセッサの性質によって実行時に構造が強制されるため、スタック・プロセッサ・スタイルのダイレクト・バイト・コードの実行では、サービスの方法がそれほど必要ではないと考えていた可能性があります。私は最近Pythonのバイトコードを見ていました。そして、私には、バイトコードストリームを解釈するためにForthのようなタイプのスタックプロセッサを作成することができました。しかし、研究のレベルが高すぎるかもしれません。 –

+1

これは楽しいプロジェクトです。問題は、あなたがまだいつかは、あなたのデバイスでダウンして汚れていなければならないということです。これはコードの最悪のものが生きる場所です。 –

13

あなたは間違いなくエルアをご覧ください:Luaの すばやくプロトタイプによって駆動

http://www.eluaproject.net

「組み込み力を、とのLuaのパワーと組み込みソフトウェアアプリケーションを開発し、マイクロコントローラ・アーキテクチャの広い範囲でそれらを実行"

+0

それはかなりよく見えます。 –

4

は、cにそれをコンパイルします:)

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

+1

shedskinを使用してコンパイルした結果は、オペレーティングシステムターゲットのライブラリでサポートされているC++コンパイラでコンパイルする必要があります。だからあなたはまだOSの要件をすべての底に持っています。 –

+1

そこにはARM Cortex M3 C++コンパイラがあります。コアPythonは(私はエキスパートではありませんので、私が基本的な方法であるかどうか教えてください)OSライブラリなしでサポートされ、基本的なIOはあなたが何をしていてもプラットフォームに依存します。 – 8bitwide

+1

2番目の考えでは、それは興味深いアプローチです。したがって、シェッドスキンによって生成されたC++の低レベルのエグゼクティブまたはブートローダまたはシンプルなサービスプロバイダを記述します。それは確かに私が提案したもの、それほど難しいものではありません。それを指摘していただきありがとうございます、8bitwide。 –

1

をFYI私は非POSIX OSにはCPython 2.7倍を移植しました。それは簡単だった。 pyconfig.hを正しい方法で書く必要があります。使用されていないモジュールのほとんどを削除してください。未使用機能を無効にする。 コンパイル、リンクのエラーを修正します。その後、実行時にいくつかの単純な問題を修正した後で動作します。 POSIXヘッダーがない場合は、自分で書き込んでください。ファイルI/Oなど必要なすべてのPOSIX関数を実装します。 私の場合は2〜3週間かかりました。私は大きくカスタマイズされたPythonコアを持っていますが。残念なことに:(それをオープンソースすることはできません。私はPythonは任意のプラットフォームに簡単に移植することができると思います。その後

を、十分なRAMを持っている。

+0

'pyconfig.h'の書き方は? –

+0

@Meet Taraviyaこんにちは!それは簡単です。ここは私のものです:https://pastebin.com/dvMgHUG4 – NoAngel

+0

^^^ for windows。 +「非POSIX」の場合:https://pastebin.com/3WjWcKG0。非オープンソースの部分をいくつか含めることはできません。基本的には、それが動作している間、できる限りすべて無効にする必要があります。 OSにsignal.hがない場合は、無効にしたり、ラッパーなどを書いたりします。Python 2.xを使用することをお勧めします。移植するのが簡単です。 – NoAngel

関連する問題