【问题标题】:Porting Python to an embedded system将 Python 移植到嵌入式系统
【发布时间】:2012-03-20 03:11:12
【问题描述】:

我正在使用 ARM Cortex M3,我需要在其上移植 Python(无操作系统)。我最好的方法是什么?我只需要核心 Python 和基本 I/O。

【问题讨论】:

  • 为什么想要 Python 这样的高级语言却不想要操作系统?
  • 无论你想做什么,我怀疑 python 是否适合它..
  • 考虑一种依赖较少的更简单的语言。看看Lua

标签: python embedded


【解决方案1】:

天哪,这是一项艰巨的任务。 Python 依赖的内核服务有很多,您必须自己提供。我认为你最好寻找一个轻量级的操作系统——也许Minix 3? -- 安装在您的嵌入式处理器上。

如果做不到这一点,我会非常想考虑手动翻译成 C 并在此基础上构建基本要素。

【讨论】:

  • 否定。 “有很多 Python 依赖的内核服务”。不,Python 是一种语言解释器,而不是操作系统。 Python 使用一些特定于操作系统的 API,但它们都可以被禁用,或者您可以轻松编写自己的假/虚拟 API,然后它将编译并且基本功能应该可以工作。我做到了,它适用于 Python 从未存在的平台(非 POSIX 操作系统)。
  • 好吧,如果你认为这听起来不是什么艰巨的任务,我怀疑做 PyMite 的人希望看到你这样做。
【解决方案2】:

一种可能的方法是在软件中构建自己的stack machine,以直接解释和执行Python byte code。当然,这不是一项移植工作,而且实施起来相当费力,但是为您的嵌入式系统构建的自包含 Python 字节码堆栈处理器可以让您无需操作系统。

另一种方法是编写自己的低级执行程序(比通用操作系统低一步),其中包含核心 Python 解释器端口所需的最少服务。我不确定这是否比构建堆栈处理器更多或更少的劳动密集型。

我不推荐这两种方法中的任何一种 - 就个人而言,我最喜欢 Charlie Martin 的 Minix 3 方法,因为它是一种平衡的需求折衷方案。另一方面,如果您的项目绝对需要没有操作系统的 Python 并且如果项目有出色的时间和金钱预算,我的建议可能会很有趣。

2012 年 3 月 5 日更新:鉴于严格遵守您的 Python/无操作系统要求,另一种可能的解决方案可能在于使用无操作系统 Java 虚拟机(例如,@987654323 @,目前处于测试阶段)并使用 Jython 从 Python 创建 Java 字节码。当然不是一个理想的现成解决方案,而且它似乎确实满足了无操作系统的 Python 要求。

【讨论】:

  • David,我认为字节码解释器还不够——python 依赖于许多服务和系统调用,例如,用于 I/O 和调度。
  • @CharlieMartin 你说得很好。同意,直接的 CPython 移植需要大量的系统服务。并且同意,直接字节码解释器需要相同的。我在想也许直接字节码执行的堆栈处理器风格需要较少的服务方式,因为堆栈处理器的性质会强制执行某些结构。我最近在看 Python 字节码,突然想到可以创建一个类似 Forth 类型的堆栈处理器来解释字节码流。不过可能太研究了。
  • 这将是一个有趣的项目;问题是,总有一天,你仍然不得不对你的设备感到厌烦,我怀疑这是代码最糟糕的地方。
【解决方案3】:

你绝对应该看看 eLua:

http://www.eluaproject.net

"嵌入式电源,由 Lua 驱动 借助 Lua 的强大功能快速原型化和开发嵌入式软件应用程序,并在各种微控制器架构上运行它们”

【讨论】:

    【解决方案4】:

    有几个项目试图将 Python 移植到您提到的情况,请查看 python-on-a-chipPyMite 或 tinypy。这些针对没有操作系统的低功耗微控制器,并且倾向于关注稍微旧版本的 Python 语言并减少对库的支持。

    【讨论】:

    • 谢谢。可以肯定的是,“python-on-a-chip”和“PyMite”是同一个东西,对吧?
    【解决方案5】:

    【讨论】:

    • 使用 shedskin 本身编译的结果需要使用操作系统目标库支持的 C++ 编译器进行编译。所以你仍然有一个操作系统要求。
    • 那里有 ARM Cortex M3 C++ 编译器。核心 python 应该(我不是专家,所以请告诉我,如果我偏离基础)没有操作系统库,并且无论你做什么,基本 IO 都将依赖于平台。
    • 嗯。再想一想,这是一个有趣的方法。因此,您为 shed-skin 生成的 C++ 编写低级执行程序或引导加载程序或简单的服务提供程序。这当然不会比我提出的更难,而且可能更难。感谢您指出这一点,8bitwide。
    【解决方案6】:

    fyi 我刚刚将 CPython 2.7x 移植到非 POSIX 操作系统。那很简单。 您需要以正确的方式编写 pyconfig.h,删除大部分未使用的模块。禁用未使用的功能。 然后修复编译、链接错误。然后它只是在解决一些简单的运行问题后才起作用。 如果您没有一些 POSIX 标头,请自己编写一个。实现所有需要的 POSIX 函数,例如文件 i/o。 在我的情况下花了 2-3 周。虽然我有大量定制的 Python 核心。不幸的是不能开源它:(。

    在那之后,我认为 Python 可以轻松移植到任何具有足够 RAM 的平台。

    【讨论】:

    • pyconfig.h怎么写?
    • @Meet Taraviya 嗨!这很容易。这是我的:pastebin.com/dvMgHUG4
    • ^^^ 适用于 Windows。 + 一个用于“非 POSIX”:pastebin.com/3WjWcKG0。我不能包含一些非开源部分,抱歉。基本上你应该在它工作的时候禁用所有你可以。如果操作系统没有signal.h你禁用它,编写包装器等。我推荐使用Python 2.x,它更容易移植。
    • 你是天使!!我已经尝试了 2 天。这是给您的款待:YouTube(对不起!)
    猜你喜欢
    • 2010-09-11
    • 1970-01-01
    • 2016-02-28
    • 2016-08-18
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    相关资源
    最近更新 更多