2012-03-01 16 views
24

Sto lavorando con un ARM Cortex M3 su cui ho bisogno di eseguire il porting di Python (senza sistema operativo). Quale sarebbe il mio approccio migliore? Ho solo bisogno del core Python e dell'I/O di base.Porting Python su un sistema embedded

+8

Perché vuoi un linguaggio di alto livello come Python, ma non si vuole un sistema operativo? –

+5

Qualunque cosa tu stia cercando di fare, dubito che Python sia adatto per questo .. – Daenyth

+10

Considera un linguaggio più semplice con meno dipendenze. Dai un'occhiata a [Lua] (http://www.lua.org/about.html – 9000

risposta

11

Ci sono alcuni progetti che hanno tentato di eseguire il porting di Python nella situazione menzionata, dare un'occhiata a python-on-a-chip, PyMite o tinypy. Questi sono mirati a microcontrollori di potenza inferiore senza un sistema operativo e tendono a concentrarsi su versioni leggermente più vecchie del linguaggio Python e su un supporto ridotto della libreria.

+0

Grazie. Solo per essere sicuri, "python-on-a-chip" e "PyMite" sono la stessa cosa, giusto? – Randomblue

+0

@Randomblue, si lo sono. –

23

Golly, è un po 'un alto ordine. Ci sono così tanti servizi di un kernel su cui Python dipende e che dovresti fornire tu stesso. Penso che staresti molto meglio alla ricerca di un sistema operativo leggero, forse Minix 3? - per mettere il processore incorporato.

In caso contrario, sarei terribilmente tentato di pensare alla traduzione manuale in C e alla costruzione di elementi essenziali.

+0

Negativo. "Ci sono così tanti servizi di un kernel da cui Python dipende". No, Python è un interprete di linguaggio, non un SO. Python usa alcune API specifiche per OS, ma possono essere disabilitate o scrivi facilmente i tuoi falsi/falsi, poi compilerà e le funzioni di base dovrebbero funzionare. L'ho fatto e funziona su platfo rm per cui Python non è mai esistito (sistema operativo non POSIX). – NoAngel

+1

Beh, se non pensi che suoni come una specie di alto ordine, sospetto che le persone che fanno PyMite vorrebbero vederti farlo. –

5

Un possibile approccio è creare il proprio stack machine nel software per interpretare ed eseguire Python byte code direttamente. Sicuramente non è un lavoro di porting e abbastanza laborioso da implementare, ma un processore Python byte code stack integrato per il tuo sistema embedded ti porta in giro con il bisogno di un sistema operativo.

Un altro approccio è la scrittura del proprio dirigente di basso livello (un passaggio sotto un sistema operativo generico) che contiene il minimo indispensabile nei servizi richiesti da una porta di interprete Python di base. Non sono sicuro se questo è più o meno laborioso della costruzione di un processore stack.

Non sto raccomandando nessuno di questi approcci - personalmente, mi piace l'approccio Minix 3 di Charlie Martin migliore poiché si tratta di un compromesso tra requisiti equilibrati. D'altra parte, ciò che suggerisco potrebbe essere interessante se il tuo progetto richiede assolutamente Python senza un sistema operativo e se il progetto ha un budget di tempo e denaro eccellente.

Aggiornamento 5 Mar 2012: Data una stretta aderenza al tuo Python/No operativo richiesto, un'altra possibilità di un percorso per una soluzione può essere trovata utilizzando un Java VM OS-meno (ad esempio, jnode, attualmente in versione beta) e utilizzare Jython per creare il codice byte Java da Python. Certamente non è una soluzione pronta per l'acquisto, e sembra soddisfare un requisito Python senza OS.

+2

David, non penso che l'interprete di byte-code sarebbe sufficiente - python dipende da molti servizi e syscalls, ad es. Per I/O e pianificazione. –

+1

@CharlieMartin Hai un punto eccellente. D'accordo, una porta CPython dritta richiede molto in termini di servizi di sistema. E d'accordo, un interprete di byte code semplice richiede lo stesso. Stavo pensando che forse uno stile di processamento stack di esecuzione di byte code diretto richiederebbe meno servizi, dal momento che la natura di un processore stack impone una certa struttura all'esecuzione. Stavo guardando il codice byte Python di recente e mi è venuto in mente che un tipo di processore stack di tipo Forth poteva essere creato per interpretare un flusso di codice byte. Potrebbe essere anche il livello di ricerca, però. –

+1

Sarebbe un progetto divertente; il fatto è che tu, un giorno o l'altro, devi ancora sporcarti i tuoi dispositivi, che sospetto sia dove vive il peggio del codice. –

13

Si dovrebbe guardare Elua:

http://www.eluaproject.net

"potere incorporato, guidato da Lua rapidamente prototipi e sviluppare applicazioni software embedded con la potenza di Lua ed eseguirli su una vasta gamma di architetture a microcontrollore "

+0

Sembra abbastanza buono. –

4

compilarlo a c :)

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

+1

Il risultato della compilazione con shedskin deve essere compilato con un compilatore C++ supportato con librerie da una destinazione del sistema operativo. Quindi hai ancora un requisito di sistema operativo in fondo a tutto. –

+1

Ci sono compilatori ARM Cortex M3 C++. Core Python dovrebbe (io non sono un esperto quindi, per favore dimmi se sono fuori dalla base) essere supportato senza librerie OS e l'IO di base dipenderà dalla piattaforma, non importa quello che fai. – 8bitwide

+1

Huh. A pensarci bene, questo è un approccio interessante. Quindi scrivi il dirigente di basso livello o il boot loader o il fornitore di servizi semplici per il C++ prodotto da shed-skin. Non è certamente più difficile ciò che ho proposto, e forse meno. Grazie per averlo indicato, 8bitwide. –

1

FYI ho appena porting CPython 2.7x alla non-POSIX OS. È stato facile. È necessario scrivere pyconfig.h nel modo corretto, rimuovere la maggior parte dei moduli inutilizzati. Disabilita funzionalità non utilizzate. Quindi correggere la compilazione, errori di collegamento. Quindi funziona solo dopo aver risolto alcuni semplici problemi durante l'esecuzione. Se non si dispone di alcuna intestazione POSIX, scriverne una da soli. Implementa tutte le funzioni POSIX, quelle necessarie, come il file i/o. Ho preso 2-3 settimane nel mio caso. Sebbene io abbia un core Python pesantemente personalizzato.Purtroppo non si può opensource che :(.

Dopo che penso Python può essere portato facilmente a qualsiasi piattaforma, che ha abbastanza RAM.

+0

Come scrivere 'pyconfig.h'? –

+0

@Meet Taraviya Ciao! È facile. Ecco la mia: https://pastebin.com/dvMgHUG4 – NoAngel

+0

^^^ per Windows. + uno per "non POSIX": https://pastebin.com/3WjWcKG0. Non posso includere parte non-opensource, mi dispiace. Fondamentalmente dovresti disabilitare tutto Puoi mentre funziona. Se il sistema operativo non ha signal.h, lo disabiliti, scrivi wrapper, ecc. Ti consiglio di usare Python 2.x, è più facile portarlo. – NoAngel

Problemi correlati