在嵌入式系统上从 DOS 切换到 Linux

Posted

技术标签:

【中文标题】在嵌入式系统上从 DOS 切换到 Linux【英文标题】:Switching from DOS to Linux on embedded system 【发布时间】:2012-06-22 13:33:19 【问题描述】:

我最近的任务是执行一项可行性研究,该研究基于从使用 DOS 切换到 Linux 以用作操作系统来运行我们的工业控制软件(内部开发)。简而言之,我被限制使用 Ubuntu 8.04(供应商提供的内核升级为板上的硬件提供驱动程序)。由于不再支持此功能,我无法更新或安装软件,这意味着我无法使用 gcc 4.2 版。我希望能够使用 C++ 并最好使用 boost 库,但目前这似乎我无法做到。

基本上我在问公司/专业人士如何使用 Linux 作为开发环境?我上面描述的情况是常见的吗?您是否只是简单地选择一个版本和一个编译器并在整个产品生命周期中坚持使用它,以确保开发环境不会发生太大变化,还是您可以随心所欲地升级内核、编译器等?受限于特定供应商可以提供的内容是否很常见。有人愿意就ubuntu 8.04是否适合开发工控软件的操作系统发表意见吗?

我根本不是 linux 专家,但到目前为止,我的研究和实验使我得出结论,我应该放弃 linux 方法并使用 DOS。我们公司没有 linux 知识,而且很小,出于个人职业原因,我对学习 DOS 之类的冗余技术没有兴趣。

我知道这不完全是一个是/否类型的问题,但我们将不胜感激地收到任何答复。

【问题讨论】:

显然它仍然用于工业设备控制系统......但我听到你在说什么。 软件必须支持多长时间?考虑到 Ubuntu 8.04 将在 2013 年 4 月结束生命周期。 从头开始,显然没有人会使用 DOS,但这里的可能性是该解决方案已经在 DOS 中运行,并且可能已经运行了数年,甚至数十年。为什么决定搬家?害怕没有硬件支持?此外,鉴于您愿意自己编译它们,没有什么能阻止您安装任何您想要或需要的附加软件包。 另外,您使用 DOS 是因为您的软件需要实时响应保证吗? Linux 默认不提供。 (LinuxCNC)[linuxcnc.org] 之类的东西提供了一个 ubuntu 构建,其中包含适用于内核的适当实时中断处理补丁。 @Rook 我认为这基本上是它使用的原因。问题是我们需要将硬件升级到新一代主板,并且供应商支持带有内核模块的 linux 用于硬件驱动程序。我基本上是一个桌面应用程序开发人员,并且超出了我的深度 - 因此请求建议。这类问题在网络上是无法得到一般性答案的。 【参考方案1】:

GCC 4.2 不支持 C++11,但对 C++03 的支持应该很好,并且您应该能够找到可以轻松处理该问题的 Boost 版本。

最终,Linux 有许多在 DOS 中找不到的优势——例如,没有分段、虚拟内存以及使开发软件更容易和更快的东西,更不用说你可能需要的额外库,如今天绝对没有人会支持 DOS。

【讨论】:

这是我的问题之一 - 我无法在板上安装 g++。大概是因为不再支持 8.04。 @mathematician1975:你可以自己编译 @mathematician1975:没错。如果您获得最新版本的源代码,您可能会,而且我说,可能会成功。或者,因为这块板可能没有编译器的能力,你为什么不能交叉编译?找出板子的架构,稍后交叉编译libcs 和其他库,然后在你的机器上编译你的代码,然后以二进制形式将它交叉到板子上。只要你有库(你也可以交叉编译)你应该没问题。 非常感谢所有回答和 cmets。这对我来说确实非常有用。【参考方案2】:

对于基于 linux 的系统,没有太多理由坚持使用固定的 OS+工具链版本,因为向后兼容性在 Unix 世界中是一个非常严重的问题。有时针对某些固定系统是好的,但坦率地说,这些是相当罕见的,即使这样,只要在目标机器/平台上进行测试,就可以在最新的系统上进行开发。

基本上你可以升级到例如 Ubuntu 12.04 LTS(长期支持)进行开发并坚持下去,目标平台/机器上不太可能出现任何类型的不兼容问题。

【讨论】:

但这是一个特殊的板子,只有 Ubuntu 8.04 的驱动程序。这就是问题所在。 @Linuxios,如果驱动程序在 8.04 中工作,但不能在较新的版本中工作,那么这些驱动程序就是垃圾,在任何情况下都不应该使用,至少不应该以目前的形式使用。我听说过类似“对于这个嵌入式编程,我需要这个特定版本的操作系统”这样的句子,但只有当“操作系统”是“Windows”时。再一次:不要使用糟糕的驱动程序,即使它们是“唯一的”驱动程序。在开始进一步的工作之前,获得更好的驱动程序 @Linuxios 这就是为什么我在建议升级时写“for development”的原因。您可以在更新的 12.04 版本的 Ubuntu 上进行开发,并以 8.04 版本平台为目标。 @Griwes 供应商声称支持 ubuntu 9.04 和 10.04,但我无法使用 USB CD 将它们安装到板上的紧凑型闪存卡上。 8.04 是我可以安装的唯一“受支持”版本。 我知道。这就是我在@DeadMG 的回答中的一个 cmets 中提出的建议。使用现代 Linux 操作系统进行开发并为控制板进行交叉编译。我知道你所说的更好的驱动程序是什么意思,但这听起来像是专有硬件之一,只有他们的驱动程序才能工作。【参考方案3】:

库等往往会在 Linux 发行版、新版本的 linux 发行版和其他 *nix 操作系统之间发生变化。

我曾经开发过一个必须在 Windows 和 RHEL 上运行的 C++ 应用程序。我是团队中的“Linux 人”,所以我必须处理哄骗我们用来在 Windows 上构建和工作的所有开源 linux 库(使用 cygwin),并获取开发人员所做的最新更改Windows 在 Linux 上工作。

在开发过程中,我们升级到了更新版本的 RHEL。这不是一次有趣的经历。库版本发生了变化,一些已被删除以支持其他“等效”库等。消除由更改 gcc 版本引起的所有问题也需要一段时间(当然,较新的 gcc 版本不那么宽容和暴露我们代码中的一些内容可能并不完全正确)。

在大型演示前几天,管理层通知我们该应用程序也需要在 Solaris 上运行。这不是一项简单的任务——Solaris 不是 Linux。他们暗示希望它在某一时刻在 IRIX 上运行。很高兴这没有发生。

我建议您选择特定版本的 Linux 发行版、gcc 等,并在整个开发过程中坚持使用它。当软件处于维护状态时,可以稍后升级这些东西。 RHEL 提供长期支持,但需要付费。您还可以考虑新发布的 Ubuntu 12.04 LTS

【讨论】:

以上是关于在嵌入式系统上从 DOS 切换到 Linux的主要内容,如果未能解决你的问题,请参考以下文章

在 64 位 linux 上从 32 位模式切换到 64 位(长模式)

(59)Linux操作系统深入应用

Linux 运维

Android内部自带的SQLite数据库操作dos命令

嵌入式Linux从入门到精通之第十二节:线程

网易云课堂_Linux操作系统入门(嵌入式开发零基础Ⅰ)_章节3:Linux 命令(下)