1

我需要为开发(实际上是移植)我的嵌入式解决方案做出架构决策。我会尽量清楚地陈述我的情况,我能得到的任何建议都将不胜感激。

介绍

我有一个嵌入式系统,目前是在 ARM11 架构和 ArchLinux 操作系统上开发的。它是使用 Linux 下可用的各种技术实现的,包括 C、C++、Bash 和 Python。

此时,我想将我的解决方案移植到平板电脑上,因此我正在尝试根据我的系统要求对架构做出一些决定。

要求

该系统是模块化的,它运行多个进程和线程。它还与远程服务器通信并控制硬件外围设备。这些是基本要求,目前,我将随着讨论的发展进行更新:

基本的:

  • 专用系统(最小数量的其他应用程序运行,即使在 bg 中)
  • 多个流程,设置优先级的能力
  • 能够将进程分配给单个 CPU 核心(cpu 亲和性)
  • 进程间通信机制
  • 完整的硬件控制(WiFi、3G、GSM、麦克风、扬声器、显示器……)
  • 创建套接字等

其他:

  • 能够将麦克风直接连接到 3.5 毫米插头(TRRS 连接器)
  • 确保可靠性的主流解决方案
  • 面向未来:最大限度地减少新平板电脑和硬件的移植工作

我的问题

  • 哪种平板电脑和操作系统组合可以满足这些要求?
  • 如何接近“专用解决方案”的要求?
  • 如何进行软件开发,使用什么语言和工具?

到目前为止我的调查

到目前为止,我的调查主要集中在操作系统的选择上。主要选项似乎是 Android 和 Ubuntu Touch。以下是我的想法:

安卓

Android 显然在主流类别中获胜,但是……

我没有 Android 开发经验,但据我所知,我可以开发一个运行在 Dalvik 之上的 Java 应用程序,或者我可以通过 Android NDK 原生化。也许我什至可以绕过整个事情,与 Dalvik 并排原生,用 Python 开发?我想那时我将失去对硬件访问 API 的访问权限。不知道我将如何访问硬件。但是如果我使用 Java 开发,这是一个沙盒解决方案,我不确定我是否可以对进程、硬件和 CPU 核心亲和力进行这样的控制?

Ubuntu 触控

在 Ubuntu Touch 上开发更像是我习惯的 Linux 开发,因为它使用 Qt。这里的问题是应用程序是使用限制我使用 HTML5 和 QML 的 SDK 开发的,我不确定这是否可以让我对所需的系统进行相同的控制。如果我使用 Python 并避免使用 SDK,则会出现同样的问题 - 我如何控制硬件?当然,我猜有一种方法可以像在常规嵌入式系统上那样做,但如果没有必要,我不想重新发明轮子。

此外,Ubuntu Touch 似乎还没有被移植到很多设备上,只支持其中的一小部分。

最后

我不确定我的案例展示得有多好,但我会根据需要更新问题,提供进一步的解释和要求细节。感谢您的耐心、您的时间和您可能提供的任何帮助。

4

1 回答 1

1

我和你在同一条船上,我们正在开发基于 ARM CPU 的嵌入式系统。目前,该系统是在硬件供应商定制的 Linux 发行版上用 Python 编写的。

几个月来,我们一直在研究 Android 和 Ubuntu Touch。到目前为止,我们还没有做出任何决定。但是在这里,我们从不完整的分析中发现:

  1. Android 是一个相当重的系统,它也将 JVM 带入其中。所以你的硬件和内存需求会显着增加。

  2. Android 喜欢接管整个系统,因此有时您可能会与 Android 发生争执。

  3. Android 有非常好的 IPC 机制,在主流的 linux 内核上是没有的,比如 Binder。当然,您可以将其移植到另一个系统。但这将是相当大的努力。

  4. Android 有非常丰富的 GUI 界面,还有 NDK 视图之类的东西,你不局限于 JDK 框。

  5. Android 不使用标准的 GNU C 库,它使用称为 BSD 的 C 库的端口 BoniC。通常对于大多数软件来说这不是问题,但是如果您使用一些 linux 特定的低级功能,例如使用串行端口,您将需要调整您的代码。看看我必须做些什么才能将 Java RXTX 库移植到 android https://github.com/vladistan/gnu.io.android

  6. 当你专注于你的应用程序特定的东西时,你会发现很多 Android 开发人员会为你做基本的 GUI 编程。使用 binder 很容易在 GUI 和低级事物之间进行交互。当然,你可以通过 NDK 引入任何你想要的机制。

我们已经考虑过 Ubuntu Touch。但到目前为止,它似乎还不够成熟。

于 2014-03-20T11:43:16.467 回答