我需要做出架构决策来开发(实际移植)我的嵌入式解决方案。 我将尽可能清楚地展示我的案例,我将不胜感激任何建议。
我有一个嵌入式系统,目前是在ARM11架构和ArchLinux OS上开发的。它使用Linux下可用的各种技术实现,包括C,C ++,Bash和Python。
目前,我想将我的解决方案移植到平板电脑上,所以我试图根据系统的要求做出一些关于架构的决定。
系统是模块化的,它运行多个进程和线程。它还与远程服务器通信并控制硬件外围设备。这些是基本要求,目前,我将随着讨论的发展而更新:
到目前为止,我的调查主要集中在操作系统的选择上。主要选项似乎是Android和Ubuntu Touch。以下是我的想法:
Android显然在主流类别中获胜,但是......
我没有Android开发的经验,但据我所知,我可以开发一个运行在Dalvik之上的Java应用程序,或者我可以通过Android NDK本地化。也许我甚至可以绕过整个事情,并与Dalvik并排,并在Python中开发?我想那时我将无法访问用于HW访问的API。不知道我将如何访问硬件。但是,如果我使用Java开发,这是一个沙盒解决方案,我不确定我是否可以控制进程,硬件和CPU核心关联?
在Ubuntu Touch上开发更像是我习惯的Linux开发,因为它使用Qt。这里的问题是应用程序是使用SDK开发的,它限制我使用HTML5和QML,我不确定是否可以允许我对我需要的系统进行相同的控制。如果我使用Python并避免使用SDK,则会出现同样的问题 - 如何控制硬件?当然,有一种方法可以像普通的嵌入式系统那样进行,但我不想重新发明轮子,如果我不需要的话。
此外,似乎Ubuntu Touch还没有被移植到许多设备上,只支持其中的少数设备。
我不确定我的陈述情况有多好,但我会根据需要更新问题,并提供进一步的解释和要求详情。感谢您的耐心,时间和任何帮助。
答案 0 :(得分:1)
我和你在同一条船上,我们正在开发ARM CPU上的嵌入式系统。目前,该系统是用硬件供应商定制的Linux发行版上的Python编写的。
我们一直在关注Android和Ubuntu Touch几个月。到目前为止,我们还没有做出任何决定。但在这里我们从不完整的分析中发现了:
Android是一个非常繁重的系统,它也带来了JVM。因此,您的硬件和内存要求将显着增加。
Android喜欢接管整个系统,因此有时您可能会与Android抗争。
Android具有非常好的IPC机制,在主流Linux内核上没有,比如Binder。当然,您可以将其移植到另一个系统。但这将是相当大的努力。
Android拥有非常丰富的GUI界面,还有像NDK视图这样的东西你不会被限制在JDK框中。
Android不使用标准的GNU C库,它使用的是BioniC,它是BSD的C库的一个端口。通常这对大多数软件来说都不是问题,但如果您使用某些特定于Linux的低级功能,例如使用串行端口,则需要调整代码。看看我必须做些什么来将Java RXTX库移植到android https://github.com/vladistan/gnu.io.android
你可以找到很多为你做基本GUI编程的Android开发人员,同时你专注于你的应用程序特定的东西。使用binder,GUI和低级别事物之间的接口非常容易。当然,你可以通过NDK带来你想要的任何机械。
我们考虑过Ubuntu Touch。但到目前为止,它似乎还不够成熟。