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
Respuesta
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.
Gracias. Solo para estar seguros, "python-on-a-chip" y "PyMite" son lo mismo, ¿verdad? – Randomblue
@Randomblue, sí lo son. –
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.
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
Bueno, si no crees que suene como algo difícil, sospecho que a la gente que hace PyMite le gustaría que lo hagas. –
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.
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. –
@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. –
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. –
Definitivamente, usted debe mirar en elua:
"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 "
Eso se ve bastante bien. –
compilarlo a C :)
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. –
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
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. –
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.
Cómo escribir 'pyconfig.h'? –
@Meet Taraviya ¡Hola! Es fácil. Aquí está el mío: https://pastebin.com/dvMgHUG4 – NoAngel
^^^ 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
- 1. Sqlite en un sistema integrado
- 2. malloc en un sistema integrado sin un sistema operativo
- 3. Base de datos para un sistema integrado
- 4. Portando Mathematica a Octave
- 5. Portando servidor java a Android
- 6. Portando clock_gettime a windows
- 7. ¿Puede un ingeniero de software crear un sistema integrado?
- 8. Portando C++ a C# - plantillas
- 9. Portando NewLib para mi sistema operativo: algunas preguntas
- 10. Erlang como un sistema integrado dentro de una aplicación?
- 11. ¿Dónde envía la consola del kernel en un sistema integrado?
- 12. Python * .py, * .pyo, * .pyc: ¿Qué se puede eliminar para un sistema integrado?
- 13. Portando la aplicación iOS a Android
- 14. Portando Borland C++ Builder a Qt
- 15. Portando aplicaciones Java a la plataforma Android
- 16. Portando un sitio web desde Symfony 1.4 a 2.0
- 17. Integrado a * .exe en un dll
- 18. Implementación del agente SNMP en el sistema integrado
- 19. STL dentro del sistema integrado con memoria muy limitada
- 20. Acceso explícito al alcance integrado de Python
- 21. Recomendación para Java VM ejecutándose en el sistema integrado
- 22. Python IDE integrado en Visual Studio 2008?
- 23. Mejor sistema de compilación para desarrollo integrado/compilación cruzada
- 24. Cómo depurar kernel oops en el sistema integrado
- 25. Python: ¿Hay un paquete integrado para analizar html en dom
- 26. Portando getifaddrs para Win XP
- 27. base de datos sin sistema operativo requerido para el sistema integrado
- 28. Python - Creando un sistema de "scripting"
- 29. Modelado de un sistema lineal con Python
- 30. Portando la aplicación ASP.NET a Mono/Apache bajo Linux
¿Por qué quieres un lenguaje de alto nivel como Python, pero no quieren un sistema operativo? –
Lo que sea que intentes hacer, dudo que Python sea una buena opción. – Daenyth
Considera un lenguaje más simple con menos dependencias. Mira [Lua] (http://www.lua.org/about.html). – 9000