2012-03-01 14 views
24

Estoy trabajando con un ARM Cortex M3 en el que necesito portar Python (sin sistema operativo). ¿Cuál sería mi mejor enfoque? Solo necesito el núcleo de Python y la E/S básica.Portando Python a un sistema integrado

+8

¿Por qué quieres un lenguaje de alto nivel como Python, pero no quieren un sistema operativo? –

+5

Lo que sea que intentes hacer, dudo que Python sea una buena opción. – Daenyth

+10

Considera un lenguaje más simple con menos dependencias. Mira [Lua] (http://www.lua.org/about.html). – 9000

Respuesta

11

Hay algunos proyectos que han intentado portar Python a la situación que menciona, eche un vistazo a python-on-a-chip, PyMite o tinypy. Estos están destinados a microcontroladores de menor potencia sin un sistema operativo y tienden a centrarse en versiones ligeramente más antiguas del lenguaje Python y una compatibilidad reducida con la biblioteca.

+0

Gracias. Solo para estar seguros, "python-on-a-chip" y "PyMite" son lo mismo, ¿verdad? – Randomblue

+0

@Randomblue, sí lo son. –

23

Golly, eso es un poco complicado. Hay tantos servicios de kernel de los que depende Python, y que tendrías que darte a ti mismo. Creo que sería mucho mejor buscar un sistema operativo liviano: ¿quizás Minix 3? - para poner en su procesador integrado.

De no ser así, estaría terriblemente tentado de pensar en traducir a mano a C y construir lo esencial sobre eso.

+0

Negativo. "Hay tantos servicios de un núcleo de los que Python depende". No, Python es un intérprete de lenguaje, no un sistema operativo. Python usa algunos de los API específicos del sistema operativo, pero todos pueden estar deshabilitados o puede escribe fácilmente tus propios falsos/ficticios, luego se compilará y las funciones básicas deberían funcionar. Lo hice y funciona en platfo rm para el que Python nunca existió (OS no POSIX). – NoAngel

+1

Bueno, si no crees que suene como algo difícil, sospecho que a la gente que hace PyMite le gustaría que lo hagas. –

5

Un posible enfoque es construir su propio stack machine en el software para interpretar y ejecutar Python byte code directamente. Ciertamente no es un trabajo de portabilidad y requiere mucha mano de obra para implementarlo, pero un procesador de pila de código de bytes de Python autónomo creado para su sistema incrustado le ayuda a necesitar un sistema operativo.

Otro enfoque es escribir su propio ejecutivo de bajo nivel (un paso por debajo de un sistema operativo de propósito general) que contenga el mínimo indispensable en servicios que requiere un puerto de intérprete de Python básico. No estoy seguro si esto es más o menos laborioso que construir un procesador de pila.

No recomiendo ninguno de estos enfoques, personalmente, me gusta el enfoque de Minix 3 de Charlie Martin, ya que es un compromiso de requisitos equilibrados. Por otro lado, lo que sugiero podría ser interesante si su proyecto requiere absolutamente Python sin un sistema operativo y si el proyecto tiene un excelente presupuesto de tiempo y dinero.

Update 5 Mar 2012: Dada una adhesión estricta a su Python/No hay requisitos del sistema operativo, otra posibilidad de una ruta a una solución puede estar en el uso de una máquina virtual de Java OS-menos (por ejemplo, jnode, actualmente en fase beta) y use Jython para crear código de bytes Java de Python. Ciertamente no es una solución lista para usar, y parece cumplir con un requisito de Python sin OS.

+2

David, no creo que el intérprete de código de bytes sea suficiente: Python depende de muchos servicios y llamadas de sistema, por ejemplo, para E/S y programación. –

+1

@CharlieMartin Tiene un excelente punto. De acuerdo, un puerto CPython directo requiere una gran oferta en términos de servicios del sistema. Y acordó, un intérprete de código de byte recto requiere lo mismo. Estaba pensando que tal vez un estilo de procesador de pila de ejecución directa de código de bytes requeriría menos servicios, ya que la naturaleza de un procesador de pila fuerza cierta estructura en la ejecución. Estuve mirando código de bytes Python recientemente y se me ocurrió que podría crearse un tipo de procesador de pila tipo Forth para interpretar una secuencia de código de bytes. Sin embargo, podría ser también un nivel de investigación. –

+1

Sería un proyecto divertido; la cuestión es que todavía, algún día, tendrás que ponerte sucio con tus dispositivos, lo que sospecho es dónde vivirá lo peor del código. –

13

Definitivamente, usted debe mirar en elua:

http://www.eluaproject.net

"poder Embedded, impulsado por el prototipo Lua rápidamente y desarrollar aplicaciones de software integrado con el poder de Lua y ejecutarlos en una amplia gama de arquitecturas de microcontroladores "

+0

Eso se ve bastante bien. –

4

compilarlo a C :)

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

+1

El resultado de compilar con shedskin en sí mismo debe compilarse con un compilador de C++ compatible con las bibliotecas de un destino de sistema operativo. Por lo tanto, todavía tiene un requisito de sistema operativo en el fondo. –

+1

Existen compiladores ARM Cortex M3 C++. Core python debería (no soy un experto así que dígame si estoy lejos de la base) ser compatible sin las bibliotecas del sistema operativo y la IO básica dependerá de la plataforma sin importar lo que haga. – 8bitwide

+1

Huh. Pensándolo bien, ese es un enfoque interesante. Entonces, escribe el ejecutor de bajo nivel, el gestor de arranque o el proveedor de servicios simples para C++ producido por shed-skin. Eso ciertamente no es más difícil que lo que propuse, y posiblemente no tanto. Gracias por señalar eso, 8bitwide. –

1

FYI acabo portado CPython 2.7x para no POSIX OS. Eso fue fácil. Necesita escribir pyconfig.h de manera correcta, eliminar la mayoría de los módulos no utilizados. Deshabilitar características no utilizadas. Luego arregle los errores de compilación, enlace. Entonces simplemente funciona después de solucionar algunos problemas simples en la ejecución. Si no tiene un encabezado POSIX, escriba uno solo. Implemente todas las funciones POSIX, que sean necesarias, como archivo E/S. Tomó 2-3 semanas en mi caso. Aunque he personalizado mucho el núcleo de Python.Desafortunadamente no puede OpenSource que :(.

Después de eso creo que Python puede ser portado fácilmente a cualquier plataforma, que tiene suficiente memoria RAM.

+0

Cómo escribir 'pyconfig.h'? –

+0

@Meet Taraviya ¡Hola! Es fácil. Aquí está el mío: https://pastebin.com/dvMgHUG4 – NoAngel

+0

^^^ para Windows. + uno para "no POSIX": https://pastebin.com/3WjWcKG0. No puedo incluir alguna parte que no sea de código abierto, lo siento. Básicamente debe desactivar todo lo que pueda mientras funciona. Si el sistema operativo no tiene señal. Lo deshabilita, escribe envoltorios, etc. Recomiendo usar Python 2.x, es más fácil de portar. – NoAngel

Cuestiones relacionadas