作为一个嵌入式项目的副作用,我已经为ARM处理器开发了一个小型操作系统。虽然OS和我的用户代码位于单独的目录中,它们之间有清晰的边界,但是它们使用单个Makefile构建成一个映像。
我想以开源的方式发布操作系统。它由一个exokernel和userland驱动程序库组成。
我想决定的是,这个操作系统的用户应该如何在构建时将其与自己的代码结合起来,这样他们就有了一个可以闪现的图像。我能想到三种可能性:
1)让用户将OS源文件作为其项目的一部分。他们将重新创建我目前拥有的设置,例如,FreeRTOS就是这样做的(尽管它只有三个文件)。
2)将操作系统构建成用户代码可以链接的.a文件。这将允许用户使用自己的链接器脚本完全控制内存的放置(并且允许链接器告诉他们当合并的文本、BSS或数据部分超过其空间时)。
3)将操作系统构建成一个原始二进制文件,希望将用户代码连接到它的末尾。用户代码将以一个具有主函数地址的小标题(由链接器脚本放置)开始。用户代码还将链接到仅包含用户驱动程序的.a文件,而不是内核。
(1)使我最容易与git子树并行开发操作系统和用户代码。(2)似乎有最有用的链接过程。(3)最大分离。
如果你使用它,你会喜欢哪一个,为什么?
发布于 2014-01-17 15:58:32
对于一个小型系统,核心嵌入式操作系统,第一个选择是唯一真正可行的。
问题是,对于几乎每一个芯片组,您将不得不对与硬件的接口进行小的调整,这给您带来了很大的风险,即操作系统需要重新编译为新的芯片组。
因此,第一个选项不仅对您来说是最简单的,而且也是将其合并到下一个项目中的最容易的方法。
发布于 2014-01-19 10:25:05
首先让我说,我同意巴特的回答,但我想主张选择(2+)。
假设您的OSS项目是成功的,您有几十(或数百)个开发人员使用您的操作系统,并且您正忙于开发V2,这与V1有一些不同之处。一些用户有一些无法重现的奇怪问题,您怀疑这些问题与他们的构建环境有关。突然,你发现你干净的边界不那么干净了。
给定一个软件组件和一个使用它的应用程序,在构建过程中尽可能晚一点地将两者结合在一起是非常可取的。单独编译优于包含文件,可链接库优于对象,动态库优于静态,运行时优于编译时间。显然,并非所有技术都有选择。
这是你根据你所掌握的技术做出的决定,但是在分离方面的错误会随着时间的推移而带来好处。分离越大越好。
https://softwareengineering.stackexchange.com/questions/224543
复制相似问题