15

作为这个问题的对立面:“对于软件开发人员来说,低级嵌入式系统编程难吗?”我想就从低级嵌入式系统转向使用操作系统的更高级系统编程,尤其是嵌入式 Linux 寻求建议。

我主要使用小型微控制器硬件和软件,但现在只做软件。我的教育也主要包括硬件和嵌入式的东西。我没有多少编程课程,对软件设计或OO编码了解不多。

现在我手头有一个大项目,将在嵌入式 Linux 中完成。我在设计事物和保持事物可管理方面遇到了重大问题,因为我以前真的不需要这样做。同样利用多任务和阻塞调用而不是从主函数运行“并行”任务就像另一个世界。

您在从低级编程转向使用 OS(Linux)的更大系统方面有哪些经验?什么是困难的,你是如何解决的?需要什么样的心态?

从零开始学习 C++ 还是继续使用纯 C 是否值得?

4

4 回答 4

10

使用 Linux 内核替换微控制器系统的主要问题是驱动您正在与之交互的设备。为此,您可能必须编写驱动程序。我会说坚持使用 C作为语言,因为您将希望保持用户空间尽可能干净。查看uclibc库以获得更精简的 C 标准库。

http://www.uclibc.org/

您可能还会发现busybox很有用。这提供了许多用户空间实用程序作为单个二进制文件。

http://www.busybox.net/

然后,只需从某个存储启动到一个实时系统,并通过与您的硬件接口的 init 运行一些控制逻辑。如果需要,您可以访问实时系统并运行 busybox 实用程序。实际上,唯一的区别是用户空间比正态分布更精简,并且在目标方面您将“更接近”内核。

还可以查看实时 linux。

http://www.realtimelinuxfoundation.org/

如果您需要一些正式的任务完成承诺。我怀疑最难的部分将是启动/持久存储以及与您的硬件接口(如果它是异国情调的)。如果您不熟悉 Linux 引导,那么

http://www.cromwell-intl.com/unix/linux-boot.html

可能有帮助。

简而言之,如果您没有深入开发 Linux,没有构建自己的发行版,或者没有内核经验,那么您可能会发现编程很难

http://www.linuxdevices.com/可能也有帮助

祝你好运

于 2009-06-02T22:09:01.383 回答
3

为了使用 Unix/Linux,您应该了解 Unix 哲学: http: //www.faqs.org/docs/artu/ch01s06.html

我认为整本书读起来很有趣:http: //www.faqs.org/docs/artu/index.html

在这里,您可以找到用于嵌入式目标的免费 Linux 发行版以及引导加载程序以帮助您入门: http: //www.denx.de/wiki/DULG/WebHome

于 2009-06-03T08:11:38.577 回答
2

不久前,我陷入了非常相似的困境。我购买并阅读了Embedded Linux Primer,它是一种非常有帮助的方式,可以让你从心理上过渡到高级操作系统(从微控制器的角度来看)。

如果你有“时间‘慢慢来’”,你显然可以进行过渡。但是,如果您需要快速上手,您可能需要强烈考虑聘请技术导师来帮助指导您。

于 2009-06-03T11:56:45.203 回答
1

您还可能会发现从ucLinux开始进入 Linux 很有用。它基本上是微控制器上的 Linux。您可以在没有虚拟内存方面作为过渡的情况下对内核有所了解。查看 ucLinux 是否支持您已经熟悉的微控制器,并查看内核如何与该架构交互。

我同意 Embedded Linux Primer 这本书非常适合让您的大脑围绕嵌入式 Linux 进行学习。你现在最好还是坚持使用 C。C++ 可以等待,它对应用程序更有用,而不是驱动程序代码。

当您对 ucLinux 的运行方式感到满意时,您可以从具有 MMU 和虚拟内存的微处理器架构(例如 ARM)上的普通 Linux 内核开始。

只是我的两分钱!

于 2009-06-09T04:20:37.313 回答