如何从微控制器转向嵌入式Linux?

15
作为对这个问题的反面:“对于软件开发人员来说,低级嵌入式系统编程难吗?”,我想请教如何从低级嵌入式系统转向更高级系统(尤其是嵌入式Linux)的编程建议。
我主要使用小型微控制器硬件和软件进行工作,现在只做软件。我的教育背景也主要涉及硬件和嵌入式系统。我没有上过多少编程课,了解很少关于软件设计或面向对象编码。
现在我手头有一个将在嵌入式Linux中完成的大项目。由于之前没有必要这样做,因此我在设计方面遇到了很大的问题,无法保持可控性。另外,利用多任务和阻塞调用而不是从主函数运行“并行”任务就像是另一个世界一样。
您从低级别编程转向具有操作系统(Linux)的更大型系统方面有什么经验?什么是困难的,您是如何解决的?需要怎样的心态?
从零开始学习C++是否值得,还是继续使用纯C?
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/ 也可能有帮助。

祝好运


1
我有一个工作正常的硬件,至少目前是这样。此外,我大多数时间都在尝试在电脑上编写代码。因此,实际编码是目前最大的问题,但我以后可能会需要这些。谢谢。 - Purple Tentacle
1
不用担心!祝你一切顺利。 - Aiden Bell

3

2
我不久前也遇到了非常相似的困境。我购买并阅读了《嵌入式Linux入门》,这是一种非常有帮助的方式,可以从微控制器的角度进行思维转换,转向高级操作系统。如果你有“花时间慢慢学习”的时间,你显然可以进行转变。但如果你需要快速提升,你可能需要强烈考虑找一个技术导师来帮助指导你。

1

你可能会发现,通过开始使用ucLinux,逐步进入Linux是很有用的。它基本上是运行在微控制器上的Linux系统。您可以了解内核的感觉,而不必将虚拟内存考虑进去作为过渡。看看ucLinux是否支持您已经熟悉的微控制器,以及内核如何与该架构交互。

我同意,《嵌入式Linux入门》这本书对于理解嵌入式Linux非常好。现在最好坚持使用C语言。 C++可以等待,它更适用于应用程序,而不是驱动程序代码。

当您熟悉ucLinux操作时,就可以开始使用带有MMU和虚拟内存的微处理器架构(例如ARM)上的普通Linux内核。

以上仅供参考!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接